【Query】カレンダーテーブルを作る

カレンダーを作成するとき、Power BIのDAX関数でカレンダーテーブルを作ればいいですが、Power Queryで作らないと欲しいデータが得られなさそうなときに何とかする方法をメモしておこうと思います。

も

Power BIで作ったカレンダーテーブルをPower Queryに読み込めないかなって思ったけどできなかった

風場 輝


適当に作ったダミーデータでPower BI練習中。バージョンによっては画面がかなり変わることもあるのであしからず。
この記事作成時のPower BI Desktopバージョンは「2.141.1558.0 64-bit (2025年3月)」

とりあえずPower Queryを開いて適当に日付を記入したクエリを作成しました。一番古い2025/1/27から一番新しい2025/6/20までのすべての日付一覧が作成されるのを目指します。

ぷ

Power Queryの「クエリ」とPower BIの「テーブル」と「データ」の違いがよくわかんない

も

わかりみ

Power QueryだとCALENDARAUTOみたいなのは無いみたいなので最小値と最大値を取ってカレンダーを作っていきます。EdgeにくっついているCopilotに聞きまくったので早速やりましょう。Copilotは詳細エディターにコピペできるコードを教えてくれましたがあんまり理解できていないので一つずつ作ります。

まずはPower Queryのホームタブにある「詳細エディター」をクリックして一番上のコードを確認しておいてください。

letの下に「ソース」と書いてあります。もしここが英語でソースになっていた場合はこの後の「ソース」は「Source」に変えてもらえればうまく動くんじゃないかと思います。

それではカスタム列を作って日付の最大値を取っていきます。
列の追加タブからカスタム列を選択して以下のコードを入力します。[日時]のところは最大値を取りたい列の名前を右から挿入してください。

= List.Max(ソース[日時])

同じように最小値も作っておきます。

= List.Min(ソース[日時])

作ったカスタム列は忘れずに日付型に変えておきましょう。

ぴ

いい感じ

この最大値・最小値を使ってカレンダー列を作ります。カスタム列を作成して以下のコードを入れてください。

= List.Dates([最小値],Duration.Days([最大値] - [最小値]) + 1,#duration(1,0,0,0))

List.Dates([最小値] のところはリストの開始日を指定しています。今回で言うと2025/01/27からカレンダーを作ってねということですね。
Duration.Days([最大値] – [最小値]) + 1 はこの間の日数ですよっていうことでしょう。 + 1 にすると最大値も最小値も含めて返すことができます。
#duration(1,0,0,0)) はduration(days, hours, minutes, seconds)の構成になっていて、今回daysのところに1が立っているので「1日ごとに」ということです。

作ったカスタム列は閉じた状態になっているので列名の横の矢印ボタンをクリックして「新しい行に展開する」を押します。

完成です~!
残したい列を選択→右クリック→他の列の削除で不要な列は消しといてください。

タイトルとURLをコピーしました