事件
3月31日 下午11時 - 4月2日 下午11時
最終Microsoft Fabric、Power BI、SQL 和 AI 社群主導的活動。 2025 年 3 月 31 日至 4 月 2 日。
立即註冊每當視覺效果在報表中顯示或新增至數據表的欄位時,Power BI 和 Excel 等報表用戶端都會執行 DAX 查詢,而且這些 DAX 查詢會在套用篩選時調整。 Power BI Desktop 中的 效能分析器 可以顯示這些 DAX 查詢,甚至在 DAX 查詢檢視中執行它們。
藉由在Power BI Desktop 中使用 DAX 查詢檢視,或在Power BI 服務中 撰寫 DAX 查詢,即可建立並執行自己的 DAX 查詢。 透過 Microsoft Fabric,您可以使用 Copilot 來進一步提升生產力,在桌面或 Web 的 DAX 查詢檢視中撰寫 DAX 查詢。 其他工具,例如 SQL Server Management Studio (SSMS)、Power BI 報表產生器,以及 DAX Studio等開放原始碼工具,也可讓您建立和執行 DAX 查詢。
DAX 查詢會在工具內以數據表的形式傳回結果,讓您能夠在量值中快速建立及測試 DAX 公式的效能,或只是檢視語意模型中的數據。 INFO 和 INFO.VIEW DAX 函數也可以取得語意模型的相關資訊,例如表格、欄、度量值等的清單。
在學習查詢之前,重要的是要對 DAX 的基本概念有扎實的理解。 如果您尚未這麼做,請務必查看 DAX 總覽。
DAX 查詢的簡單語法只包含一個必要的關鍵詞 EVALUATE。 EVALUATE 後面要接一個數據表運算式,例如 DAX 函數或數據表名稱,執行後將輸出結果數據表。 包括輸出結果資料表的資料表運算式有:
DAX 查詢有數個特定的可選關鍵詞:ORDER BY、START AT、DEFINE、MEASURE、VAR、TABLE 和 COLUMN。
在最基本的層級,DAX 查詢是包含數據表表達式的 EVALUATE
語句。 不過,至少需要一個 EVALUATE 陳述式,但是查詢可以包含任意數目的 EVALUATE 陳述式。
EVALUATE <table>
詞彙 | [定義] |
---|---|
table |
資料表運算式。 |
EVALUATE
'Sales Order'
傳回 Sales Order 資料表中的所有數據列和數據行,做為結果數據表。 這可以透過使用 TOPN 或 FILTER來限制,並透過使用 ORDER BY 來排序。
選擇性 ORDER BY
關鍵詞會在用來排序查詢結果的查詢或表達式中定義一或多個數據行。 結果中每個資料列任何可求解的運算式皆有效。 查詢本身中的任何欄也是有效的。
語意模型中的按列屬性排序方式不適用於 DAX 查詢結果。 如果一個欄位需要按模型中的另一個欄排序,例如月份名稱的情況,則排序依據的欄位也應該包含在用於 ORDER BY 的 DAX 查詢中。
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
詞彙 | [定義] |
---|---|
expression |
任何會傳回單一純量值的DAX表達式,或在DAX查詢中包含的數據行。 |
ASC |
(預設) 遞增排序次序。 |
DESC |
遞減排序次序。 |
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
依月份遞增順序傳回服裝訂單和以每個訂單計算的平均利潤,並組成一個結果數據表。
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
關鍵詞會在 ORDER BY
子句內使用。 定義查詢結果開始的值。
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
詞彙 | [定義] |
---|---|
value |
常數值。 不能是運算式。 |
parameter |
XMLA 陳述式中以 @ 字元為前置詞的參數名稱。 |
START AT 引數與 ORDER BY 子句中的資料行有一對一對應關係。 START AT 子句中的引數數量可以和 ORDER BY 子句一樣,但不能超過。 START AT 的第一個引數會定義 ORDER BY 資料行的資料行 1 起始值。 START AT 的第二個引數會定義 ORDER BY 資料行中,資料列中符合資料行 1 第一個值的資料行 2 起始值。
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 表格中傳回所有欄位,依 Sales Order 遞增排序,從 SO43661 開始。 此銷售訂單之前的數據列不會包含在結果數據表中。
選擇性的 DEFINE
關鍵詞引入了一個或多個計算的實體定義,這些定義僅在查詢期間存在。 與 EVALUATE
不同,DAX 查詢中只能有一個 DEFINE
區塊與一或多個定義。
DEFINE
必須在第一個 EVALUATE
語句之前,而且對查詢中的所有EVALUATE 語句都有效。 定義可以是變數、量值、資料表1 和資料行1。 定義可以參考出現在目前定義前後的其他定義。 如果查詢中包含 DEFINE
關鍵詞,則至少需要一個定義。
DEFINE MEASURE
是建置新量值或編輯語意模型中現有量值的常見案例。 當量值已存在於模型中時,DAX 查詢會使用查詢中定義的量值 DAX 公式。 這有助於在更新模型之前,先測試 DAX 查詢的量值。
DEFINE MEASURE
也有助於使用 DAX 公式來為特定的 DAX 查詢進行額外的分析,適用於您可能沒有加入模型量值的許可權或者不必要將其納入模型的情況。
[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>) +
詞彙 | [定義] |
---|---|
Entity |
MEASURE、VAR、TABLE1,或 COLUMN1。 |
name |
量值、var、資料表或資料行定義的名稱。 不能是運算式。 此名稱不需要是唯一的。 名稱只會在查詢期間存在。 |
expression |
傳回資料表或純量值的任何 DAX 運算式。 運算式可以使用任何已定義的實體。 如果需要將純量運算式轉換成資料表運算式,請將運算式包裝在具有大括弧 {} 的資料表建構函式內,或使用 ROW() 函式傳回單一資料列資料表。 |
[1]注意:查詢範圍 TABLE 和 COLUMN 定義都僅供內部使用。 雖然您可以針對沒有語法錯誤的查詢定義 TABLE 和 COLUMN 運算式,但其可能會產生執行階段錯誤,所以不建議這麼做。
DAX 查詢可以有多個 EVALUATE 陳述式,但只能有一個 DEFINE 陳述式。 DEFINE 陳述式中的定義可以套用至查詢中的任何 EVALUATE 陳述式。
DEFINE 陳述式中至少需要一個定義。
查詢覆寫模型量值的量值定義,其名稱相同,但是僅在查詢內使用。 它們不會影響模型量值。
VAR 名稱具有唯一的限制。 若要深入了解,請參閱 VAR - 參數。
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]
)
傳回一個數據表,評估三個已定義的量值,以依會計年度顯示結果。 模型中也存在所有量值,而且 DAX 查詢中會修改每個客戶的訂單。
正確定義的 DAX 查詢陳述式可以參數化,只需變更參數值即可一再使用。
Execute Method (XMLA) 方法具有 Parameter 項目 (XMLA) 集合項目,其可讓您定義參數並指派參數值。 在集合中,每個 Parameter 項目 (XMLA) 項目都會定義參數的名稱及其值。
在參數名稱前面加上 @
字元以參考 XMLA 參數。 語法中允許值的任何位置都可以使用參數呼叫來取代值。 所有 XMLA 參數都會鍵入為文字。
重要
參數定義於 parameters 區段中,且未用於 <STATEMENT>
元素時,會在 XMLA 中產生錯誤回應。
在 <Parameters>
專案中使用且未定義的參數會在 XMLA 中產生錯誤回應。
事件
3月31日 下午11時 - 4月2日 下午11時
最終Microsoft Fabric、Power BI、SQL 和 AI 社群主導的活動。 2025 年 3 月 31 日至 4 月 2 日。
立即註冊訓練
學習路徑
在 Power BI Desktop 中使用 DAX - Training
此學習路徑介紹 DAX (DAX) 的數據分析運算式,並提供使用計算來增強語意模型所需的基本技能。 首先,會描述 Power BI Desktop 的模型結構,以及如何使用 DAX 計算來增強其功能。 然後描述如何撰寫 DAX 公式和各種類型的模型計算,包括計算資料表、資料行以及量值。 接著引進評估內容,而後續課程會說明如何撰寫修改篩選內容的 DAX 公式。 最後,您將了解如何使用時間智慧函式和迭代器函式來撰寫 DAX 運算式。
認證
Microsoft Certified: Power BI Data Analyst Associate - Certifications
示範符合使用 Microsoft Power BI 進行資料建模、視覺化和分析的業務和技術要求的方法和最佳做法。