DAX クエリ

Power BI や Excel などのレポート クライアントは、フィールドがレポートに配置されたり、フィルターが適用されたりするたびに DAX クエリを実行します。 SQL Server Management Studio (SSMS)、Power BI Report BuilderDAX Studio などのオープンソース ツールを使用すると、独自の DAX クエリを作成して実行できます。 DAX クエリは、ツール内でテーブルとして結果を返します。これにより、DAX の数式をすばやく作成してパフォーマンスをテストできます。

クエリについて学習する前に、DAX の基礎を十分に理解しておくことが重要です。 まだ十分に理解していない場合は、必ず「DAX の概要」を確認してください。

キーワード

DAX クエリには、1 つの必須キーワード (EVALUATE) と、いくつかの省略可能なキーワード (ORDER BY、START AT、DEFINE、MEASURE、VAR、TABLE、COLUMN) で構成される単純な構文があります。 各キーワードによって、クエリの継続期間中に使用されるステートメントが定義されます。

EVALUATE (必須)

最も基本的なレベルでは、DAX クエリは、テーブル式が含まれる EVALUATE ステートメントです。 少なくとも 1 つの EVALUATE ステートメントが必要ですが、クエリには任意の数の EVALUATE ステートメントを含めることができます。

EVALUATE 構文

EVALUATE <table>  

EVALUATE パラメーター

期間 定義
テーブル テーブル式。

EVALUATE の例

EVALUATE
    'Internet Sales'

Internet Sales テーブルから、すべての行と列がテーブルとして返されます。

DAX の Evaluate ステートメント

ORDER BY (省略可能)

省略可能な ORDER BY キーワードでは、クエリ結果の並べ替えに使用する 1 つ以上の式を定義します。 結果の各行に対して評価できる式であれば何でも有効です。

ORDER BY 構文

EVALUATE <table>  
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]  

ORDER BY パラメーター

期間 定義
expression 単一のスカラー値を返す任意の DAX 式。
ASC (既定値) 昇順の並べ替え順序。
DESC 降順の並べ替え順序。

ORDER BY の例

EVALUATE
    'Internet Sales'
    
ORDER BY
    'Internet Sales'[Order Date]

Internet Sales テーブルのすべての行と列が、昇順の Order Date で、テーブルとして返されます。

DAX の Evaluate order by ステートメント

START AT (省略可能)

省略可能な START AT キーワードは、ORDER BY 句の内部で使用します。 クエリ結果を開始する値を定義します。

START AT 構文

EVALUATE <table>  
[ORDER BY {<expression> [{ASC | DESC}]}[, …]  
[START AT {<value>|<parameter>} [, …]]]

START AT パラメーター

期間 定義
定数値。 式を指定することはできません。
parameter 前に @ 文字が付いている、XMLA ステートメントでのパラメーターの名前。

START AT の解説

START AT 引数は、ORDER BY 句の列と一対一に対応しています。 START AT 句では、ORDER BY 句に含まれる引数と同じ数まで引数を指定できますが、それを超えることはできません。 START AT の 1 番目の引数では、ORDER BY 列の列 1 の開始値を定義します。 START AT の 2 番目の引数では、列 1 の最初の値を満たす行内で、ORDER BY 列の列 2 の開始値を定義します。

START AT の例

EVALUATE
    'Internet Sales'
    
ORDER BY
    'Internet Sales'[Sales Order Number]
START AT "SO7000"

Sales Order Number が SO7000 以降のすべての行と列が、Internet Sales テーブルから昇順で返されます。

DAX の Evaluate order by Sales order number ステートメント

DEFINE (省略可能)

省略可能な DEFINE キーワードによって、クエリの継続期間中のみ存在する 1 つ以上の計算エンティティ定義が導入されます。 定義は EVALUATE ステートメントの前に配置され、クエリのすべての EVALUATE ステートメントに対して有効です。 定義には、変数、メジャー、テーブル1、および列1を指定できます。 定義では、現在の定義の前または後に出現する他の定義を参照できます。 DEFINE キーワードがクエリに含まれている場合は、少なくとも 1 つの定義が必要です。

