ブログ

Power BIで実現する高度な日付分析 カレンダーテーブルの実践ガイド

#Power BI #カレンダーテーブル #日付分析

積極採用中
セミナー情報

Power BIでカレンダーテーブルを作成し、年・月・日で分析できるようになったものの、「前年比を出したい」「会計年度で集計したい」「受注日と出荷日を切り替えて分析したい」といった実務要件に直面すると、基本的な日付テーブルだけでは対応しきれないことがあります。
高度な日付分析では、カレンダーテーブルを単なる日付一覧ではなく、
分析基盤として設計することが重要です。

本記事では、タイムインテリジェンス関数を活用した前年比・累計分析から、会計年度対応、営業日集計、複数日付列の切り替え分析まで、実務で役立つカレンダーテーブルの設計と活用方法を解説します。

高度な日付分析にカレンダーテーブルが欠かせない理由


Power BIでは日付列だけでも集計できますが、
前年比や累計などの高度な分析を行う場合は、専用のカレンダーテーブルが欠かせません。
タイムインテリジェンス関数は、適切に設計された日付テーブルを前提として動作します。まずは、その理由と基本的な考え方を整理しましょう。

タイムインテリジェンス関数は「専用日付テーブル」を前提とする

Power BIには、前年比や累計を簡単に計算できるタイムインテリジェンス関数が用意されています。

代表的な関数は次のとおりです。
タイムインテリジェンス関数
これらの関数は、独立した日付テーブルを参照することを前提に設計されています。

また、日付テーブルには以下の条件が求められます。
タイムインテリジェンス関数の条件
さらに、年・月・四半期・曜日などの属性を持たせることで、複雑な分析もシンプルに実装できます。

「Mark as Date Table」設定の役割と適用方法

カレンダーテーブルを作成したら、「Mark as Date Table(日時テーブルとしてマーク)」を設定しておきましょう。

設定手順は次のとおりです。

  1. カレンダーテーブルを選択
  2. 「テーブルツール(Table tools)」を開く
  3. 「日時テーブルとしてマーク(Mark as date table)」をクリック
  4. 日付列を指定
  5. Mark as Date Tableの設定

この設定により、Power BIがそのテーブルを正式な日付テーブルとして認識します。
Power BIがそのテーブルを正式な日付テーブルとして認識
特にチーム開発では、設定しておくことでモデルの保守性向上にもつながります。

「自動の日付/時刻」機能との違いと使い分け

Power BIには、日付列ごとに内部の日付テーブルを自動生成する「自動の日付/時刻」機能があります。

簡易的な分析には便利ですが、実務では専用のカレンダーテーブルを利用するのが一般的です。
「自動の日付/時刻」機能との違い
会計年度分析や営業日集計、複数の日付列を扱う分析では、専用カレンダーテーブルの利用をおすすめします。

高度な分析に耐えるカレンダーテーブルの設計ポイント


カレンダーテーブルは単に日付を並べるだけでなく、分析に必要な属性をあらかじめ持たせておくことが重要です。
特に実務では、会計年度分析や営業日集計、曜日分析、複数日付列の切り替えなどが求められます。後から列を追加することもできますが、拡張を見据えて設計しておくことで保守性が高まります。

ADDCOLUMNSで必要な属性を一気に持たせる設計

カレンダーテーブルでは、CALENDAR関数とADDCOLUMNS関数を組み合わせて、分析に必要な属性をまとめて追加する方法がよく使われます。

代表的な属性は以下のとおりです。
ADDCOLUMNSで必要な属性

ADDCOLUMNSを利用すると定義を一覧で管理できるため、後から修正や追加を行う際にも便利です。

以下はADDCOLUMNS関数で作成したカレンダーテーブルの完成イメージです。
ADDCOLUMNS関数で作成したカレンダーテーブルの完成イメージ

会計年度・四半期・曜日を分析しやすい形で持つ

実務では4月始まりなどの会計年度で分析するケースが多くあります。そのため、カレンダーテーブルには会計年度や会計四半期を持たせておくと便利です。

また、曜日分析では表示用の曜日名だけでなく、並び順を制御するための曜日番号も用意しておくのが一般的です。
曜日分析
※カレンダーテーブルの完成イメージは「ADDCOLUMNSで必要な属性を一気に持たせる設計」の図と同様」

営業日フラグと祝日テーブルの設計

営業日ベースの分析を行う場合は、営業日判定用のフラグを持たせる方法が有効です。

