DAX 查詢

使用 DAX 查詢,您可以查詢和傳回資料表運算式所定義的資料。 每當有欄位放在報表介面,或套用篩選或計算時,報告用戶端就會建構 DAX 查詢。 您也可以在 SQL Server Management Studio (SSMS) 和 DAX Studio 等開放原始碼工具中建立及執行 DAX 查詢。 在 SSMS 和 DAX Studio 中執行的 DAX 查詢,會以資料表的形式傳回結果。

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

語法

[DEFINE {  MEASURE <tableName>[<name>] = <expression> } 
        {  VAR <name> = <expression>}]
EVALUATE <table>  
[ORDER BY {<expression> [{ASC | DESC}]}[, …]  
[START AT {<value>|<parameter>} [, …]]]  

關鍵字

EVALUATE (必要)

在最基本的層級中,DAX 查詢是包含資料表運算式的 EVALUATE 陳述式。 不過,查詢可以包含多個 EVALUATE 陳述式。

語法

EVALUATE <table>  

引數

詞彙 定義
資料表 資料表運算式。

範例

EVALUATE(
    'Internet Sales'
    )

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

DAX Evaluate statement

ORDER BY (選擇性)

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

語法

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

引數

詞彙 定義
運算式 傳回單一純量值的任何 DAX 運算式。
ASC (預設) 遞增排序次序。
DESC 遞減排序次序。

範例

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

以資料表的形式傳回 Internet Sales 資料表中所有資料列和資料行,依訂單日期排序。

DAX Evaluate order by statement

START AT (選擇性)

選擇性的 START AT 關鍵字用在 ORDER BY 子句內。 定義查詢結果開始的值。

語法

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

引數

詞彙 定義
常數值。 不能是運算式。
參數 XMLA 陳述式中以 @ 字元為前置詞的參數名稱。

START AT 引數與 ORDER BY 子句中的資料行有一對一對應關係。 START AT 子句中的引數數量可以和 ORDER BY 子句一樣,但不能超過。 START AT 的第一個引數會定義 ORDER BY 資料行的資料行 1 起始值。 START AT 的第二個引數會定義 ORDER BY 資料行中,資料列中符合資料行 1 第一個值的資料行 2 起始值。

範例

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

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

DAX Evaluate order by Sales order number statement

單一查詢中可指定多個 EVALUATE/ORDER BY/START AT 子句。

DEFINE (選擇性)

選擇性的 DEFINE 關鍵字會定義只存在於查詢期間的實體。 定義對所有 EVALUATE 陳述式皆為有效。 實體可以是變數、量值、資料表和資料行。 定義可以參考出現在目前定義前後的其他定義。 定義一般位在 EVALUATE 陳述式之前。

語法

[DEFINE {  MEASURE <tableName>[<name>] = <expression> } 
        {  VAR <name> = <expression>}]
EVALUATE <table>  

引數

詞彙 定義
tableName 使用標準 DAX 語法的現有資料表名稱。 不能是運算式。
name 新量值的名稱。 不能是運算式。
運算式 傳回單一純量值的任何 DAX 運算式。 運算式可以使用任何已定義的量值。 運算式必須傳回資料表。 如果需要純量值,請將純量包裝在 ROW() 函式內,以求得資料表。
VAR 作為具名變數的選擇性運算式。 VAR 可以當作引數傳遞給其他運算式。

範例

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 Evaluate with measure defnition

DAX 查詢中的參數

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

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

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

重要

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

另請參閱

FILTER
SUMMARIZECOLUMNS
TREATAS
VAR