ここからは、Power BIの操作方法について、少し応用的な内容に入っていきます。これまで、たくさんの演習を通してPower BIのさまざまな機能を学習してきました。しかし、実際にいくつかダッシュボードを作成していると、「あれ? こういうことはPower BIではできないのかな?」と、手を止める場面が出てくることがあります。
その一つの事例が、カレンダー、つまり日付の扱いに関するものです。
例えば、日付を横軸にして折れ線グラフを作成するだけであれば、Power BIに用意されている標準の日付設定で問題ありません。ところが、実際の業務では、もう少し複雑な日付の扱いが必要になることがあります。
例えば、「休日や祝日を非表示にしたい」「月末や四半期末の在庫を表示したい」といったケースです。また、「年度の開始日」を考える必要もあります。日本の企業では、年度の開始日は必ずしも1月とは限りません。4月開始が一般的ではありますが、企業や組織によっては、異なるタイミングを年度の開始日としている場合もあります。
このように、通常の日付設定だけでは、業務上必要な日付の情報をうまく表現できないケースがあります。そこで今回は、DAX関数を使って「カレンダーテーブル」を作成してみましょう。
カレンダーテーブルとは、期間中のすべての日付を「1日=1行」で持つテーブルのことです。休日や祝日、月末、四半期末、年度など、必要な情報をあらかじめ列として登録しておくことができます。そして、そのカレンダーテーブルを利用することで、さまざまな業種や業務のルールに合わせた日付の管理ができるようになります。つまり、Power BIでの日付の扱いに対する自由度が、一気に高くなるわけですね。
作り方は簡単です。「モデリング」リボンの「新しいテーブル」をクリックし、数式バーに下のDAX式を貼り付けて、Enterで確定してください。日付の範囲は、サンプルデータの期間(2022〜2025年)に合わせてあります。
カレンダー =
ADDCOLUMNS (
CALENDAR ( DATE ( 2022, 1, 1 ), DATE ( 2025, 12, 31 ) ),
"年", YEAR ( [Date] ),
"月", MONTH ( [Date] ),
"年月", FORMAT ( [Date], "YYYY-MM" ),
"曜日", FORMAT ( [Date], "aaa" ),
"土日フラグ", IF ( WEEKDAY ( [Date], 2 ) >= 6, 1, 0 ),
"月末フラグ", IF ( [Date] = EOMONTH ( [Date], 0 ), 1, 0 ),
"年度", IF ( MONTH ( [Date] ) >= 4, YEAR ( [Date] ), YEAR ( [Date] ) - 1 ),
"年度四半期", "Q" & ( FLOOR ( MOD ( MONTH ( [Date] ) - 4, 12 ) / 3, 1 ) + 1 )
)
式の中身を簡単に説明すると、CALENDAR関数が開始日から終了日までの連続した日付の一覧を作り、ADDCOLUMNSでそこに列を追加しています。年度と年度四半期は「4月開始」として計算していますので、所属する組織のルールに合わせて数字を変えてください。
テーブルができたら、モデルビューを開いて、「カレンダー」の「Date」と「販売実績」の「販売日」をドラッグでつなぎ、リレーションを作成します。これで、グラフの軸やスライサーに、カレンダーテーブル側の「年度」や「曜日」が使えるようになります。「土日フラグ」でフィルターすれば、休日を除いた表示も可能です。
なお、祝日だけは計算式では求めにくいため、Excelでカレンダー表を作り、祝日の列を手で入力して、それをインポートする方法が実務的です。DAXで作るかExcelで作るか、要件に合わせて選んでください。