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。
文字串連運算子
使用連字號 (&) 聯結或串連兩個或多個文字字串,以產生單一文字片段。
文字運算子 | 意義 | 範例 |
---|---|---|
& (& 符號) | 連接或串連兩個值,以產生一個連續的文字值 | [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 會將它們轉換成共同的資料類型,以在某些情況下套用運算子:
- 兩個運算元會同時轉換成可能性最大的共同資料類型。
- 可能的話,會套用運算子。
例如,假設您想要合併兩個數字。 一個數字來自公式,例如 =[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 複製並貼上公式時,請務必仔細檢查公式,因為公式中的某些運算子或項目可能無效。 只要對執行的運算順序有所疑慮,建議您使用括弧控制運算順序,並移除任何會模糊結果的歧義。