計算テーブルを作成する
計算テーブルは、テーブル オブジェクトを返す DAX 数式を使用して作成され、既存のモデル データを複製または変換して新しいテーブルを作成できます。
テーブルの複製
データ モデリングにおける一般的なデザイン上の課題は、テーブル間の複数のリレーションシップを処理することです。 たとえば、次の図に示すように、Sales
テーブルには Date
テーブルとの 3 つのリレーションシップが存在することがあります。
Sales
テーブルには、注文日、出荷日、納期ごとに売上データが格納されており、Date
テーブルとの間に 3 つのリレーションシップが存在します。 ただし、図の実線で示されているように、一度にアクティブにできるリレーションシップは 1 つだけです。 その他のリレーションシップは無効で、破線として表示されます。
この例では、アクティブなリレーションシップによって Sales
テーブルの OrderDateKey
列がフィルター処理されるため、Date
テーブルに適用されたフィルターは注文日による売上にのみ影響します。
出荷日による売上のフィルタリングを有効にするには、次の数式を使用して Date
テーブルを複製し、新しいテーブルを作成します。
Ship Date = 'Date'
この数式は、元の Date
テーブルと同じ列と行を持つ Ship Date
という名前の新しいテーブルを作成します。
Date
テーブルが更新されると、Ship Date
テーブルも再計算され、同期が維持されます。 これで、Ship Date
テーブルと Sales
テーブルの間にアクティブなリレーションシップを作成し、出荷日によるフィルタリングも可能になりました。
重複テーブルの構成
計算テーブルを作成するときは、引き継ぐ新しい複製テーブルにカスタム構成を適用する必要があります。 たとえば、目的がわかりやすいように列の名前を変更することをお勧めします。
この例では、Ship Date
テーブルの Fiscal Year
列の名前を Ship Fiscal Year
に変更できます。
Ship Full Date
列は Ship Date
列で並べ替える必要があり、MonthKey
列は並べ替えとレポートを強化するために非表示にすることができます。
前に説明したように、2 つのテーブル間に複数のリレーションシップが存在するシナリオでは、計算テーブルを使用すると便利です。 ただし、計算テーブルによってモデルのストレージ サイズが増加し、特に他のテーブルに依存している場合は、データの更新時間が長くなる可能性があります。
注
重複テーブルによってこの課題は解決されますが、よりパフォーマンスの高い他のソリューションもあります。 この概念については、このモジュールでメジャーについて説明する際に、もう一度説明します。
日付テーブルを作成する
計算テーブルの良いユース ケースは、モデルに日付テーブルを追加することです。 日付テーブルは、タイム インテリジェンスと呼ばれる特別な時間フィルターを適用するために必要です。
CALENDARAUTO
関数を使用して計算日付テーブルを作成できます。
CALENDARAUTO
関数は、モデル内のすべての日付列と日付/時刻列をスキャンして最も早い日付と最も遅い日付を決定し、データのすべての年にわたる完全な日付セットを生成します。 引数は会計年度の最終月を指定します。たとえば、6
を渡すと、6 月が年度末に設定されます。
Due Date = CALENDARAUTO(6)
結果の Due Date
テーブルには日付の列が 1 つ含まれています。 次の図は、日付が最も古いものから最新のものの順に並べられた、データ ビューの Due Date
テーブルを示しています。
ヒント
CALENDAR
関数は、開始日と終了日を静的な値またはモデル データに基づく式として指定して日付テーブルを作成するためにも使用できます。
モデル内の最も早い日付が 2021 年 10 月 15 日で、最も遅い日付が 2022 年 6 月 15 日の場合、関数は 2021 年 7 月 1 日から 2022 年 6 月 30 日までの日付を返します。 これにより、日付テーブルをマーキングするために必要な完全な年がテーブルに確実に含められます。
日付テーブルとしてマークする
日付テーブルを作成したら、Power BI Desktop でそれを日付テーブルとしてマークする必要があります。 この設定を使用すると、DAX 計算でタイム インテリジェンス機能を使用できます。 独自の日付テーブルを指定すると、Power BI Desktop ではその列とそのデータに対して次の検証が実行され、データに次の内容が確実に含められます。
- 一意の値。
- null 値がない。
- 連続する日付の値 (開始から終了まで) を含む。
- 日付/時刻データ型の各値にわたる、同じタイムスタンプ。
この設定は、Power Query でインポートまたは作成されたすべての日付テーブル、または計算テーブルに適用されます。
注
タイム インテリジェンスを使用するには、カスタム日付テーブルを使用するか、Power BI に組み込まれている自動/日付時刻機能を使用する必要があります。 自動/日付時刻機能には制限された値があり、カスタマイズできません。これが、カスタム日付テーブルの使用を検討する理由の 1 つです。