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