DEFINE 構文

[DEFINE 
    (
     (MEASURE <table name>[<measure name>] = <scalar expression>) | 
     (VAR <var name> = <table or scalar expression>) |
     (TABLE <table name> = <table expression>) | 
     (COLUMN <table name>[<column name>] = <scalar expression>) | 
    ) + 
]

(EVALUATE <table expression>) +

DEFINE パラメーター

期間 定義
Entity MEASURE、VAR、TABLE1、または COLUMN1
name メジャー、変数、テーブル、または列の定義の名前。 これを式にすることはできません。 この名前は、一意である必要はありません。 この名前は、クエリの継続期間のみ存在します。
expression テーブルまたはスカラー値を返す、すべての DAX 式。 式では、定義されている任意のエンティティを使用できます。 スカラー式をテーブル式に変換する必要がある場合は、中かっこ {} でテーブル コンストラクター内に式をラップするか、1 つの行テーブルを返すように ROW() 関数を使用します。

[1]注意: クエリ スコープが設定された TABLE と COLUMN の定義は、内部使用のみを目的としています。 構文エラーなしでクエリに TABLE と COLUMN の式を定義できますが、実行時エラーが発生する可能性があるため、推奨されません。

DEFINE の解説

  • DAX クエリには複数の EVALUATE ステートメントを含めることができますが、DEFINE ステートメントは 1 つしか含めることができません。 DEFINE ステートメントの定義は、クエリ内のすべての EVALUATE ステートメントに適用できます。

  • DEFINE ステートメントには、少なくとも 1 つの定義が必要です。

  • クエリのメジャー定義は、同じ名前のモデル メジャーをオーバーライドしますが、クエリ内でのみ使用されます。 モデル メジャーには影響しません。

  • VAR 名には一意の制限があります。 詳細については、VAR のパラメーターに関する記事を参照してください。

DEFINE の例

DEFINE
    MEASURE 'Internet Sales'[Internet Total Sales] =
        SUM ( 'Internet Sales'[Sales Amount] )

EVALUATE
SUMMARIZECOLUMNS (
    'Date'[Calendar Year],
    TREATAS (
        {
            2013,
            2014
        },
        'Date'[Calendar Year]
    ),
    "Total Sales", [Internet Total Sales],
    "Combined Years Total Sales",
        CALCULATE (
            [Internet Total Sales],
            ALLSELECTED ( 'Date'[Calendar Year] )
        )
)
ORDER BY [Calendar Year]

2013 年と 2014 年の計算された合計売上高の値と、両者を合算した値を、テーブルとして返します。 DEFINE ステートメントのメジャー Internet Total Sales が、Total Sales 式と Combined Years Total Sales 式の両方で使用されています。

DAX Evaluate とメジャーの定義

DAX クエリのパラメーター

適切に定義された DAX クエリのステートメントをパラメーター化し、パラメーター値を変更するだけで何度でも使用することができます。

Execute (XMLA) メソッドの Parameters (XMLA) コレクション要素を使用すると、パラメーターを定義して値を割り当てることができます。 コレクション内の各 Parameter (XMLA) 要素では、パラメーターの名前と値を定義します。

パラメーターの名前の前にプレフィックスの @ 文字を付加することで、XMLA パラメーターを参照します。 そのため、構文内で値が許可されている任意の箇所は、パラメーター呼び出しに置き換えることができます。 すべての XMLA パラメーターはテキストとして型指定されます。

重要

Parameters セクションで定義されていて、 <STATEMENT> 要素で使用されていないパラメーターに対しては、XMLA でエラー応答が生成されます。 使用されているのに、 <Parameters> 要素で定義されていないパラメーターに対しては、XMLA でエラー応答が生成されます。

DAX ステートメント
SUMMARIZECOLUMNS
TREATAS
FILTER