【Vol.4】Power BIでカレンダーテーブルを作る|DAXとリレーション設定

財務DX / Power BI KPI ダッシュボード作成シリーズ

目次

はじめに

前回のVol.3では、Power Queryを使って5つのCSVファイルを取り込み、列名とデータ型を整えました。

今回は、複数のテーブルをPower BIで組み合わせて分析するために必要な、データモデルの基盤づくりを行います。

具体的には次の2つです。

  1. カレンダーテーブルを作成する
  2. 各テーブルのリレーション(関係性)を設定する

この2つを設定することで、すべてのデータを「日付」と「ライン」という共通の軸で分析できるようになります。

 スクリーンショットについて
本シリーズでは、日本語版・英語版の記事で共通のスクリーンショットを使用するため、掲載しているPower BI Desktopのスクリーンショットは英語表示で統一しています。
本文ではメニュー名や操作内容を日本語でも併記しているため、日本語版Power BI Desktopをご利用の場合でも、そのまま読み進められます。

カレンダーテーブルとは

実務では、次のような時系列分析を行う場面がよくあります。

  • 前年同期比を計算する
  • 年ごと、四半期ごとに集計する
  • 複数のFactテーブルを同じ期間で分析する

こうした分析を行うためには、各Factテーブルが持つ日付を、共通の基準で管理することが重要です。そのために使用するのが カレンダーテーブル(日付マスター) です。

カレンダーテーブルを作成し、Factテーブルとリレーションを設定することで、異なるデータを同じ期間軸で集計・分析できるようになります。

Vol.3で、各Factテーブルの「Year/Month」列をDate型に設定したのは、カレンダーテーブルと接続するための準備でした。

Step 1:カレンダーテーブルをDAXで作成する

今回は、Power BI Desktop上でDAXを使ってカレンダーテーブルを作成します。

DAX(Data Analysis Expressions)は、Power BIで計算やテーブル作成などを行うための数式言語です。
次回のVol.5でDAXの基本を解説するため、今回はDAXの構文を理解する必要はありません。
指定されたDAXをそのままコピー&ペーストしてカレンダーテーブルを作成してください。

1. カレンダーテーブルを作成する

「Modeling(モデリング)」タブ ➜「New Table(新しいテーブル)」をクリックします。

数式バーに次のDAXをコピーし ➜「Enter」します。

Calendar = 
VAR MinDate = MIN(Fact_monthly_kpi[Year/Month])
VAR MaxDate = MAX(Fact_monthly_kpi[Year/Month])
RETURN
    CALENDAR(
        DATE(YEAR(MinDate), 1, 1),
        EOMONTH(MaxDate, 0)
    )

画面右側の「Data Pane(データペイン)」に計算機マーク付きのCalendarテーブルが作成されたことを確認します。

DAXの意味:
MinDate、MaxDate:
Fact_monthly_kpiテーブルの「Year/Month」列から、最も古い日付と最も新しい日付を取得
CALENDAR関数:開始日から終了日までの連続した日付を、1日1行で生成。
開始日:最も古い年の1月1日
終了日:最も新しい月の月末

2. 日付とデータ型を確認する

カレンダーテーブルの作成ができたら、「Date」 列の日付が「2023/1/1」から「2026/7/31」になっていることを確認します。

「Data Type(データ型)」が「Date/Time」になっている場合は、「Column Tools(列ツール)」で「Data Type(データ型)」を「Date」に、「Format(書式)」を「Short Date」に変更します。

Step 2:カレンダーテーブルを日付テーブルとしてマークする

カレンダーテーブルを作成しただけでは、Power BIはこのテーブルを「日付専用のテーブル」と認識しません。

前年同期比などの時系列計算で使う日付インテリジェンス関数を正しく動作させるために、カレンダーテーブルを「日付テーブル」としてマークする必要があります。

作成したCalendarテーブルを選択した状態で、「Table Tools(テーブルツール)」タブ ➜「Mark as date table(日付テーブルとしてマーク)」をクリックします。

表示されたダイアログで、「Mark as date table(日付テーブルとしてマーク)」を「On」に設定し、日付列選択フィールドにDate列を指定します。「Save(保存)」をクリックします。

これで、カレンダーテーブルを基準とした時系列分析ができるようになります。

日付インテリジェンス関数とは
日付を基準に期間を比較・取得するためのDAX関数です。
よく使う関数:SAMEPERIODLASTYEAR(前年の同じ期間を取得)、DATESYTD(年初から現在までの期間を取得)などカレンダーテーブルとリレーションシップを設定することで、これらの関数を使った時系列分析が可能になります。

Step 3:テーブルの役割を整理する(スタースキーマ)

リレーションを設定する前に、6つのテーブルの役割を整理しておきます。

テーブル役割
Calendar日付マスター
Dim_line_name生産ラインマスター
Fact_monthly_kpi売上・原価の実績データ
Fact_equipment_utilization設備稼働率の実績データ
Fact_inventory_turnover在庫回転率の実績データ
Fact_defect_rate不良率の実績データ

