使用 DAX 運算子
DAX 公式也能使用運算子來建立執行數學計算、數值比較、字串處理,或是條件測試等的運算式。
提示
在 DAX 和在 Excel 中,許多運算子和優先順序相同。
算術運算子
下表列出算數運算子。
運算子 | 描述 |
---|---|
+ | 加法 |
- | 減法 |
* | 乘法 |
/ | 除法 |
^ | 乘冪 |
請記住,當您將兩個運算式相除,而且分母可能傳回零或空白時,使用 DIVIDE
DAX 函式會更加安全且有效率。
比較運算子
下表列出比較運算子,用來比較兩個值。 傳回的結果為 TRUE 或 FALSE。
運算子 | 描述 |
---|---|
= | 等於 |
== | 嚴格等於 |
> | 大於 |
< | 小於 |
>= | 大於或等於 |
<= | 小於或等於 |
<> | 不等於 |
除了嚴格等於 (==) 以外的所有比較運算子,會將空白視為等於數字零、空字串 ("")、1899 年 12 月 30 日的日期,或是 FALSE。 這表示 [Revenue]
的值為零或空白時,運算式 [Revenue] = 0
的計算結果會是 TRUE。 相反地,只有在 [Revenue]
的值為零時,[Revenue] == 0
才會是 TRUE。
文字串連運算子
使用 & 符號字元連接或串連兩個文字值,以便產生單一連續的文字值。 舉例來說,請考慮下列計算結果欄的定義:
Model Color = 'Product'[Model] & "-" & 'Product'[Color]
邏輯運算子
使用邏輯運算子來結合運算式,以便產生單一結果。 下表列出所有的邏輯運算子。
運算子 | 描述 |
---|---|
&& | 在兩個運算式之間建立 AND 條件,各別運算式皆可計算出布林值。 只要兩個運算式都傳回 TRUE,運算式的組合也會傳回 TRUE;否則這個組合會傳回 FALSE。 |
|| (雙管道) | 在兩個邏輯運算式之間建立 OR 條件。 如果任一個運算式傳回 TRUE,結果就是 TRUE;只有在兩個運算式都是 FALSE 時,結果才是 FALSE。 |
IN | 在每個資料列之間建立邏輯 OR 條件,這些資料列預計要和資料表相比。 注意:資料表建構函式語法會使用大括弧。 |
NOT | 反轉布林運算式的狀態 (將 FALSE 反轉為 TRUE,反之亦然)。 |
使用 IN
邏輯運算子的範例是 ANZ Revenue 量值定義,其會使用 CALCULATE
DAX 函式來執行兩個國家/地區 (澳洲和紐西蘭) 的特定篩選條件。
注意
在了解如何修改篩選內容的同時,將會向您介紹更強大的 CALCULATE
函式。
ANZ Revenue =
CALCULATE(
[Revenue],
Customer[Country-Region] IN {
"Australia",
"New Zealand"
}
)
運算子優先順序
若您的 DAX 公式包含數個運算子,DAX 透過規則決定計算順序,這個動作也稱為運算子優先順序。 運算會根據下表順序進行。
運算子 | 描述 |
---|---|
^ | 乘冪 |
- | 正負符號 (如在 -1 中的符號) |
* 和 / | 乘法和除法 |
NOT | NOT |
+ 和 - | 加法和減法 |
& | 串連兩個文字字串 |
=,==,<,><=,=,>=,<> | 比較 |
若運算子有相同的優先順序值,則會從左到右將其排序。
一般而言,此處的運算子優先順序與在 Excel 中的相同。 若您需要覆寫評估順序,請利用括弧將運算子分組。
舉例來說,請考慮下列計算結果欄的定義:
Extended Amount = Sales[Order Quantity] * Sales[Unit Price] * 1 - [Unit Price Discount Pct]
因為乘法會在減法之前計算,所以這個範例計算資料行定義會產生錯誤結果。 下列正確的計算結果欄定義會使用括弧,以便確保先運算減法,再運算乘法。
Extended Amount = Sales[Order Quantity] * Sales[Unit Price] * (1 - [Unit Price Discount Pct])
提示
記住運算子優先順序規則是很有挑戰的事情,對 DAX 初學者更是如此。 因此,我們建議您徹底測試公式。 若公式因錯誤的計算順序而產生錯誤的結果,您可以試著新增括弧,以便調整計算的順序。 您也可以新增括弧,以便改善公式的可讀性。
如需 DAX 運算子和優先順序的詳細資訊,請參閱 DAX 運算子。
隱含轉換
撰寫 DAX 公式時,利用運算子來結合不同的資料類型,不需要明確轉換型別。 通常,DAX 會自動識別參考模型物件的資料類型,並在必要時執行隱含轉換,以便完成指定的運算。
不過,雖然某些值可成功轉換,但仍然存有一些限制。 若值或資料行的資料類型與目前的運算不相容,DAX 會傳回錯誤。 舉例來說,因為將日期值相乘不合邏輯,所以這樣的嘗試會產生錯誤。
取決於使用的運算子,而以不同的方式處理空白。 此處處理空白的方式與在 Excel 中類似,但與資料庫 (SQL) 處理 NULL 的方式不同。 以算術運算子進行運算時,空白會被視為零,與字串串連時,則會被視為空字串。