DAX 查詢

每當將欄位放在報表上或套用篩選時,Power BI 和 Excel 之類的報表用戶端就會執行 DAX 查詢。 藉由使用 SQL Server Management Studio (SSMS)、Power BI Report Builder 和開放原始碼工具 (例如 DAX Studio),您可以建立和執行您自己的 DAX 查詢。 DAX 查詢會在工具內以資料表的形式傳回結果,讓您快速建立及測試 DAX 公式的效能。

了解查詢之前,請務必先了解 DAX 的基本概念。 如果您還沒有這麼做,請務必檢閱 DAX 概觀

關鍵字

DAX 查詢的簡單語法只包含一個必要關鍵字:EVALUATE,以及數個選擇性關鍵字:ORDER BY、START AT、DEFINE、MEASURE、VAR、TABLE 和 COLUMN。 每個關鍵字都會定義用於查詢持續時間的陳述式。

EVALUATE (必要)

在最基本的層級中,DAX 查詢是包含資料表運算式的 EVALUATE 陳述式。 不過,至少需要一個 EVALUATE 陳述式,但是查詢可以包含任意數目的 EVALUATE 陳述式。

EVALUATE 語法

EVALUATE <table>  

EVALUATE 參數

詞彙 [定義]
table 資料表運算式。

EVALUATE 範例

EVALUATE
    'Internet Sales'

以資料表的形式傳回 Internet Sales 資料表中所有資料列和資料行。

DAX Evaluate 語句

ORDER BY (選擇性)

選擇性的 ORDER BY 關鍵字會定義一或多個用以排序查詢結果的運算式。 結果中每個資料列任何可求解的運算式皆有效。

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 資料表中所有資料列和資料行,依訂單日期遞增排序。

DAX 依語句評估順序

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 的第二個引數會定義 ORDER BY 資料行中,資料列中符合資料行 1 第一個值的資料行 2 起始值。

START AT 範例

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

傳回 Internet Sales 資料表中所有資料列和資料行,依銷售訂單號碼遞增排序,從 SO7000 開始。

DAX 依銷售訂單編號語句評估訂單

DEFINE (選擇性)

選擇性 DEFINE 關鍵字引進了一或多個只存在於查詢持續時間的導出實體定義。 定義優先於 EVALUATE 陳述式,而且對查詢中的所有 EVALUATE 陳述式都有效。 定義可以是變數、量值、資料表1 和資料行1。 定義可以參考出現在目前定義前後的其他定義。 如果在查詢中包含 DEFINE 關鍵字,則至少需要一個定義。

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 參數

詞彙 定義
實體 MEASURE、VAR、TABLE1,或 COLUMN1
NAME 量值、var、資料表或資料行定義的名稱。 不能是運算式。 此名稱不需要是唯一的。 名稱只會在查詢期間存在。
expression 傳回資料表或純量值的任何 DAX 運算式。 運算式可以使用任何已定義的實體。 如果需要將純量運算式轉換成資料表運算式,請將運算式包裝在具有大括弧 {} 的資料表建構函式內,或使用 ROW() 函式傳回單一資料列資料表。

[1]注意: 查詢範圍 TABLE 和 COLUMN 定義都僅供內部使用。 雖然您可以針對沒有語法錯誤的查詢定義 TABLE 和 COLUMN 運算式,但其可能會產生執行階段錯誤,所以不建議這麼做。

DEFINE 備註

  • DAX 查詢可以有多個 EVALUATE 陳述式,但只能有一個 DEFINE 陳述式。 DEFINE 陳述式中的定義可以套用至查詢中的任何 EVALUATE 陳述式。

  • DEFINE 陳述式中至少需要一個定義。

  • 查詢覆寫模型量值的量值定義,其名稱相同,但是僅在查詢內使用。 它們不會影響模型量值。

  • 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 年計算所得的銷售總額,以及 2013 年和 2014 年合併計算的銷售總額。 銷售總量和合併年度銷售總量運算式都用到 DEFINE 陳述式中的量值 Internet Total Sales。

DAX 評估量值化解

DAX 查詢中的參數

正確定義的 DAX 查詢陳述式可以參數化,只需變更參數值即可一再使用。

Execute Method (XMLA) 方法具有 Parameter 項目 (XMLA) 集合項目,其可讓您定義參數並指派參數值。 在集合中,每個 Parameter 項目 (XMLA) 項目都會定義參數的名稱及其值。

在參數名稱前面加上 @ 字元以參考 XMLA 參數。 語法中允許值的任何位置都可以使用參數呼叫來取代值。 所有 XMLA 參數都會鍵入為文字。

重要

在 [參數] 區段中定義,但未用於 <STATEMENT> 項目中的參數會在 XMLA 中產生錯誤回應。 在 <Parameter> 項目中使用但未定義的參數會在 XMLA 中產生錯誤回應。

DAX 陳述式
SUMMARIZECOLUMNS
TREATAS
FILTER