DAX 查詢
每當報表中的視覺效果顯示時,Power BI and Excel 之類的報表用戶端執行 DAX 查詢,or 新增至數據表的欄位,and 這些 DAX 查詢會在套用 filter 時調整。 Power BI Desktop 中的 效能分析器 會顯示這些 DAX 查詢,andeven 在 DAX 查詢檢視中執行查詢。
藉由在 Power BI Desktop 中使用 DAX 查詢檢視,or在 Power BI 服務中 寫入 DAX 查詢,您可以建立 and 執行自己的 DAX 查詢。 透過 Microsoft Fabric,您可以使用 Copilot 進一步提升生產力,以在 Desktop or web 的 DAX 查詢檢視中撰寫 DAX 查詢。 除了 Power BI 工具之外,DAX 查詢還可以在 Fabric 筆記本中執行, 使用 語意連結,以使用 python 從語意模型讀取數據,and 搭配 Execute Queries REST API,也可在 Power Automate中使用。 其他工具,例如 SQL Server Management Studio (SSMS),Power BI 報表產生器,andDAX Studio等開放原始碼工具,也可讓您建立 and 執行 DAX 查詢。
DAX 查詢會以工具內的數據表 right 傳回結果,讓您快速建立 and 測試量值中 DAX 公式的效能,or 只要檢視語意模型中的數據即可。 INFO and INFO。VIEW DAX 函式也可以取得語意模型的相關信息,例如數據表、數據行、量值清單,and 更多。
了解查詢之前,你必須要有紮實的 DAX 基本概念。 If 您還沒有,請務必查看 DAX 概觀。
關鍵字
DAX 查詢的簡單語法只包含一個必要的關鍵字,EVALUATE。 EVALUATE 後面接著數據表運算式,例如 DAX 函式 or 數據表名稱,執行時會輸出結果數據表。 包括輸出結果資料表的資料表運算式有:
- 輸出數據表的常見 DAX 函式,例如 SUMMARIZE、SUMMARIZECOLUMNS、SELECTCOLUMNS、FILTER、UNION、TOPN、ADDCOLUMNS、DATATABLE、and 許多其他函式,會使用 EVALUATE 來輸出結果數據表。
- 當依名稱參考時,模型中的表格會使用 EVALUATE 來輸出顯示該表格中的數據結果。 例如,EVALUATE 『Table name』 可以當作 DAX 查詢執行。
- 模型中的任何 DAX 公式與 or 配合,將返回純量 value;使用 EVALUATE,並當用大括弧括住時,會將 value 顯示為結果表。 例如,EVALUATE {[Total Sales]}orEVALUATE {COUNTROWS('Sales')} 可以當作 DAX 查詢執行。 這些稱為 資料表建構函式。
DAX 查詢有數個特定的選擇性關鍵詞:ORDER BY、START AT、DEFINE、MEASURE、VAR、TABLE、and COLUMN。
EVALUATE (必要)
在最基本的層級,DAX 查詢是包含數據表表達式的 EVALUATE
語句。 至少需要一個 EVALUATE 語句,不過,查詢可以包含任意數目的 EVALUATEstatements。
EVALUATE 語法
EVALUATE <table>
EVALUATE 參數
詞彙 | [定義] |
---|---|
table |
資料表運算式。 |
EVALUATE 範例
EVALUATE
'Sales Order'
傳回從 Sales Order 資料表中 all 個資料列和 and 個資料行,作為結果表。 這可以限制使用 TOPNorFILTER,and 使用 ORDER BY排序。
ORDER BY (選擇性)
選擇性的 ORDER BY
關鍵詞會定義查詢 or 表達式中用來排序查詢結果的額外 or 欄。 結果中每個資料列任何可求解的運算式皆有效。 查詢本身中的任何欄也是有效的。
語意模型中的數據行屬性排序 not 套用至 DAX 查詢結果。 If 數據行應該依模型中的不同數據行排序,例如,在 Month Name 的情況下,數據行的排序也應該包含在要用於 ORDER BY的 DAX 查詢中。
ORDER BY 語法
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
ORDER BY 參數
詞彙 | [定義] |
---|---|
expression |
任何返回單一純量 value的 DAX 表示式,以及包含在 DAX 查詢中的 or 欄位。 |
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
傳回服裝訂單 and每筆訂單的average 利潤,依 month遞增排序,並依 month再次遞增排序,以結果表的形式顯示。
TOPN 會 not 根據 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
傳回依據 SalesOrderLineKey 遞增排序的前 100 個銷售訂單,然後依銷售訂單排序,再依銷售訂單行排序結果 first。
START AT (選擇性)
選擇性 START AT
關鍵詞會在 ORDER BY
子句內使用。 它定義了查詢結果從 value 開始的位置。
START AT 語法
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
START AT 參數
詞彙 | [定義] |
---|---|
value |
常數 value。 不能是運算式。 |
parameter |
XMLA 陳述式中以 @ 字元為前置詞的參數名稱。 |
START AT 備註
START AT 參數與 ORDER BY 子句中的欄位具有一對一對應。 START AT 子句中可以有和 ORDER BY 子句中一樣多的自變數,但 not 更多。 START AT 中的 first 自變數會定義 ORDER BY 數據行第 1 欄中的起始 value。 START AT 中的 second 參數定義符合第 1 欄 firstvalue 條件的資料行內 ORDER BY 欄位第 2 行的起始 value。
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"
從銷售訂單數據表中依銷售訂單遞增順序傳回all列,從SO43661開始。 此銷售訂單之前的列 not 已包含在結果表中。
DEFINE (選擇性)
選擇性的 DEFINE
關鍵詞引進了 or 個額外計算的實體定義,這些定義僅存在於查詢duration之中。 不同於 EVALUATE
,在 DAX 查詢中,DEFINE
區塊中只能有一個包含額外定義的 or。
DEFINE
必須在 firstEVALUATE
聲明之前,and 對查詢中的 allEVALUATEstatements 是有效的。 定義可以是變數、量值、資料表1、and 資料行1。 定義可以參考當前定義之後、or 之前顯示的其他定義。 當查詢中包含 DEFINE
關鍵詞時,至少需要一個定義 if。
DEFINE MEASURE
是建置新量值 or 在語意模型中編輯現有量值的常見案例。 當模型中已有 measure 時,DAX 查詢會使用查詢中定義的 measureDAX 公式。 在更新模型之前,使用 DAX 查詢來測試測量非常有幫助。
DEFINE MEASURE
也有助於針對特定 DAX 查詢,使用 DAX 公式建置額外的分析,當您擁有 not 許可權新增模型時,measureor 必須在模型中納入這個模型 not。
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、or COLUMN1。 |
name |
measure、var、表格、or 欄位定義的名稱。 不能是運算式。 名稱 not 必須是唯一的。 名稱僅存在於查詢中的 duration。 |
expression |
任何 DAX 表示式能夠傳回一個包含 or 的數據表以及 value的純量。 運算式可以使用任何已定義的實體。
If 必須將純量表達式 convert 到數據表運算式中,將表達式包裝在具有大括弧的數據表建構函式內 {} ,or 使用 ROW() 函數傳回單一數據列數據表。 |
[1]注意: 查詢範圍的數據表 and 欄位定義僅供內部使用。 雖然您可以 define 不含語法 error查詢的 TABLE and COLUMN 運算式,但建議 andnot 產生運行時錯誤。
DEFINE 備註
DAX 查詢可以有多個 EVALUATEstatements,但只能有一個 DEFINE 語句。 DEFINE 語句中的定義可以套用至查詢中的任何 EVALUATEstatements。
DEFINE 語句中至少需要一個定義。
Measure 查詢的定義會覆寫具有相同名稱的模型量度,但僅在該查詢中使用。 這些因素 not 會影響這個模型 measure。
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 查詢中定義的數據表,以顯示未購買的產品,並加入一個參考已定義變數的附加欄位。 measure 也會定義 and 評估為 count 未購買產品的數據列。
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]
)
傳回一個數據表,評估三個已定義的量值,以透過財務 year來顯示結果。 All 量值也存在於模型中,and 每個客戶的訂單會在 DAX 查詢中修改。
DAX 查詢中的參數
定義完善的 DAX 查詢語句可以參數化,and 然後透過參數 values中的變更,透過 and 使用 。
Execute 方法(XMLA) 方法具有 Parameters 元素(XMLA) 集合項目,允許定義參數並加以指派andvalue。 在集合中,每個 Parameter Element (XMLA) 元素都會定義參數的名稱,andvalue 參數的名稱。
在參數名稱前面加上 @
字元以參考 XMLA 參數。 在語法中的任何允許 value 的位置,都可以用參數呼叫來取代 value。
All XMLA 參數的類型為文字。
重要
參數定義於 parameters 區段中,andnot 參數用於 XMLA 中的 <STATEMENT>
元素,生成 generateerror 回應。
and
not
generate XMLA 中 error 回應 <Parameters>
元素中定義的參數。