Power BI 最短でカレンダーテーブルを作る方法
Power BIで時系列分析を行う上で、別途日付テーブルを持っておくと諸々分析しやすいのですが、
わざわざExcel等でカレンダーテーブル(日毎で月、四半期、年の情報を持つマスタ)を作ってインポートする必要はなく、Power BI Dekstop内の簡単なクエリで対応できたので共有です。
Excelで作るとなるとデータを都度更新する一手間発生するのですが、
このやり方であれば効率的にデータを作れますし、マニュアルで作るよりもミスが少なく確実なのでおすすめです。
Contents
日付テーブルの作る2つの方法
まず日付テーブルを作る方法ですが、簡単な方法としては主に下記2つがあります。
- CalenderAuto関数を使う
- Calender関数を使う
実際の作り方の前にまずはそれぞれの違いを見ていきましょう。
作り方を知りたい場合は、ここは飛ばしていただいて大丈夫です。
※You Tubeでも紹介しています!
1.CalenderAuto
こちらはPower BI内のデータモデルを自動で読み取って、その読み取った情報に基づいて日付テーブルを自動で作ってくれる関数です。
例えば下図のように2019年1月1日からの商品売上データがあるとします。
「新しいテーブル」をクリックし、
DateTable = Calenderauto([表示させたい年度末の月])と入力します。
日系上場企業の多くは3月末が年度末なので、=CalenderAuto(3)と入力します。
すると、下図の通り年度初めとなる4月からのデータが自動で作成されることが分かります。
このようにCalenderAuto関数の方では、最初にインポートした「売上データ」が、2019年1月~のデータであることを自動で読み取り、
その期間をカバーする2018年4月1日からのデータを自動で作成します。
この方法ではデータを自動で更新し続けてくれるので、将来的なデータのメンテナンスが不要になるという利便性があります。
2.Calender
一方2つ目の方法であるCalender関数は、期間を自分で指定して日付テーブルを作成していきます。
下図の通りです。
ここでは=Calender (Date(2000,1,1), Date(2025,12,31))と日付の期間を指定しているので、2000/1/1~2025/12/31までの指定して期間分のデータが作成されます。
こちらの方法では作成する期間を任意で指定できるので、不要な期間分のデータは取り除けたり、自分のコントロール下でデータが作成できるといった利便性があります。
追加情報(列)を加える
先程、Calender関数・CalenderAuto関数で作った日付テーブルに追加の情報を加えていきます。
例えば、日付情報から「月」のみを抽出した列を作成したり、「年」のみを抜き出した列を追加したりです。
方法としては、「新しい列」をクリックして新規で列を作成し、関数欄にYear = Year(‘Date”[Date])等の関数を加える形です。
こんな感じで表示したい情報(月、曜日、etc)を1つずつ書いていくことでデータを日付データを作成できます。
左から、
Month = MONTH(‘DateTable'[Date])
Month+月 =
‘DateTable'[Month] & “月”Year = YEAR(‘DateTable'[Date])
曜日 = WEEKDAY(‘DateTable'[Date], 2)
って感じです。
もっと簡単に素早く作る方法
上記の方法だと、レポート毎で作業が発生するので手間がかかります。
そこで、下記のような関数を書き、他レポートでも流用できるようにしてみました。
※随時内容更新して改善しています!!ご意見あればお願いします
Date = ADDCOLUMNS ( CALENDARAUTO(3), "年", YEAR ( [Date] ), "月数", FORMAT( [Date], "MM"), "月", FORMAT ( [Date], "MM" & "月"), "年/月", FORMAT ( [Date], "YYYY/MM" ), "会計年度(年)", IF(QUARTER([Date]) = 1, YEAR([Date])-1, YEAR([Date])), "四半期(1月)", QUARTER([Date]), "会計年度(四半期)", IF(QUARTER([Date])=2,1,IF(QUARTER([Date])=3,2,IF(QUARTER([Date])=4,3,4))), "曜日(英語)", FORMAT ([Date], "ddd"), "曜日(日本語)", IF(FORMAT ([Date], "ddd")="Sun","日",IF(FORMAT ([Date], "ddd")="Sat","土",IF(FORMAT ([Date], "ddd")="Mon","月",IF(FORMAT ([Date], "ddd")="Tue","火", IF(FORMAT ([Date], "ddd")="Wed", "水",IF(FORMAT ([Date], "ddd")= "Thu", "木", IF(FORMAT ([Date], "ddd")="Fri","金"))))))))
Date = ADDCOLUMNS ( CALENDAR(DATE(2015,1,1),DATE(2025,12,31)), "年", YEAR ( [Date] ), "月数", FORMAT( [Date], "MM"), "月", FORMAT ( [Date], "MM" & "月"), "年/月", FORMAT ( [Date], "YYYY/MM" ), "会計年度(年)", IF(QUARTER([Date]) = 1, YEAR([Date])-1, YEAR([Date])), "四半期(1月)", QUARTER([Date]), "会計年度(四半期)", IF(QUARTER([Date])=2,1,IF(QUARTER([Date])=3,2,IF(QUARTER([Date])=4,3,4))), "曜日(英語)", FORMAT ([Date], "ddd"), "曜日(日本語)", IF(FORMAT ([Date], "ddd")="Sun","日",IF(FORMAT ([Date], "ddd")="Sat","土",IF(FORMAT ([Date], "ddd")="Mon","月",IF(FORMAT ([Date], "ddd")="Tue","火", IF(FORMAT ([Date], "ddd")="Wed", "水",IF(FORMAT ([Date], "ddd")= "Thu", "木", IF(FORMAT ([Date], "ddd")="Fri","金"))))))))
下図のように新しいテーブルを作成を選択して、
ペタッと貼り付けるだけで日付テーブルが完成します。
後は列を昇順で並び替えます。
以上です!
※You Tubeでも紹介しています!
この日付マスタを使えば、とりあえず曜日毎での分析や、会計年度毎での分析等、分析の幅が広がると思うので参考にしてみて下さい。
その他欲しいデータがあれば教えて下さいな。
2 Comments
” が ” と なっているため、貼り付けしてもうまくいきません。
ご連絡ありがとうございます。修正致しました。よろしくお願い致します。