Power BIでデータモデルを構築する際、正確な時系列分析(前年比や累計など)を行うためには「日付テーブル(カレンダーテーブル)」が欠かせません。以前の記事ではPower Queryを使用した作成方法を紹介しましたが、今回はDAX(Data Analysis Expressions)を使用して、データモデル内で動的に日付テーブルを生成する方法を解説します。
DAXを使用する最大のメリットは、数行のコードを書くだけでモデル内のデータ範囲を自動検知し、瞬時にカレンダーを生成できる「手軽さ」と「動的な挙動」にあります。特にCALENDARAUTO関数を使いこなせば、データの更新に合わせてカレンダーの期間も自動調整されるため、メンテナンスの手間を大幅に削減できます。
本記事では、DAXを使用して、メンテナンスフリーで動的な日付テーブルを生成する具体的な手順を解説します。
DAXを使うメリット・デメリット
日付テーブルの作成には大きく分けて「Power Queryで作る」方法と「DAXで作る」方法があります。今回紹介するDAX手法には以下の特徴があります。
メリット
- 実装スピードが非常に速い:エディターを行き来せず、DAX式を貼り付けるだけで一瞬でテーブルが完成します。
- データ期間の自動調整:
CALENDARAUTO関数を使うことで、売上データなどが更新された際、そのデータ範囲に合わせてカレンダーの開始日・終了日が自動で伸縮します。 - メンテナンスが楽:データソース側(SQLやExcel)の日付範囲を気にする必要がありません。
デメリット
- メモリ消費:計算テーブルとして展開されるため、行数が数百万行になるような超大規模モデルではメモリを圧迫する可能性があります。
- 外部データとの結合が苦手:Web上の「祝日データ(CSV)」などを取り込んで結合する場合、Power Queryに比べて記述が複雑になります。
サンプルデータ
DAXを使って、次の画像のような連続した日付リストと属性列を持つ日付テーブルを生成します。

また、サンプルデータとして日付テーブルとテーブル結合する売上明細を使います。

実際の手順
DAXを使用して日付テーブルを作成する手順は以下の3ステップです。
手順1:DAXコードで新しいテーブルを作成する
日本の会計年度(4月始まり)に対応したテーブルを一括生成します。
Power BI Desktopを起動して「空のレポート」をクリックします。

「テーブルビュー」ー「新しいテーブル」をクリックします。

空のテーブルが作成されました。

後述のDAXを入力し、✅ボタンをクリックします。

日付テーブル =
VAR FiscalMonthEnd = 3 -- 3月決算(4月始まり)の場合は3を指定
VAR StartDate="2025/04/01"
VAR EndDate="2027/3/31"
VAR BaseCalendar = CALENDAR(StartDate, EndDate)
RETURN
ADDCOLUMNS(
BaseCalendar,
"年", YEAR([Date]),
"月", MONTH([Date]),
"月名", FORMAT([Date], "MM月"),
"四半期", "Q" & FORMAT(EDATE([Date], -FiscalMonthEnd), "Q"),
"曜日", FORMAT([Date], "aaaa"),
"年度", IF(MONTH([Date]) > FiscalMonthEnd, YEAR([Date]), YEAR([Date]) - 1),
"会計月番号", IF(MONTH([Date]) > FiscalMonthEnd, MONTH([Date]) - FiscalMonthEnd, MONTH([Date]) + 12 - FiscalMonthEnd)
)コードのポイント:
CALENDAR(StartDate, EndDate):”Date” という名前の単一の列を持つテーブルを返します。開始日と終了日の範囲で連続した日付となります。ADDCOLUMNS:日付列をベースに、年・月・曜日などの列を一括で追加しています。
日付テーブルが生成されました。

手順2:日付テーブルとしてマークする
Power BIに「これがカレンダーの正本である」と認識させ、タイムインテリジェンス関数を有効にします。「日付テーブルとしてマークする」をクリックします。

「日付テーブルとしてマーク」をオンにし、「日付列を選択する」を「Date」を選択し、保存をクリックします。

手順3:「日付テーブル」をファクトテーブルとテーブル結合する
日付テーブルはディメンションテーブルであり、ファクトテーブルとテーブル結合して初めて意味が出ます。
日付テーブルの「Date」列をドラッグして売上明細の売上日にドロップします。

OKをクリックします。

テーブル結合できました。後は分析に活用しましょう。

補足と注意点
「自動の日付/時刻」をオフにする
独自の「日付テーブル」を作成した後は、Power BIの標準機能をオフにすることを強く推奨します。
- 設定方法:[ファイル] > [オプションと設定] > [オプション] > [データ ロード] > [タイム インテリジェンス] の 「自動の日付/時刻」 のチェックを外します。
- 理由:これをオフにしないと、モデル内に不要な隠し日付テーブルが作成され続け、パフォーマンス低下の原因となります。
CALENDAR関数とCALENDARAUTO関数の違い
コード内で使用したCALENDARAUTO以外に、CALENDARという関数もあります。
- CALENDAR(開始日, 終了日):期間を固定したい場合に使用します(例:予算管理などで未来の日付が必須な場合)。
- CALENDARAUTO():実績データに合わせて期間を自動伸縮させたい場合に使用します(今回の推奨)。
パフォーマンスへの影響
DAXによる計算テーブルは、レポートを開くたびに計算リソース(CPU/メモリ)を使用します。数万件〜数十万件程度のデータモデルであれば全く問題ありませんが、数千万件を超えるような大規模データの場合は、データの読み込み時に処理が完了するPower Queryでの作成を検討してください。
まとめ
DAXを使用した日付テーブル作成は、以下のステップで完了します。
- 自動の日付/時刻をオフにする
- DAXコード(CALENDAR等)でテーブルを生成する
- 日付テーブルとしてマークする
Power Queryを使用する方法と比較して、DAXによる作成は「モデル内のデータ状況に応じて動的に変化する」点と「コードを貼るだけの手軽さ」が大きな強みです。
特にプロトタイピングや、更新頻度の高いシンプルなレポートにおいては、今回紹介したDAXパターンが非常に役立ちます。
まずはこのコードをテンプレートとして保存し、日々の業務で活用してみてください。

