Power BI や Excel などのレポート クライアントでは、ビジュアルがレポートに表示されたり、テーブルに追加されたフィールドが常に DAX クエリを実行したり、フィルターが適用されたときにこれらの DAX クエリが調整されたりします。 Power BI Desktop の パフォーマンス アナライザー では、これらの DAX クエリを表示し、Power BI Desktop のクエリ ビュー DAX 実行することもできます。
Power BI Desktop DAXクエリ ビューを使用するか、Power BI サービスでDAXクエリを記述することで、独自のDAX クエリを作成して実行できます。 Microsoft Fabric を使用すると、Copilot を使用して、デスクトップまたは Web のクエリ ビューでDAXクエリを作成DAX生産性をさらに向上させることができます。 Power BI ツールに加えて、DAXクエリは、Python を使用してセマンティック モデルからデータを読み取るセマンティック リンクを使用し、Power Automate でも使用できるクエリの実行 REST API を使用して Fabric ノートブックで実行できます。 SQL Server Management Studio (SSMS)、Power BI レポート ビルダー、DAX Studio などのオープン ソース ツールなどの他のツールでも、DAXクエリを作成して実行できます。
DAX クエリはツール内のテーブルとして結果を返します。これにより、メジャー内の DAX 数式のパフォーマンスをすばやく作成してテストしたり、セマンティック モデル内のデータを単に表示したりできます。 INFO と INFO。VIEW DAX 関数では、テーブル、列、メジャーなどのセマンティック モデルに関する情報を取得することもできます。
クエリについて学習する前に、 DAX の基本をしっかりと理解しておく必要があります。 まだ確認していない場合は、DAX概要を確認してください。
キーワード
DAX クエリには、1 つの必須キーワード ( EVALUATE) で構成される単純な構文があります。 EVALUATE の後に、 DAX 関数やテーブル名などのテーブル式が続き、実行時に結果テーブルが出力されます。 結果テーブルを出力するテーブル式は次のとおりです。
- SUMMARIZE、SUMMARIZECOLUMNS、SELECTCOLUMNS、FILTER、UNION、TOPN、ADDCOLUMNS、DATATABLEなど、テーブルを出力する一般的なDAX関数は、EVALUATEを使用して結果テーブルを出力します。
- 名前によって参照されるモデル内のテーブルは、 EVALUATE で動作し、テーブル内のデータを示す結果テーブルを出力します。 たとえば、 EVALUATE 'Table name' は 、 DAX クエリとして実行できます。
- スカラー値を返すモデル内のメジャーまたは任意の DAX の数式は、中かっこで囲むと EVALUATE と連携して値を結果テーブルとして表示します。 たとえば、{[Total Sales]} または EVALUATE {COUNTROWS('Sales')} EVALUATEは、DAX クエリとして実行できます。 これらは テーブル コンストラクターと呼ばれます。
DAX クエリには、ORDER BY、START AT、DEFINE、MEASURE、VAR、TABLE、COLUMN など、いくつかの省略可能なキーワードがあります。
EVALUATE (必須)
最も基本的なレベルでは、 DAX クエリはテーブル式を含む EVALUATE
ステートメントです。 少なくとも 1 つの EVALUATE ステートメントが必要ですが、クエリには任意の数の EVALUATE ステートメントを含めることができます。
EVALUATE 構文
EVALUATE <table>
EVALUATE パラメーター
任期 | 定義 |
---|---|
table |
テーブル式。 |
EVALUATE 例
EVALUATE
'Sales Order'
Sales Order テーブルのすべての行と列を結果テーブルとして返します。 これは、 TOPN または FILTERの使用によって制限され、 ORDER BYで並べ替えることができます。
ORDER BY (省略可能)
省略可能な ORDER BY
キーワードは、クエリ内の 1 つ以上の列またはクエリ結果の並べ替えに使用される式を定義します。 結果の各行に対して評価できる式はすべて有効です。 クエリ内の任意の列もまた有効です。
セマンティック モデルの「列による並べ替え」プロパティは、DAX のクエリ結果には適用されません。 月名の場合など、モデル内の別の列で列を並べ替える必要がある場合は、ORDER BYで使用するDAX クエリにも列による並べ替えを含める必要があります。
ORDER BY 構文
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
ORDER BY パラメーター
任期 | 定義 |
---|---|
expression |
1 つのスカラー値を返す DAX 式、または DAX クエリに含まれる列。 |
ASC |
(既定値)昇順の並べ替え順序。 |
DESC |
降順の並べ替え順序。 |
ORDER BY 例
EVALUATE
SUMMARIZECOLUMNS(
// Group by columns
'Date'[Month Name],
'Date'[Month of Year],
'Product'[Category],
// Optional filters
FILTER(
VALUES('Product'[Category]),
[Category] = "Clothing"
),
// Measures or explicit DAX formulas to aggregate and analyze the data by row
"Orders", [Orders],
"Avg Profit per Order", DIVIDE(
[Total Sales Profit],
[Orders]
)
)
// DAX queries do not use sort order defined in Power BI,
// sort by columns must be included in the DAX query to be used in order by
ORDER BY 'Date'[Month of Year] ASC
結果テーブルとして、衣料品の注文数と、1 か月ごとの注文ごとの平均利益を、月別の昇順で返します。
TOPN は、 ORDER BYで指定された並べ替え順序に基づいて返す指定された行数を選択しません。 代わりに、 TOPN には、必要に応じて、上位 100 行が返される前に並べ替えを指定する独自の構文があります。 ORDER BY は、 TOPNによって返された結果テーブルのみを並べ替えます。
EVALUATE
TOPN(
100,
'Sales Order',
// The way the data is sorted before the top 100 rows are selected
'Sales Order'[SalesOrderLineKey], ASC
)
// The way the data is sorted for the results
ORDER BY
'Sales Order'[Sales Order] ASC,
'Sales Order'[Sales Order Line] ASC
SalesOrderLienKey で昇順に並べ替えられた上位 100 件の販売注文を返し、最初に販売注文、次に販売注文明細行で結果を並べ替えます。
START AT (任意)
省略可能な START AT
キーワードは、 ORDER BY
句内で使用されます。 クエリ結果の開始位置の値を定義します。
START AT 構文
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
START AT パラメーター
任期 | 定義 |
---|---|
value |
定数値。 式を指定することはできません。 |
parameter |
@ 文字のプレフィックスが付いた XMLA ステートメント内のパラメーターの名前。 |
START AT の解説
START AT 引数には、 ORDER BY 句の列との一対一の対応があります。 START AT句には、ORDER BY句と同じ数の引数を指定できますが、それ以上は含まれません。 START ATの最初の引数は、ORDER BY列の列 1 の開始値を定義します。 START ATの 2 番目の引数は、列 1 の最初の値を満たす行内のORDER BY列の列 2 の開始値を定義します。
START AT 例
EVALUATE
'Sales Order'
ORDER BY 'Sales Order'[Sales Order] ASC
// Start at this order, orders before this order will not be displayed
START AT "SO43661"
Sales Order テーブルのすべての列を、販売注文別の昇順でSO43661から返します。 この販売注文の前の行は、結果テーブルに含まれません。
DEFINE (省略可能)
省略可能な DEFINE
キーワードは、クエリの期間中のみ存在する 1 つ以上の計算エンティティ定義を導入します。 EVALUATE
とは異なり、DAX クエリには 1 つ以上の定義を持つ 1 つのDEFINE
ブロックしか存在できません。 DEFINE
は、最初の EVALUATE
ステートメントの前に置く必要があり、クエリ内のすべての EVALUATE ステートメントに対して有効です。 定義には、変数、メジャー、テーブル1、列1 を指定できます。 定義は、現在の定義の前または後に表示される他の定義を参照できます。 DEFINE
キーワードがクエリに含まれている場合は、少なくとも 1 つの定義が必要です。
DEFINE MEASURE
は、セマンティック モデルで新しいメジャーを構築したり、既存のメジャーを編集したりする一般的なシナリオです。 モデルにメジャーが既に存在する場合、 DAX クエリでは、クエリで定義されているメジャー DAX 数式が使用されます。 これは、モデルを更新する前に、 DAX クエリを使用してメジャーをテストする場合に役立ちます。
DEFINE MEASURE
は、モデル メジャーを追加する権限がない場合や、モデルに含める必要がない特定のDAX クエリに対して、DAX式を使用して追加の分析を作成する場合にも役立ちます。
DEFINE 構文
[DEFINE
(
(MEASURE <table name>[<measure name>] = <scalar expression>) |
(VAR <var name> = <table or scalar expression>) |
(TABLE <table name> = <virtual table definition>) |
(COLUMN <table name>[<column name>] = <scalar expression>) |
) +
]
(EVALUATE <table expression>) +
DEFINE パラメーター
任期 | 定義 |
---|---|
Entity |
MEASURE、VAR、TABLE1、または COLUMN1。 |
name |
メジャー、変数、テーブル、または列の定義の名前。 それは表現することができません。 名前は一意である必要はありません。 この名前は、クエリの期間中のみ存在します。 |
expression |
テーブルまたはスカラー値を返す任意の DAX 式。 式では、定義されているエンティティのいずれかを使用できます。 スカラー式をテーブル式に変換する必要がある場合は、中かっこ {} でテーブル コンストラクター内で式をラップするか、ROW() 関数を使用して 1 つの行テーブルを返します。 |
[1]注意: クエリ スコープの TABLE および COLUMN 定義は、内部使用のみを目的としています。 構文エラーなしでクエリの TABLE 式と COLUMN 式を定義できますが、実行時エラーが発生する可能性があるため、推奨されません。
DEFINE の解説
DAX クエリには複数の EVALUATE ステートメントを含めることができますが、DEFINE ステートメントは 1 つだけ指定できます。 DEFINE ステートメントの定義は、クエリ内の任意の EVALUATE ステートメントに適用できます。
DEFINE ステートメントには、少なくとも 1 つの定義が必要です。
クエリのメジャー定義は、同じ名前のモデル メジャーをオーバーライドしますが、クエリ内でのみ使用されます。 モデルの測定値には影響しません。
VAR 名には一意の制限があります。 詳細については、「VAR - パラメーターの」を参照してください。
DEFINE 例
DEFINE
VAR _firstyear = MIN('Date'[Fiscal Year])
VAR _lastyear = MAX('Date'[Fiscal Year])
TABLE 'Unbought products' = FILTER('Product', [Orders] + 0 = 0)
COLUMN 'Unbought products'[Year Range] = _firstyear & " - " & _lastyear
MEASURE 'Unbought products'[Unbought products] = COUNTROWS('Unbought products')
EVALUATE
'Unbought products'
EVALUATE
{[Unbought products]}
定義された変数を参照する追加の定義済み列を含む、必要のない製品を表示するために、 DAX クエリで定義されたテーブルを返します。 未購入製品の行をカウントするために、指標が定義され評価されます。
DEFINE
MEASURE 'Pick a sales measure'[Orders] = DISTINCTCOUNT('Sales Order'[Sales Order])
MEASURE 'Pick a sales measure'[Customers] = CALCULATE(
COUNTROWS(Customer),
FILTER(
'Sales',
[Orders] > 0
)
)
MEASURE 'Pick a sales measure'[Orders per Customer] = DIVIDE(
[Orders],
[Customers],
0
)
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Fiscal Year],
"Orders", [Orders],
"Customers", [Customers],
"Orders per Customer", [Orders per Customer]
)
会計年度別の結果を表示するために定義された 3 つのメジャーを評価するテーブルを返します。 すべてのメジャーはモデルにも存在し、顧客ごとの注文は DAX クエリで変更されます。
DAX クエリのパラメーター
適切に定義された DAX クエリ ステートメントをパラメーター化し、パラメーター値を変更するだけで何度も使用できます。
Execute メソッド (XMLA) メソッドには、パラメーターを定義して値を割り当てることができる Parameters 要素 (XMLA) コレクション要素があります。 コレクション内では、各 Parameter 要素 (XMLA) 要素によって、パラメーターの名前とパラメーターに対する値が定義されます。
パラメーターの名前の前に @
文字を付けることで、XMLA パラメーターを参照します。 値が許可されている構文内の任意の場所で、値をパラメーター呼び出しに置き換えることができます。 すべての XMLA パラメーターはテキストとして型指定されます。
重要
パラメーターセクションで定義され、 <STATEMENT>
要素で使用されていないパラメーターは、XMLA でエラー応答を生成します。
<Parameters>
要素で使用され、定義されていないパラメーターは、XMLA でエラー応答を生成します。