DAX 運算子
數據分析表達式 (DAX) 語言會使用運算符來建立表達式來比較值、執行算術計算,或使用字串。
運算子的類型
計算運算元有四種不同類型的計算運算符:算術、比較、文字串連和邏輯。
算術運算子
執行加法、減法或乘法等基本數學運算:合併數位;併產生數值結果,請使用下列算術運算符。
算術運算子 | 意義 | 範例 |
---|---|---|
+ (加號) |
加法 | 3+3 |
- (減號) |
減法或符號 | 3-1-1 |
* (星號) |
乘法 | 3*3 |
/ (正斜線) |
部門 | 3/3 |
^ (插入號) |
乘冪 | 16^4 |
注意
加號可以同時做為 二元運算子 和 一元運算子。 二元運算子需要運算子兩側的數位,並執行加法。 當您在二元運算符兩端的 DAX 公式中使用值時,如果值還不是數位,DAX 嘗試將值轉換成數值數據類型。 相反地,一元運算子則適用於任何類型的引數。 加號不會影響類型或值,而且只會忽略,而減號運算符會在套用至數值時建立負值。
比較運算子
您可以使用下列運算子比較兩個值。 使用這些運算子比較兩個值時,結果會是邏輯值,TRUE
或 FALSE
。
比較運算子 | 意義 | 範例 |
---|---|---|
= |
等於 | [Region] = "USA" |
== |
嚴格等於 | [Region] == "USA" |
> |
大於 | [銷售日期] > “Jan 2009” |
< |
小於 | [銷售日期] < “Jan 1 2009” |
>= |
大於或等於 | [Amount] >= 20000 |
<= |
小於或等於 | [Amount] <= 100 |
<> |
不等於 | [Region] <> "USA" |
除了 == 以外的所有比較運算符會將 BLANK 視為等於數位 0、空字串 “”、DATE(1899、12、30), 或 FALSE
。 因此,當 [Column] 的值是 0 或 BLANK時,[Column] = 0 會是 true。 相反地,只有當 [Column] 的值是 0 時,[Column] == 0 才為 true。
文字串連運算子
使用 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 會將它們轉換成通用數據類型,以在某些情況下套用 運算符:
- 兩個運算元會同時轉換成可能性最大的共同資料類型。
- 運算符將在可能的情況下被套用。
例如,假設您想要合併兩個數字。 一個數字是由公式得出,例如 =[Price] * .20
,其結果可能包含許多小數位。 另一個數位是已提供為字串值的整數。
在此情況下,DAX 會使用可儲存這兩種數位的最大數值格式,將這兩個數字轉換成數值格式的實數。 然後,DAX 會套用乘法。
根據數據類型組合而定,可能不會針對比較作業進行型別轉換。 如需
整數、實數、貨幣、日期/時間和空白會被視為數值以供比較之用。 執行比較時,空值評估為零。 比較作業支援下列資料類型組合。
左側數據類型 | 右側數據類型 |
---|---|
數值 | 數值 |
Boolean | Boolean |
String | String |
其他混合數據類型比較會產生錯誤。 例如,例如 =“1” > 0 的公式會傳回錯誤,指出 DAX 比較作業不支持比較 Text 類型的值與整數類型的值。
DAX 中使用的數據類型 | Excel 中使用的資料類型 |
---|---|
數字 (I8、R8) | 數字 (R8) |
String | String |
Boolean | Boolean |
DateTime | 變數 |
貨幣 | 貨幣 |
優先順序的差異
DAX 公式中的作業優先順序基本上與 Microsoft Excel 所使用的優先順序相同,但不支援某些 Excel 運算子,例如百分比。 此外,不支援範圍設定。
因此,每當從 Excel 複製和貼上公式時,請務必仔細檢閱公式,因為公式中的某些運算符或元素可能無效。 當對執行作業的順序有任何疑慮時,建議您使用括號來控制作業順序,並移除結果的任何模棱兩可。