DAX 運算子

資料分析運算式 (DAX) 語言使用運算子建立的運算式,可比較值、執行算術計算,或處理字串。

運算子的類型

計算運算子有四種不同的類型:算術、比較、文字串連和邏輯。

算術運算子

若要執行基本數學運算 (例如加法、減法或乘法)、組合數字,以及求得數值結果,請使用下列算術運算子。

算術運算子 意義 範例
+ (加號) 加法 3+3
– (減號) 減法或符號 3–1–1
* (星號) 乘法 3*3
/ (正斜線) 部門 3/3
^ (插入號) 乘冪 16^4

注意

加號可以作為「二元運算子」和「一元運算子」使用。 二元運算子需要運算子兩邊都有數字才能相加。 當在二元運算子兩邊使用 DAX 公式中的值時,DAX 會嘗試將這些值轉換成數值資料類型 (若其尚非數字)。 相反地,一元運算子則適用於任何類型的引數。 加號不會影響類型或值,因此可忽略,;減號運算子則會在套用至數值時建立負數值。

比較運算子

您可以使用下列運算子比較兩個值。 使用這些運算子比較兩個值時,結果會是邏輯值,亦即 TRUE 或 FALSE。

比較運算子 意義 範例
= 等於 [Region] = "USA"
== 嚴格等於 [Region] == "USA"
> 大於 [Sales Date] > "Jan 2009"
< 小於 [Sales Date] < "Jan 1 2009"
>= 大於或等於 [Amount] >= 20000
<= 小於或等於 [Amount] <= 100
<> 不等於 [Region] <> "USA"

== 以外的所有比較運算子都會將「空白」處理為數字 0、空字串 ""、DATE(1899, 12, 30) 或 FALSE。 因此,當 [Column] 的值為 0 或空白時,[Column] = 0 即為 true。 但只有當 [Column] 為 0 時,[Column] == 0 才為 true。

文字串連運算子

使用 ampersand (&) 聯結或串連兩個或多個文字字串,以產生單一文字片段。

文字運算子 意義 範例
& (ampersand) 連接或串連兩個值,以產生一個連續的文字值 [Region] & “, ” & [City]

邏輯運算子

使用邏輯運算子 (&) 和 (||) 結合表達式來產生單一結果。

文字運算子 意義 範例
&& (雙和) 在都有布林值結果的兩個運算式之間建立 AND 條件。 只要兩個運算式都傳回 TRUE,運算式的組合也會傳回 TRUE;否則這個組合會傳回 FALSE。 ([Region] = “France”) && ([BikeBuyer] = “yes”))
|| (兩個豎直線符號) 在兩個邏輯運算式之間建立 OR 條件。 如果任一個運算式傳回 TRUE,結果就是 TRUE;只有在兩個運算式都是 FALSE 時,結果才是 FALSE。 (([Region] = "France") || ([BikeBuyer] = "yes"))
IN 在與資料表比較的每個資料列之間建立邏輯 OR 條件。 注意:資料表建構函式語法使用大括弧。 'Product'[Color] IN { "Red", "Blue", "Black" }

運算子和優先順序

在某些情況下,執行計算的順序會影響傳回值;因此,請務必了解決定順序的方式,以及如何變更順序以取得想要的結果。

計算順序

運算式會依特定的順序求解運算子和值。 所有運算式都使用等號 (=) 開頭。 等號表示後面的字元會構成運算式。

等號後面是要計算的項目 (運算元),以計算運算子隔開。 運算式一律從左讀至右,但項目的分組順序在某種程序上以括弧控制。

運算子優先順序

如果您在單一公式中組合數個運算子,則會根據下表來排序運算。 如果運算子的優先順序相同,則由左至右排定先後。 例如,如果運算式同時包含乘法和除法運算子,則依其在運算式中的出現順序,從左至右先後求解。

運算子 描述
^ 乘冪
符號 (如 –1)
* 和 / 乘法和除法
+ 和 – 加法和減法
& 連接兩個文字字串 (串連)
=,==,<,>,<=,>=,<>,IN 比較
NOT NOT (一元運算子)

使用括弧來控制計算順序

若要變更求解的順序,您應該使用括弧來括住必須先計算的該部分公式。 例如,因為乘法先於加法,所以下列公式會求得 11。 該公式先計算 2 乘以 3,再於結果中加上 5。

=5+2*3  

相反地,如果使用括弧來變更語法,順序就會改變,所以 5 和 2 先相加,再將結果乘以 3 求得 21。

=(5+2)*3  

在下列範例中,因為括弧括住前半部的公式,所以強制計算先求解運算式 (3 + 0.25),再將結果除以運算式 (3 - 0.25)) 的結果。

=(3 + 0.25)/(3 - 0.25)  

在下列範例中,根據四則運算的優先順序規則,先處理乘冪運算子,後處理加減運算子。 此運算式的結果為 -4。

=-2^2  

為確保先使用加減運算子處理數值,您可以使用括弧控制運算子,如下例所示。 此運算式的結果為 4。

= (-2)^2  

相容性

DAX 可輕鬆處理及比較各種資料類型,與 Microsoft Excel 極其類似。 不過,基礎的計算引擎是以 SQL Server Analysis Services 為基礎,再加上關聯式資料存放區的其他進階功能,包括更豐富的日期和時間類型支援。 因此,在某些情況下,計算結果或函式行為可能與 Excel 不同。 此外,DAX 支援的資料類型比 Excel 多。 本節會描述主要差異。

強制轉換運算元的資料類型

一般而言,任何運算子左右兩側的兩個運算元都應該是相同資料類型。 但如果資料類型不同,則 DAX 會將它們轉換成共同的資料類型,以在某些情況下套用運算子:

  1. 兩個運算元會同時轉換成可能性最大的共同資料類型。
  2. 可能的話,會套用運算子。

例如,假設您想要合併兩個數字。 一個數字來自公式,例如 =[Price] * .20,其結果可能包含許多小數位數。 另一個數字則是提供為字串值的整數。

在此情況下,DAX 會使用可以儲存兩種數字的最大數值格式,將兩個數字轉換為數值格式的實數。 然後,DAX 將會套用乘法。

視資料類型的組合而定,類型強制型轉可能不適用於比較作業。 如需 DAX 支援的資料類型完整清單,請參閱表格式模型中支援的資料類型Power BI Desktop 中的資料類型

整數、實數、貨幣、日期/時間和空白皆視為用於比較的數值。 執行比較時,空白的求解為零。 比較作業支援下列資料類型組合。

左側的資料類型 右側的資料類型
數值 數值
Boolean Boolean
String String

其他的混合資料類型比較會傳回錯誤。 例如,公式 ="1" > 0 會傳回錯誤,其指出DAX 比較作業不支援值類型 Text 和值類型 Integer 的比較

DAX 中使用的資料類型 Excel 中使用的資料類型
數字 (I8、R8) 數字 (R8)
String String
Boolean 布林值
DateTime 變數
貨幣 貨幣

優先順序的差異

DAX 公式的運算優先順序基本上與 Microsoft Excel 所使用順序相同,但不支援某些 Excel 運算子,例如百分比。 也不支援範圍。

因此,每當從 Excel 複製並貼上公式時,請務必仔細檢查公式,因為公式中的某些運算子或項目可能無效。 只要對執行的運算順序有所疑慮,建議您使用括弧控制運算順序,並移除任何會模糊結果的歧義。

DAX 語法
DAX 參數 - 命名