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'
ただし、次の両方の条件に該当する場合は、単一引用符を省略できます。
- テーブル名には埋め込みスペースは含まれません。
- テーブル名は、DAX で使用される予約語ではありません。 DAX 関数の名前と演算子はすべて予約語です。
Date は DAX 関数名です。そのため、
Dateという名前のテーブルを参照する場合は、それを一重引用符で囲む必要があります。
次の計算テーブル定義では、Airport テーブルを参照するときに一重引用符を省略できます。
Arrival Airport = Airport
列参照
数式内で列を参照する場合、列名を角かっこで囲む必要があります。 必要に応じて、その前にテーブル名を付けることができます。 たとえば、次のメジャー定義は Sales Amount 列を参照します。
Revenue = SUM([Sales Amount])
列名はテーブル内では一意ですが、モデル内では必ずしも一意ではないため、テーブル名を前に付けることで、列参照のあいまいさを解消できます。 あいまいさが解消されたこの列は完全修飾列として知られています。 一部の DAX 関数では、完全修飾列を渡す必要があります。
ヒント
数式の読みやすさを向上させるために、列参照の前には必ずテーブル名を付けることをお勧めします。
前のメジャー定義の例は、次のように書き換えることができます。
Revenue = SUM(Sales[Sales Amount])
メジャーの参照
列名参照のように、数式内でメジャーを参照する場合は、メジャー名を角かっこで囲む必要があります。 たとえば、次のメジャー定義は Revenue メジャーと Cost メジャーを参照します。
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 % メジャーを選択します。 数式バーでタブ文字とキャリッジ リターン文字を使用すると、前の例と同じ結果が生成されます。 キャリッジ リターンを追加するときは、必ず Shift + Enter キーを押します。
このメジャー定義は、このモジュールで後で説明する読み取りおよびパフォーマンスに対して、さらに改善できます。
ヒント
計算の書式設定に役立つ、別のソースからの優れた書式設定ツールとして、DAX Formatter があります。 このツールを使用すると、計算を貼り付けて書式設定できます。 その後、書式設定された計算をクリップボードにコピーし、Power BI Desktop に貼り付けることができます。