Vol.3の命名規則(Dim/Fact)とは異なり、カレンダーテーブルは「Calendar」をそのまま使用します。

Power BIでは、Factテーブルと、分析の軸となるマスターテーブルを接続して、データモデルを作ります。この構造をStar Schema(スタースキーマ)と呼びます。

Star Schemaにすることで、モデルがシンプルになり、集計の一貫性が保たれ、パフォーマンスの向上にもつながります。

Step 4:モデルビューでリレーションを設定する

Model View(モデルビュー)で、Star Schemaを用いたテーブル間のリレーション構築を行います。Power BI Desktop左側の「Model View(モデルビュー)」アイコンを開きます。

1. ラインマスターテーブルとFactテーブルとの自動接続の確認

Power BIは、列名やデータ型からリレーションシップを自動検出することがあります。今回のサンプルでは、Dim_line_name マスターテーブルと各Factテーブルは自動的に接続されているはずです。

モデルビューで、図のようにDim_line_nameマスターテーブルと各Factテーブルが実線でつながっていることを確認してください。

リレーションが作成されていない場合は、これから説明するカレンダーテーブルの接続と同じ手順で手動で接続してください。また、誤ったリレーションが作成された場合は、その実線を右クリックして「Delete(削除)」し、正しい列を選択して接続し直してください。

2. カレンダーテーブルとFactテーブルを手動で接続する

カレンダーテーブルは新しく作成したため、Factテーブルと自動的に接続されません。次の手順で手動で接続します。

Calendarマスターテーブルの「Date」列を、Fact_monthly_kpiテーブルの「Year/Month」列にドラッグ&ドロップします。

「New Relationship(新しいリレーションシップ)」画面が表示され、次の設定になっていることを確認し、「OK」をクリックします。

設定項目設定
Cardinality(カーディナリティ)One to many(1対多)
Cross-filter direction(クロスフィルターの方向)Single(単一)
Make this relationship active(このリレーションシップをアクティブにする)オン

同じように、残りの3つのFactテーブルとも接続します。

  • Calendar [Date]列 ➜ Fact_equipment_utilization [Year/Month]列
  • Calendar [Date] 列 ➜ Fact_inventory_turnover [Year/Month]列
  • Calendar [Date] 列 ➜ Fact_defect_rate [Year/Month]列

すべて接続すると、以下のようなスタースキーマが完成します。

補足:接続できない場合の確認方法
1. 両方の列のデータ型が「Date」になっているか
2. 接続する列が正しいか
3. カレンダーテーブルの日付範囲にFactテーブルの日付が含まれているか

Step 5:ファイルを保存する

設定が完了したら、「Ctrl + S」でファイルを保存します。

Vol.3で作成した「KPI Dashboard.pbix」に、カレンダーテーブルとリレーションが追加された状態になります。


まとめ

今回は、次の2つの作業を行いました。

  1. DAXでカレンダーテーブルを作成
  2. カレンダーテーブルと各Factテーブルのリレーションを設定

これにより、6つのテーブルがスタースキーマで接続され、Power BIで分析を行うためのデータモデルが完成しました。

データモデルを正しく設計することで、複数のFactテーブルを同じ期間軸やライン別に分析できるようになり、今後作成するKPI計算やDashboardの基盤になります。

よくあるご質問(FAQ)

1. DAXとは何ですか?

DAX(Data Analysis Expressions)は、Power BIで計算列やメジャーを作成するための数式言語です。
Excelの関数に似ていますが、複数テーブルをまたいだ集計や前年同期比など、より高度な計算ができます。

2. Cardinality(カーディナリティ)とは何ですか?

テーブル同士がどのような関係で結びつくかを表す設定です。
・One to One(1対1)
・One to Many(1対多)※最も一般的
・Many to One(多対1)
・Many to Many(多対多)※複雑なモデルで使用
今回のモデルでは、Calendar マスターテーブルやDim_line_name マスターテーブルは、各Factテーブルと「1対多」の関係です。

3. Cross-filter direction(クロスフィルターの方向)とは何ですか?

データのフィルターがどの方向に伝わるかを決める設定です。
本シリーズでは、単一方向(Single) を使用します。シンプルなスタースキーマでは単一方向が推奨されます。

4. Active(アクティブ)とInactive Relationship(インアクティブリレーション)の違いは何ですか?

Active Relationshipは通常の集計で使用されるリレーションです。
Inactiveは存在していても自動では使われません。今回のデータモデルはシンプルなため、すべてActiveです。

5. なぜカレンダーテーブルが必要ですか?

Factテーブルの日付だけでは、前年同期比などの時系列計算が正しくできません。
連続した日付を持つ共通のカレンダーテーブルを用意すれば、複数のFactテーブルを同じ時間軸で集計、分析できます。

次回予告

次回のVol.5では、DAXを使ってダッシュボードに表示するKPIを計算します。

営業利益率・設備稼働率・在庫回転率・不良率の4つを例に、DAXの基本となる「メジャー」の作成方法を学びます。

目次