PowerQuery(パワークエリ)で日付・時間の計算方法を紹介します。日時データの差の計算方法(減算)と日時データに期間を足す方法(加算)を解説しています。
テストデータを用いて経過日数や年齢などの計算方法も解説していますので参考にしてみてください。
日付/時刻を表すデータ型
日付や時刻を表すデータ型は、よく使われる「日付」や「日付/時刻」を含めて5種類あります。
これらの加算、減算方法について後述で解説します。
データ型 | データ例 | データ例の関数表記 |
---|---|---|
日付 | 2023/04/01 | #date(2023,4,1) |
日付/時刻 | 2023/04/01 11:12:13 | #datetime(2023,4,1,11,12,13) |
時刻 | 11:12:13 | #time(11,12,13) |
日付/時刻/タイムゾーン | 2023/01/02 10:11:40 +02:20 | #datetimezone(2023,1,2,10,11,40,2,20) |
期間 | 14.10:11:40 | #duration(14,10,11,40) |
「期間」は日時データの計算に使用するデータ型であり
それぞれの数値は #duration(日数,時間,分,秒) を表しています。
Sponsored link
日付/時刻の差を計算する(減算)
2つの日付データの差を計算するには列の追加タブにある「日付と時刻から」を利用します。
計算したい単位によって利用するボタンは異なります。
・日数の差: 「日付」の「日数の減算」
・時間の差: 「時刻」の「減算」
日数の差の計算(経過日数)
日数の差を計算するには日付データ(または日付/時刻データ)の列と「日数の減算」ボタンを利用します。
【計算手順】
- 引き算で引かれる側(遅い日付)の日付データを選択する。
- Ctrlキーを押しながら引き算で引く側(早い日付)の日付データを選択する。
- 列の追加タブ内にある「日付」の「日数の減算」を選択する。
時間の差の計算
時間の差を計算するには日付/時刻データの列と「時刻」にある「減算」ボタンを利用します。
【計算手順】
- 2つの日付/時刻データ列をCtrlキーを押しながら複数選択する。※引かれる側を最初に選択
- 列の追加タブ内にある「時刻」の「減算」ボタンで差を計算する。
- 変換タブにある「期間」ボタンを利用して期間データを利用する単位(時間・分・秒)に変換する。
上記の計算手順の解説例として、下図のように2つの列の時間の差を計算します。
時間差を計算する2つの列データを選択します。
- 引き算の引かれる側の[終了日]を選択する。
- 引き算の引く側の[開始日]を選択する。
列の追加タブにある「時刻」の「減算」を選択する。
減算の結果のデータ型は「期間」となりますので、時間に単位を変換します。
- 計算結果のデータ列「減算」を選択する。
- 変換タブの期間にある「合計時間数」をクリックする。
以上で計算完了です。減算の列に合計の経過時間が算出されています。
Sponsored link
日付に一定期間を足す(加算)
日付データに一定期間を足して、日付を前後にずらす(翌日、前日、1ヶ月後など)にはDate関数を利用します。
まずは使用する関数について紹介します。
Date.AddDays関数とは?
日付データに一定期間を足し引きして日付を変更したい場合は下記の関数を利用します。
日付をずらしたい単位(日、週、月など)によって関数を使い分けます。
加算期間 | 関数 |
---|---|
日 | Date.AddDays ( 日時データ, 追加日数) |
週 | Date.AddWeeks ( 日時データ, 追加週数) |
月 | Date.AddMonths ( 日時データ, 追加月数) |
四半期 | Date.AddQuarters ( 日時データ, 追加四半期数) |
年 | Date.AddYears ( 日時データ, 追加年数) |
〇日後を算出したい場合は日付データにプラスの値を足して、〇日前ならばマイナスの値を足します。
日付データの加算手順
計算手順の解説例として、下図のように日付データの5日後の日付を計算します。
まず日付計算を行うカスタム列を追加します。
列の追加タブの「カスタム列」をクリックする。
カスタム列の式に下記の計算式を入力してOKをクリックする。
5日後を計算するのでDate.AddDays関数を用いて追加日数に5を設定します。
Date.AddDays([開始日],5)
以上で日付データの足し算は完了です。
Sponsored link
カスタム列と演算子(+,-)で日付を計算する
マイナス記号で日付の差を計算する
日付データの差を計算するにはマイナス記号(-)を使った方法もあります。
計算結果をどの単位(時間、日数など)で表示するかにより使用する式が異なりますので、時間差が知りたいのか日数差が知りたいのかで式を使い分けてください。
計算結果の単位 | 式 |
---|---|
秒 | Duration.TotalSeconds ( [日付データ1] – [日付データ2] ) |
分 | Duration.TotalMinutes ( [日付データ1] – [日付データ2] ) |
時間 | Duration.TotalHours ( [日付データ1] – [日付データ2] ) |
日 | Duration.TotalDays ( [日付データ1] – [日付データ2] ) |
マイナス記号を用いた計算式の結果は期間データとなります。
そのため計算結果をほしい日付単位に変換する関数Duration.Total〇〇関数を一緒に用いています。
時間差の計算手順(経過時間)
計算手順の解説例として、下図の2つの日付/時刻データから経過時間を計算します。
まず時間差の計算を行うカスタム列を追加します。
列の追加タブの「カスタム列」をクリックする。
カスタム列の式に下記の計算式を入力してOKをクリックする。
[開始日]と[終了日]の2つの日付/時刻データの時間差を計算するのでDuration.TotalHours関数を用いた式を利用します。
Duration.TotalHours ([終了日] - [開始日])
以上で日付/時刻データの差(経過時間)の計算は完了です。
プラス記号で日付に一定期間を足す
日付データを一定期間ずらすのにプラス記号(+)を使った方法もあります。
それには下記フォーマットの期間データを用いて式を作成します。足し引きしたい期間を「期間」データのフォーマットを用いて作成し、日付データに足し合わせます。
一定時間前後の日付/時刻の計算手順
計算手順の解説例として、日付/時刻データの一定時間後(5時間後)のデータを計算します。
まず時間の加算計算を行うカスタム列を追加します。
列の追加タブの「カスタム列」をクリックする。
カスタム列の式に下記の計算式を入力してOKをクリックする。
[開始日]に5時間を表す期間データ #duration(0,5,0,0) を足し合わせます。
[開始日] + #duration(0,5,0,0)
以上で日付/時刻データへの期間データの加算計算は完了です。
Sponsored link
日付データの計算例(年齢計算)
年齢計算(本日時点)
日付データの計算の利用例として生年月日から計算日時点での年齢を算出する方法を紹介します。
まず年齢計算を行うカスタム列を追加します。
列の追加タブの「カスタム列」をクリックする。
カスタム列の式に下記の計算式を入力してOKをクリックする。
式の意味としては、まず今日の日付を表す関数 Date.From(DateTime.LocalNow()) から生年月日を引いて経過期間を計算します。そのあと、経過期間を経過日数に変換して365で割ることで経過年数を出しています。
Duration.TotalDays(Date.From(DateTime.LocalNow())-[生年月日])/365
計算結果には1未満の小数点以下の数字が出てくるので、それらを切り捨てます。
計算結果の列[年齢]をクリックして選択したあと、変換タブにある「丸め」から「切り捨て」を選択します。
以上で年齢の計算は完了です。
工程毎の作業時間の計算
下記のような作業開始データと作業終了データから工程ごとの合計作業時間(分)を計算する方法を紹介します。
まず経過時間(分数)の計算を行うカスタム列を追加します。
列の追加タブの「カスタム列」をクリックする。
カスタム列で作業開始から作業終了の経過時間(分)を計算します。
カスタム列の式に下記の計算式を入力してOKをクリックする。[作業開始]と[作業終了]の2つの日付/時刻データの時間差(分)を計算するのでDuration.TotalMinutes関数を用いた式を利用します。
Duration.TotalMinutes ( [作業終了] - [作業開始] )
次に計算した作業時間をグループ化を用いて工程ごとに合計します。
- 任意の列を選択する。
- 変換タブの「グループ化」を選択する。
- グループ化する列に[工程]、操作に[合計]、集計される列に[経過時間]を選択して工程ごとで経過分数を集計する。
グループ化については下記記事で紹介してますので参考にしてみてください。
以上で工程ごとの作業時間(分)の集計は完了です。
Sponsored link
パワークエリの学習本についてはコチラの記事でまとめてますので参考にしてみてください。
・初心者向けおすすめ学習本
・初中級者向けおすすめ学習本
コメント