DAX 式を記述する

完了

各モデルの計算の種類、計算テーブル、計算列、またはメジャーを定義するには、その名前と、その後に等号 (=)、その後に DAX 式を指定します。 モデルの計算を作成するには、次のテンプレートを使用します。

<Calculation name> = <DAX formula>

たとえば、Date テーブル データを複製する Ship Date 計算テーブルの定義は次のようになります。

Ship Date = 'Date'

DAX 式は、結果を返す式で構成されます。 結果は、テーブル オブジェクトまたはスカラー値のいずれかです。 計算テーブルの数式はテーブル オブジェクトを返す必要があり、計算列とメジャーの数式はスカラー値 (単一の値) を返す必要があります。

数式は、次のものを使用して組み立てられます。

  • DAX 関数
  • DAX 演算子
  • モデル オブジェクトへの参照
  • 定数値 (数値の 24 やリテラル テキスト "FY" (会計年度の略称) など)
  • DAX 変数
  • 空白

ヒント

Power BI Desktop に DAX 式を入力すると、IntelliSense を利用できます。 IntelliSense は、関数とモデル リソースを一覧表示するコード補完機能です。 DAX 関数を選択すると、定義と説明も表示されます。 正確な数式をすばやく作成するために、IntelliSense を使用することをお勧めします。

DAX 関数

Microsoft Excel と同様に、DAX は関数型言語です。数式は、特定の目標を達成するために関数に依存しています。 通常、DAX 関数には、変数を渡すことができる引数があります。 数式は多くの関数呼び出しを使用でき、多くの場合、関数を他の関数内で入れ子にします。

数式では、関数名の後にかっこを付ける必要があります。 かっこ内では、変数が渡されます。

注意

関数の中には、引数を取らないものや、引数が省略可能なものもあります。

DAX 関数の操作については、このモジュールで後ほど説明します。

DAX 演算子

数式は演算子にも依存しています。これにより、算術計算、値の比較、文字列の操作、または条件のテストを行うことができます。

DAX 演算子については、このモジュールの後の部分で詳しく説明します。

モデル オブジェクトへの参照

数式は、テーブル、列、またはメジャーの 3 種類のモデル オブジェクトのみを参照できます。 数式は階層または階層レベルを参照できません。 (階層レベルは列に基づいているため、数式は階層レベルの列を参照できることを思い出してください。)

テーブルの参照

数式でテーブルを参照する場合、正式にはテーブル名が単一引用符で囲まれます。 次の計算テーブルの定義では、Date テーブルが単一引用符で囲まれていることに注目してください。

Ship Date = 'Date'

ただし、次の両方の条件に該当する場合は、単一引用符を省略できます。

  1. テーブル名に埋め込みスペースが含まれていない。
  2. テーブル名が、DAX によって使用される予約語でない。 DAX 関数の名前と演算子はすべて予約語です。 Date は DAX 関数名です。これが、Date という名前のテーブルを参照するときに単一引用符で囲む必要がある理由です。

次の計算テーブル定義では、Airport テーブルを参照するときに単一引用符を省略できます。

Arrival Airport = Airport

列参照

数式で列を参照する場合、列名を角かっこで囲む必要があります。 必要に応じて、その前にテーブル名を付けることができます。 たとえば、次のメジャー定義は、Sales Amount 列を参照しています。

Revenue = SUM([Sales Amount])

列名はテーブル内では一意ですが、モデル内では必ずしも一意ではないため、テーブル名を前に付けることで、列参照のあいまいさを解消できます。 あいまいさが解消されたこの列は "完全修飾列" として知られています。 一部の DAX 関数では、完全修飾列を渡す必要があります。

ヒント

数式の読みやすさを向上させるために、列参照の前には必ずテーブル名を付けることをお勧めします。

前のメジャー定義の例は、次のように書き換えることができます。

Revenue = SUM(Sales[Sales Amount])

メジャーの参照

数式でメジャーを参照する場合、列名の参照と同じように、メジャー名を角かっこで囲む必要があります。 たとえば、次のメジャー定義は RevenueCost メジャーを参照しています。

Profit = [Revenue] - [Cost]

DAX に慣れていない場合は、列とメジャーの参照が常に角かっこで囲まれているため、数式を読み取るときに混乱が生じる可能性があります。 ただし、DAX の基礎に習熟していれば、どの種類のオブジェクトであるかを見分けることができます。これは、DAX 式では、列とメジャーが異なる方法で使用されるためです。

ヒント

メジャー参照の前にテーブル名を付けることができます。 ただし、メジャーはモデルレベルのオブジェクトです。 これらはホーム テーブルに割り当てられていますが、[フィールド] ペインでメジャーを論理的に整理するための表面的な関係にすぎません。

したがって、列参照の前には必ずテーブル名を付けることをお勧めしましたが、メジャーについてはその逆になります。メジャー参照の前にテーブル名を付けないことをお勧めします。

詳細については、「列参照とメジャー参照」をご覧ください。

DAX 変数

数式では、結果を格納するための DAX 変数を宣言できます。

DAX 変数をいつ、どのように使用するかについては、このモジュールで後ほど説明します。

空白

空白は、数式をすばやく簡単に理解できるように書式設定するために使用できる文字を指します。 空白文字には次のものがあります。

  • スペース
  • タブ
  • 復帰

空白は省略可能であり、数式のロジックを変更したりパフォーマンスに悪影響を及ぼしたりすることはありません。 1 つの書式スタイルを採用してそれを一貫して適用し、次の推奨事項を考慮することを強くお勧めします。

  • 演算子の間にスペースを使用します。
  • タブを使用して、入れ子になった関数呼び出しをインデントします。
  • 復帰を使用して、関数の引数を区切ります (特に、長すぎて 1 行に収めることができない場合)。 この方法で書式設定すると、特に数式にかっこがない場合に、トラブルシューティングが簡単になります。
  • 空白が少なすぎるよりも多すぎて失敗する方が、影響が小さくなります。

ヒント

数式バーで、復帰を入力するには、Shift + Enter キーを押します。 Enter キーのみを押すと、数式がコミットされます。

1 行で記述され、5 つの DAX 関数呼び出しを含む次のメジャー定義について考えます。

Revenue YoY % = DIVIDE([Revenue] - CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date])), CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date])))

次の例は、同じメジャー定義ですが、書式設定されているため、読みやすく理解しやすくなっています。

Revenue YoY % =
DIVIDE(
    [Revenue]
        - CALCULATE(
            [Revenue],
            SAMEPERIODLASTYEAR('Date'[Date])
    ),
    CALCULATE(
        [Revenue],
        SAMEPERIODLASTYEAR('Date'[Date])
    )
)

メジャーを自分で書式設定してみてください。 Adventure Works DW 2020 M02.pbix Power BI Desktop ファイルを開き、[フィールド] ペインで Sales テーブルを展開し、Revenue YoY % メジャーを選択します。 数式バーで、Tab キーと復帰文字を使用して、前の例と同じ結果を生成します。 復帰を追加するときは、Shift + Enter キーを押すことを忘れないでください。

このメジャー定義は、読みやすさとパフォーマンスをさらに向上させることができます。これについては、このモジュールで後ほど説明します。

ヒント

計算の書式設定に役立つ、別のソースからの優れた書式設定ツールとして、DAX Formatter があります。 このツールを使用すると、計算を貼り付けて書式設定できます。 その後、書式設定された計算をクリップボードにコピーして、Power BI Desktop に貼り付けることができます。