はじめに
Data Analysis Expressions (DAX) を使用すると、次の 3 種類の計算をセマンティック モデルに追加できます。
- 計算テーブル
- 計算列
- メジャー
注意
DAX を使用して、モデル テーブルにフィルターを適用する式である、行レベル セキュリティ (RLS) ルールを定義することもできます。 ただし、ルールはモデルの計算とは見なされないため、このモジュールでは対象外です。 詳細については、「Power BI での行レベルのセキュリティ (RLS)」を参照してください。
計算テーブル
DAX 式を記述して、モデルに計算テーブルを追加できます。 この数式を使用すると、"既存のモデル データ" を複製または変換したり、一連のデータを作成したりして、新しいテーブルを生成することができます。 計算テーブルのデータは常にモデルにインポートされるため、モデル ストレージのサイズが増加し、データ更新期間が長くなる可能性があります。
注意
計算テーブルは外部データに接続できません。このタスクを実行するには、Power Query を使用する必要があります。
計算テーブルは、次のようなさまざまなシナリオで役に立ちます。
- 日付テーブル
- 多様ディメンション
- What-if 分析
日付テーブル
日付テーブルは、"タイム インテリジェンス" と呼ばれる特別な時間フィルターを適用するために必要です。 DAX タイム インテリジェンス関数は、日付テーブルが設定されている場合にのみ正しく動作します。 ソース データに日付テーブルが含まれていない場合は、CALENDAR
または CALENDARAUTO
DAX 関数を使用して、計算テーブルとして作成できます。
多様ディメンション
2 つのモデル テーブルに複数のリレーションシップがある場合は、モデルに多様ディメンションがあることが原因である可能性があります。 たとえば、Sales という名前のテーブルに 2 つの日付列、OrderDateKey と ShipDateKey が含まれている場合、両方の列が Date テーブルの Date 列に関連しています。 この場合、Date テーブルは "注文日" または "出荷日" の役割を果たす可能性があるため、多様ディメンションとして記述されます。
Microsoft Power BI モデルでは、テーブル間のアクティブなリレーションシップは 1 つのみ許可され、これはモデル図では実線で示されています。 アクティブなリレーションシップは、既定ではフィルターを伝達するために使用されます。この例では、Date テーブルから Sales テーブルの OrderDateKey 列に対して行われます。 2 つのテーブル間の残りのリレーションシップは非アクティブになります。 モデル図では、このリレーションシップは破線で表されています。 非アクティブなリレーションシップは、USERELATIONSHIP
DAX 関数を使用して計算式で明示的に要求された場合にのみ使用されます。
2 つの日付テーブルが、それぞれ Sales テーブルとの間にアクティブなリレーションシップを持つようにすると、より優れたモデル設計になる可能性があります。 このようにすると、レポート ユーザーは、注文日または出荷日を使用して、またはその両方を同時に使用してフィルター処理できます。 計算テーブルで Date テーブル データを複製して、Ship Date テーブルを作成することができます。
What-if 分析
Power BI Desktop では、what-if パラメーターと呼ばれる機能がサポートされています。 what-if パラメーターを作成すると、計算テーブルがモデルに自動的に追加されます。
what-if パラメーターを使用すると、レポート ユーザーは、計算テーブルに格納されている値の選択またはフィルター処理を行うことができます。 メジャーの数式では、選択した値を意味のある方法で使用できます。 たとえば、what-if パラメーターを使用すると、レポート ユーザーは仮定の通貨換算レートを選択でき、メジャーでは選択したレートで (現地通貨の) 収益値を除算できます。
特に what-if 計算テーブルは、フィルターの反映に使用されないため、他のモデル テーブルに関連付けられません。 このため、"切断されたテーブル" と呼ばれることもあります。
計算列
DAX 式を記述して、モデル内の任意のテーブルに計算列を追加できます。 数式はテーブルの行ごとに評価され、1 つの値を返します。 インポート ストレージ モードのテーブルに追加された数式は、セマンティック モデルが更新されるときに評価され、これによりモデルのストレージ サイズが増えます。 DirectQuery ストレージ モードのテーブルに追加された数式は、テーブルに対してクエリが実行されるときに、基になるソース データベースによって評価されます。
[フィールド] ペインでは、計算列は特別なアイコンで強調されています。 次の例は、Customer テーブルの Age という 1 つの計算列を示しています。
メジャー
DAX 式を記述して、モデル内の任意のテーブルにメジャーを追加できます。 この数式は、モデル データに関する集計の取得に関係しています。 計算列と同様に、この数式は単一の値を返す必要があります。 データ更新時に評価される計算列とは異なり、メジャーはクエリ時に評価されます。 その結果がモデルに格納されることはありません。
[フィールド] ペインでは、メジャーは電卓アイコン付きで表示されます。 次の例は、Sales テーブルの 3 つのメジャーを示しています (Cost、Profit、Revenue)。
場合によっては、メジャーを "明示的なメジャー" と呼ぶことがあります。 端的に言うと、明示的なメジャーは DAX で記述されたモデル計算であり、一般的には単に "メジャー" と呼ばれます。 ただし、"暗黙のメジャー" という概念も存在します。 暗黙のメジャーは、個数、合計、最小、最大などの単純な方法でビジュアルによって集計できる列です。 暗黙のメジャーは [フィールド] ペインにシグマ記号 (∑) 付きで表示されるため、識別できます。
注意
ビジュアルに追加された任意の列を集計できます。 したがって、これらがシグマ記号付きで表示されているかどうかに関係なく、ビジュアルに追加されると、暗黙のメジャーとして設定できます。
なお、表形式モデリングには、 "計算メジャー" という概念は存在しません。 "計算" という単語は、計算テーブルと計算列を表すために使用されます。これにより Power Query から生成されたテーブルおよび列と区別されます。 Power Query には、明示的なメジャーという概念がありません。