祝日は別テーブルで管理し、カレンダーテーブルと組み合わせて利用する構成が一般的です。

▼祝日のテーブル
祝日のテーブル

▼組み合わせたカレンダーテーブル
※日付テーブルが祝日テーブルの祝日に存在するかどうかをみて、稼働日かどうかを0(=非稼働日)と1(=稼働日)で示す列(下図の”IsWorkingday”列)を追加
組み合わせたカレンダーテーブル

この設計により、国民の祝日だけでなく、会社独自の休業日にも対応しやすくなります。

複数の日付列を持つファクトテーブルへの設計対応

受注日・出荷日・請求日など、
1つのテーブルに複数の日付列を持つケースも少なくありません。
複数の日付列を持つファクトテーブルへの設計

Power BIではアクティブなリレーションを1本しか設定できないため、
通常は主となる日付列をアクティブにし、それ以外はUSERELATIONSHIP関数で切り替えて利用します。

▼アクティブなリレーションを1本作成、非アクティブなリレーションを1本作成
実線:受注日(アクティブ)
点線:出荷日(非アクティブ)
実線:受注日(アクティブ)
点線:出荷日(非アクティブ)

▼USERELATIONSHIP関数を利用すると実線の受注日(アクティブ)に対して点線の出荷日(非アクティブ)も連携されて表示されるようになります。
USERELATIONSHIP関数

※▼USERELATIONSHIP関数の例
USERELATIONSHIP関数の例

まずはUSERELATIONSHIPを活用した設計を押さえておくと、
多くの業務要件に対応できます。

タイムインテリジェンス関数で実現する期間集計


カレンダーテーブルを整備すると、Power BIのタイムインテリジェンス関数を活用できるようになります。
タイムインテリジェンス関数とは、累計や前年比、一定期間の集計などを簡単に実装するためのDAX関数群です。
まずは代表的な関数と用途を整理しておきましょう。
タイムインテリジェンス関数

累計を出す(TOTALYTD / TOTALMTD / TOTALQTD)

累計分析は、経営ダッシュボードや進捗管理で頻繁に利用されます。
Power BIでは、TOTALYTD・TOTALMTD・TOTALQTDを利用することで、年初・月初・四半期初からの累計を簡単に算出できます。
累計を出す(TOTALYTD / TOTALMTD / TOTALQTD)

例えば売上の年初来累計(YTD)は、TOTALYTDを利用して実装できます。
※DAX式の例:
DAX式の例
また、会計年度を採用している企業では、期末日を指定することで4月始まりなどの累計にも対応できます。
累計値を表示することで、「今どの程度進捗しているか」を把握しやすくなります。

▼累計の場合のグラフ例
累計の場合のグラフ例

前年同期比較(SAMEPERIODLASTYEAR / DATEADD)

売上やKPIの伸びを確認する際によく利用されるのが前年比分析です。
代表的な関数は以下の2つです。
前年同期比較(SAMEPERIODLASTYEAR / DATEADD)

SAMEPERIODLASTYEARは前年同月や前年同日などの比較に利用できます。
※DAX式の例:
SAMEPERIODLASTYEAR

▼前年比のビジュアル例
前年比のビジュアル例
一方、DATEADDは「3か月前」「2年前」など柔軟な期間比較が可能です。
前年比だけでなく、前年との差額や成長率を表示することで、
レポートの分析価値が高まります。

任意期間の集計(DATESBETWEEN / DATESINPERIOD)

キャンペーン期間やローリング集計では、任意の期間を指定して集計したいケースがあります。

その際によく利用されるのが以下の関数です。
任意期間の集計(DATESBETWEEN / DATESINPERIOD)

例えば、
● キャンペーン期間の売上
● 直近30日売上
● 直近90日売上
といった分析に活用できます。

※DATESBETWEENのDAX式の例:
DATESBETWEENのDAX式の例
特に移動平均やローリング集計では、DATESINPERIODを利用するケースが多く見られます。ただし、フィルターコンテキストの影響を受けやすいため、期待した結果にならない場合は対象期間を確認しましょう。

会計年度ベースでタイムインテリジェンスを動かす

実務では4月始まりや7月始まりなど、会計年度を基準に分析するケースが少なくありません。この場合、タイムインテリジェンス関数に期末日を指定することで対応できます。
タイムインテリジェンス関数に期末日を指定

標準のタイムインテリジェンス関数でも多くのケースに対応できますが、
特殊な会計カレンダーでは独自DAXが必要になる場合もあります。

