使用 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 的方式不同。 以算術運算子進行運算時,空白會被視為零,與字串串連時,則會被視為空字串。

提示

記住空白的處理方式是很有挑戰的事情,對 DAX 初學者更是如此。 因此,我們建議您徹底測試公式。 空白產生非預期結果時,請考慮使用 IFISBLANK DAX 函式來測試空白,並做出適當反應。