一度あることは2度あるからしっかりとPCと奮闘メモ日記

日々の実話に基づいて検索してもズバリがなかったものを綴っていきます。

PowerQuery整数の分を時間型に変換する (整数をtime型に変更する)

今回もあるシステムから別のシステムにデータ移行したときの話。

「予約滞在時間」のデータ型を変換する必要がありました。

※初心者が手間をかけて変換しました。他の方法があればご指摘いただきたいです。

 

移行元の「予約滞在時間」→120、90、180と数値型

移行先の「予約滞在時間」→2:00:00 1:30:00 3:00:00 time型

 

 

今回の方法 PowerQueryを使います。

①時間:移行元の滞在時間を60で割った商のカスタム列を作成

例 120÷60=2 90÷60=1あまり30 180÷60=3

②分:移行元の滞在時間を60でわったあまりのカスタム列を作成

例 120÷60=2 あまり0なので分は0

90÷60=1あまり30 あまり30なので30分

③ここで求めた数値を#time(時、分、秒)にあてはめてカスタム列を作成する

 

 では詳しくメモします。

①時間列の作成

#time(時、分、秒)の「時」の列を作成します。

「時」は60でわったときの商なので

Number.IntegerDivide関数を使いました。

 除算した結果の整数部分を返す関数です。詳しい説明は↓参照

Number.IntegerDivide - PowerQuery M | Microsoft Docs

 

具体的には

PowerQuery→列の追加→カスタム列

カスタム列の式には

Nuber.IntergerDivide([予約滞在時間],60)と入力し「OK]を押しました。

そうすると

[予約滞在時間]を60で割った商の列が新たに作成されます。

 

PowerQueryカスタム列Number.InterDivid

PowerQueryカスタム列Number.InterDivide

 

②分列の作成

#time(時、分、秒)の「分」の列を作成します。

「分」は60でわったときのあまりなので

Number.Mod関数を使いました。

 あまりを取得できる関数です。詳しい説明は↓参照

Number.Mod - PowerQuery M | Microsoft Docs

 

具体的には

PowerQuery→列の追加→カスタム列

カスタム列の式には

Nuber.Mod([予約滞在時間],60)と入力し「OK]を押しました。

そうすると

[予約滞在時間]を60で割ったあまりの列が新たに作成されます。

PowerQueryカスタム列Number.Mod

PowerQueryカスタム列Number.Mod
③時と分の列からtime型の列を作成する

time型のデータは#time(時、分、秒)で作成できるので

先ほど作成した時間の列と分の列が使えます。

具体的にはPowerQuery→列の追加→カスタム列

カスタム列の式には

#time(時間の列、分の列、0)

を入力します。↑列名は各自変更してください。秒は0にしました。

 

PowerQuery time型の列を作成する

PowerQuery time型の列を作成する

 

数値型の分からtime型の列を作成することができたとおもったのですがよく見るとデータ型がtime型でないようです。なのでtime型に変更します。

列の見出しの上で右クリックして「時間」を押せば time型に変更できます。

PowerQuery time型に変更する

PowerQuery time型に変更する

 

 

 

数値型の分からtime型の列を作成することができました。

 

time型の列を作成できた

time型の列を作成できた

 

 

とりあえず今回はこの方法でデータ変更をしたのですが

このやり方だと

time型の列を新たに作成する ←今回はここまでをブログでメモ

最初からある列を消す。

time型の新たに作成した列をリネームする

という作業が必要で面倒くさいです。

最初からある列(300分、120分の列)をそのまま変更(3:00:00,2:00:00)できる方法を知りたいです。