▼タイムインテリジェンス関数に期末日を指定する例(3/31を期末とした場合)
タイムインテリジェンス関数に期末日を指定する例

2025年3月の累計が最高となり、2025年4月からはリセットされていることがわかる。
タイムインテリジェンス関数に期末日を指定する例
まずは会計年度列を適切に設計し、標準関数で実現できる範囲を把握することが重要です。

一歩踏み込んだ実践分析


カレンダーテーブルを整備し、タイムインテリジェンス関数を活用できるようになると、単純な月次集計だけでなく、トレンド分析や営業日ベースの分析も実現できます。

ここでは実務で利用されることの多い応用パターンを紹介します。

移動平均・ローリング合計でトレンドを読む

日々の売上やアクセス数などは変動が大きく、単日の数値だけでは傾向を把握しにくいことがあります。そのような場合に有効なのが移動平均やローリング合計です。
移動平均やローリング合計

移動平均を利用することで、日々のばらつきを平準化し、全体の傾向を把握しやすくなります。

▼移動平均のグラフ例
移動平均のグラフ例
特に売上やアクセス解析など、変動の大きいデータとの相性が良い分析手法です。

曜日・週末を軸にした傾向分析

小売業やサービス業では、曜日によって売上や来店数が大きく変化することがあります。
カレンダーテーブルに曜日情報を持たせることで、曜日別の傾向分析を簡単に行えます。
カレンダーテーブルに曜日情報を持たせる
曜日別に平均値を比較すると、週末に強い商品や平日に利用されやすいサービスなどを把握できます。

▼ 曜日別平均売上のビジュアル例
曜日別平均売上のビジュアル例

▼平日vs週末のビジュアル例
平日vs週末のビジュアル例
マーケティング施策や人員配置の検討にも活用しやすい分析です。

営業日ベースの集計(祝日除外・稼働日比較)

月ごとの売上を比較する際は、営業日数の違いに注意が必要です。
例えば同じ売上額でも、営業日数が少ない月の方が1日あたりの成果は高い可能性があります。そのため、営業日フラグを利用して以下のような指標を算出するケースがあります。
営業日ベースの集計(祝日除外・稼働日比較)
営業日数の影響を除外することで、より公平な比較が可能になります。
特にBtoB企業や製造業では活用される場面が多くあります。

USERELATIONSHIPで複数日付列を切り替え分析

受注日・出荷日・請求日など、複数の日付列を持つテーブルでは、分析目的によって参照する日付が変わります。そのような場合に利用するのがUSERELATIONSHIP関数です。

例えば次のような分析が可能になります。
USERELATIONSHIPで複数日付列を切り替え分析
USERELATIONSHIPを利用することで、非アクティブなリレーションを一時的に有効化し、分析軸を切り替えられます。また、メジャー名に「受注ベース」「出荷ベース」などのルールを設けておくと、利用者にも分かりやすくなります。
複数の日付列を扱う分析では、カレンダーテーブルとUSERELATIONSHIPの組み合わせが重要な設計ポイントになります。

まとめ:カレンダーテーブルは「分析の中核」として育てる


カレンダーテーブルは単なる日付一覧ではなく、Power BIにおける日付分析の基盤となる重要なテーブルです。

Mark as Date Tableの設定や会計年度・営業日フラグの追加、複数日付列への対応などを適切に設計することで、累計や前年比、営業日ベースの分析を効率よく実現できます。また、TOTALYTDやSAMEPERIODLASTYEAR、USERELATIONSHIPといった機能を活用すれば、実務で求められる高度な分析にも対応しやすくなります。

まずはシンプルなカレンダーテーブルから始め、業務要件に合わせて段階的に拡張していくことが、運用しやすい分析基盤を作るポイントです。

<Power BIハンズオンセミナー>
弊社ではPower BIをはじめとするさまざまな無料オンラインセミナーを実施しています!
>>セミナー一覧はこちら

<Power BIの導入支援>
弊社ではPower BIの導入支援を行っています。ぜひお気軽にお問い合わせください。
>>Power BIの導入支援の詳細はこちら

<PowerBIの入門書を発売中!>
弊社ではPower BIの導入から基本的な使い方・活用方法の基礎などをわかりやすく解説した書籍も販売しています。
>>目次も公開中!書籍の詳細はこちら

CONTACT
お問い合わせ

ご相談やご依頼、病院マスタなどについてのお問い合わせはこちらのお問い合わせフォームから。

サービスなどについてのお問い合わせ 病院マスタについてのお問い合わせ

メールお問い合わせ