データ加工をしていると、yyyymmdd形式の日付を日付データ型に変換したい。ある2つの日付の期間を計算したい。タイムゾーンごとに日付、時刻を表示したい。
といった事があると思います。Power Queryでは時間(日付・時刻・期間)に関するデータが用意されています。
この記事では、時間(日付・時刻・期間)のデータ加工方法を紹介していきます。
例として下表のデータを使います。
文字列については、「Power Queryで文字列のデータ加工を行う」の記事で紹介しています。
時間に関するデータ型は5つある
日付/時刻(datetime)
日付と時刻をあらわすデータ型です。
例 | 2024年9月1日 18時33分25秒 |
書式 | #datetime(年, 月, 日, 時, 分, 秒) |
サンプル式 | #datetime(2024, 9, 1, 18, 33, 25) |
日付(date)
日付のみをあらわすデータ型です。
例 | 2024年9月1日 |
書式 | #date(年, 月, 日) |
サンプル式 | #date(2024, 9, 1) |
時刻(time)
時刻のみをあらわすデータ型です。
例 | 18時33分25秒 |
書式 | #time(時, 分, 秒) |
サンプル式 | #time(18, 33, 25) |
日付/時刻/タイムゾーン(datetimezone)
日付と時刻+タイムゾーンをあらわすデータ型です。
例 | 2024年9月1日 18時33分25秒 +9:00 |
書式 | #datetimezone(年, 月, 日, 時, 分, 秒, +時, +分) |
サンプル式 | #datetimezone(2024, 9, 1, 18, 33, 25, 9, 0) |
期間
日付や時刻の期間をあらわすデータ型です。
例 | 5日と3時11分33秒 |
書式 | #duration(日数, 時間, 分, 秒) |
サンプル式 | #duration(5, 3, 11, 33) |
データ型「日付/時刻」のデータ加工
現在の日付・時刻を取得する
Power Queryエディターの「列の追加」タブを開き、「カスタム列」をクリックします。
「新しい列名」は必要に応じて列名を変更します。「カスタム列の数式」に「DateTime.LocalNow()」を入力し、OKをクリックします。
現在の日付・時刻が表示できました。
データ型「日付」のデータ加工
yyyymmdd形式の数字を日付に変換する
「変換」タブを開き、yyyymmdd形式の数字になっている日付列をクリックします。「データ型」ー「日付」をクリックします。
日付型に変換できず、エラーとなってしまいます。
日付型に変換するためには、まずテキスト型に変換する必要があります。下図の手順でテキスト型に変換しましょう。
テキスト型に変換した後、下図の手順で日付型に変換します。
「新規手順の追加」をクリックします。「現在のものを置換」をクリックすると、テキスト型に変換した手順が上書きされてしまうのでまたエラーになってしまいます。
日付型に変換できました。
○○後の日付を計算する
「列の追加」タブを開き、「カスタム列」をクリックします。例では現在の日付から10日後の日付を計算する列を追加します。
「新しい列名」は必要に応じて列名を変更します。「カスタム列の数式」に「Date.AddDays(<計算元になる日付列>, <加算する日数>)」を入力し、OKをクリックします。
現在の日付から10日後の列が追加されました。
10日後ではなく、1ヶ月後、1年後などの計算も可能です。
単位 | 基準日 | 数式サンプル | 結果 |
---|---|---|---|
1日後 | 2024年9月1日 | Date.AddDays(#date(2024, 9, 1), 1) | 2024年9月2日 |
1週間後 | 2024年9月1日 | Date.AddWeeks(#date(2024, 9, 1), 1) | 2024年9月8日 |
1ヶ月後 | 2024年9月1日 | Date.AddMonths(#date(2024, 9, 1), 1) | 2024年10月1日 |
1四半期後 | 2024年9月1日 | Date.AddQuarters(#date(2024, 9, 1), 1) | 2024年12月1日 |
1年後 | 2024年9月1日 | Date.AddYears(#date(2024, 9, 1), 1) | 2025年9月1日 |
データ型「時刻」のデータ加工
データ型「日付/時刻」から時刻だけを抜き出す
データ型「日付/時刻」の列をクリックします。「列の追加」タブー「時刻」ー「時刻のみ」をクリックします。
時刻のみを抜き出した列が追加されます。
データ型「日付/時刻/タイムゾーン」のデータ加工
現在の日付・時刻・タイムゾーンを取得する
「列の追加」タブを開き、「カスタム列」をクリックします。
「新しい列名」は必要に応じて列名を変更します。「カスタム列の数式」に「DateTimeZone.LocalNow()」を入力し、OKをクリックします。
現在の日付・時刻・タイムゾーンが表示できました。※日本のタイムゾーンはUTC+9になります。
データ型「期間」のデータ加工
2つの日付を比較して日数を計算する
「列の追加」タブを開き、日付列をクリックします。次に「日付」ー「期間」をクリックします。
現在の日付から選択した列の日付の日数を計算されます。例では試験日までの日数を計算したいのですが、この計算式ではマイナスの値になってしまいます。
そこで、数式「Date.From(DateTime.LocalNow()) – [試験日]」を「[試験日] – Date.From(DateTime.LocalNow())」に変更します。
日数を年に換算する
「列の追加」タブを開き、期間列をクリックします。次に「期間」ー「合計年数」をクリックします。
日付を年に換算した列が追加されます。