PowerQuery 日付型データ② (計算)
今回はパワークエリのデータ型のうち、日付型データの計算を扱います。
以下、前回の記事のサンプルデータを使用します。
ポイントとしては、日付・時刻の加減算には期間(Duration)型を使用する点です。
また、2点の日付・時間と差も同様に期間(Duration)型として計算されます。
日付の加算
X日後の日付(データ型のエラー)
まずはカスタム列で以下の式を追加します。
サンプル式: [日付] + 1
すると結果はErrorとなります。
Errorをクリックしてエラーの中身を確認します。
メッセージを見ると、どうやらDate型とNumber型では +(足し算)を行えないようです。
X日後の日付(#durationの使用)
今度はPowerQuery 日付型データ① (基本) - Akira Takao’s blogに登場した期間型のデータを使用します。
期間型の書式: #duration(日数, 時間, 分, 秒)
サンプル式: [日付] + #duration(1, 0, 0, 0)
すると無事、1日後の日付となりました。
ちなみに負の数:ー1を入力すると、1日前の日付となります。
サンプル式: [日付] + #duration(-1, 0, 0, 0)
X日後の日付(他列との連携)
今度は他列の値を日付に反映させます。まずMS社のガイドで#durationを検索して仕様を確認します。
#duration - PowerQuery M | Microsoft Docs
#duration(days as number, hours as number, minutes as number, seconds as number) as duration
ここを見ると、それぞれのパラメータは数字型が使えますので、Number列を当てはめてみます。
サンプル式: [日付] + #duration([Number], 0, 0, 0)
それぞれNumberの値の分だけ加算された日付が表示されました。
さらに次は日付/時刻型と期間型の列を加算します。
サンプル式: [#"日付/時刻"] + [期間]
※ 今回は期間の時刻部分の加算も確認するため、日付列ではなく日付/時刻列を使用しています。
日、時、分、秒が加算されました。
X日後の日付(関数を使用した例)
最後は関数を使用したパターンです。今回もまずMS社のガイドでDateを検索すると、Date.AddDaysという関数が見つかります。
#duration - PowerQuery M | Microsoft Docs
Date.AddDays(dateTime as any, numberOfDays as number) as any
この使用を参考にカスタム列の数式を以下のように変更します。
サンプル式: Date.AddDays([日付],1)
すると無事1日あとの日付にすることができました。
NumberOfDaysの値をNumber列に差し替えても同様に上手くいきます。
サンプル式: Date.AddDays([日付],[Number])
ただし、関数の仕様を確認すると、戻り値の方がAny(すべて)型になっているので、このまま閉じて読み込むを実行すると日付の書式になりません。
Date.AddDays(dateTime as any, numberOfDays as number) as any
データ型を日付型に変換して、再度閉じて読み込むを実行してください。
日付の差分
最後に日付の差分を求めます。新しいカスタム列を作成して、以下の数式を入力してください。
サンプル式: [日付の加算] - [日付]
すると、結果が期間型の形式で表示されます。
期間型のデータでは扱いにくいので、カスタム列の式を以下のように変えて日数に変換します。
サンプル式: Duration.Days([日付の加算] - [日付])
これで日数のデータになりました。