計算テーブルを作成する

完了

計算テーブルは、テーブル オブジェクトを返す DAX 数式を使用して作成され、既存のモデル データを複製または変換して新しいテーブルを作成できます。

テーブルの複製

データ モデリングにおける一般的なデザイン上の課題は、テーブル間の複数のリレーションシップを処理することです。 たとえば、次の図に示すように、Sales テーブルには Date テーブルとの 3 つのリレーションシップが存在することがあります。

スクリーンショットには、Sales および Date という 2 つのテーブルが表示されています。テーブル間には 3 つのリレーションシップがありますが、アクティブなリレーションシップは 1 つだけです。

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 つです。