カレンダーテーブルはPower BIで必須かも

カレンダーテーブルを作成するとこんないいことがあります

  • それぞれのテーブルに入っている日付項目を使ってカレンダーテーブルに情報を集約できる
  • 日付が隙間なくつくられるので、基本的にすべてのデータが紐づく
  • レポートを開いたときに生成されるので、基本的にメンテナンスがいらない

今回はレポートでの出現頻度が非常に高いカレンダーテーブルの生成までを書いていきます。カレンダーテーブルの改造については、また次回ということで、今回はカレンダーテーブルをつくる意味と、実際につくるところまでを説明します。

カレンダーテーブルをつくる理由

私たちが分析をしよう!と考えたとき、売上と目標、売上と活動など、異なる意味合いを持つデータを並べて比較をするということから始めることが多いかと思います。
上記のようなデータの組合せでは、ある月の売り上げとある月の目標を比較したり、日々の活動がどのように売上に貢献しているかを可視化しようとしたりと、日付がキーとなることが非常に多いのです。

Power BIでレポートを作成するときの鍵は、異なるテーブル間で共通の項目が存在する場合には親となるテーブルをつくることです。ですから、日付について親となるテーブルを作成することが非常に重要になります。

今回の目標はこんなビジュアルを作成することです

今回のゴール

Dax関数のCALENDARを使ってカレンダーテーブルをつくろう

売上と広告費があって、そのバランスを見ましょう、というものです。データに関しては完全に乱数でつくっているので違和感があるという突っ込みはなしでお願いします。以下のようなデータです。

売上と広告費

売上にも広告費にもそれぞれDateという項目に日付が入っていますので、それぞれをカレンダーテーブルでまとめ上げたいと思います。

リレーションがない場合の表示

図は売上のDateとAmount、広告費のAmountを並べた状態。売上の日付と広告費は関連がないので、うまくフィルタリングできていないことがわかります。

新しいテーブルという機能を使う

モデリングタブに移動すると、新しいテーブルという機能がありますのでこれをクリックします。
Dax式を使ってテーブルをつくるという、使いこなせれば非常に良い機能です。

新しいテーブルの追加

CALENDAR関数を使ってテーブルを生成する

CALENDAR(#最も古い日付,#最も新しい日付)


最も古い日付に入った値から最も新しい日付に入った日付までの全ての日付を生成するという関数です。詳しくはマイクロソフト社のリファレンスをご確認ください。
今回は売上と広告費とで、最小の日付が小さい方を最も古い日付、最大の日付が大きい方が最も新しい日付となるように設定しています。

ちなみに、重複なしのデータを生成するにはVALUES関数もありますが、これはあくまで含まれているデータの中から重複を消すということしかしてくれませんので、テーブルの中に欠けている日付があればそれが生成されなくなってしまいます。
今回のようなケースでは複数のテーブルをまとめ上げるため、一つでも欠けている日付があると他のテーブルにあるデータがうまく紐づかなくなってしまうことが考えられます。

できあがり

あとは、売上のDateと広告費のDateに対してリレーションを設定すれば完了です。

先ほどの表も、Dateをカレンダーテーブルのものに差し替えれば、日付ベースで売上と広告費を並べることができているのがわかります。

リレーションがうまく機能していないときは、それぞれのテーブルの日付項目が日付/時刻項目ことが原因かと思われます。そういった場合は、クエリの編集で各項目を日付項目に変えるか、リレーション用のテキスト項目をつくるかといった工夫が必要になります。

一工夫は別の機会に

実は、このカレンダーテーブルを生成した時には定番となる作業があります。月を00月の形式で表示する列を追加したり、週を持たせたり、会計年度を持たせたり。そこまでやってしまうと非常に長くなってしまうので、今回はなぜカレンダーテーブルが必要なのか、そして、その作り方を解説しました。

今回のpbixファイルがきになる!という方は、弊社Webサイトのお問い合わせフォームから、本記事名[カレンダーテーブルはPower BIで必須かも]をお問い合わせ内容にご記入の上送信いただければ元ファイルをお送りいたします。

今回のゴール