DAX 運算子
數據分析表達式 (DAX) 語言會使用運算符來建立比較 values、執行算術計算的表達式,or 使用字串。
運算子的類型
計算運算符有四種不同類型的計算運算符:算術、比較、文字串連、and 邏輯。
算術運算子
執行加法、減法、or 乘法等基本數學運算:合併數位;and 產生數值結果,請使用下列算術運算符。
算術運算子 | 意義 | 範例 |
---|---|---|
+ (加 sign) |
加法 | 3+3 |
- (減 sign) |
減法 orsign | 3-1-1 |
* (星號) |
乘法 | 3*3 |
/ (正斜線) |
部門 | 3/3 |
^ (插入號) |
乘冪 | 16^4 |
注意
加號 sign 可以作為 二元運算子and 以及 一元運算子。 二元運算子需要在運算子兩側使用數字,and 執行加法。 當您在二元運算符兩端的 DAX 公式中使用 values 時,DAX 嘗試將 values 轉換成數值數據類型,if 它們已經 not 數位。 相反地,一元運算子則適用於任何類型的引數。 加號會 not 影響類型 orvalueand,但會被忽略,而減號運算符則會建立負 value,if 套用至數值 value。
比較運算子
您可以透過以下運算符比較兩個 values。 使用這些運算子比較兩個 values 時,結果是邏輯值 value,即 TRUE
orFALSE
。
比較運算子 | 意義 | 範例 |
---|---|---|
= |
等於 | [Region] = "USA" |
== |
嚴格等於 | [Region] == "USA" |
> |
大於 | [Sales Date] > “Jan 2009” |
< |
小於 | [Sales Date] < 「2009年1月1日」 |
>= |
大於 or 等於 | [Amount] >= 20000 |
<= |
小於或等於 or | [Amount] <= 100 |
<> |
Not 等於 | [Region] <> "USA" |
All 比較運算符 except == 將 BLANK 視為等於數位 0,空字串 “”, DATE(1899, 12, 30),orFALSE
。 因此,當 [Column] 的 value 為 0 orBLANK時,[Column] = 0 會是 true。 相反地,只有當 [Column] 的 value 為 0 時,[Column] == 0 才會 true。
文字串連運算子
使用 ampersand (&
) 聯結、orconcatenate、兩個 or 多個文字字串,以產生單一文字片段。
文字運算子 | 意義 | 範例 |
---|---|---|
& (和號) |
連接,or 串連,兩個 values 產生一個連續文字 value | [Region] & ", " & [City] |
邏輯運算子
使用邏輯運算子 (&&
) and (||
) 結合表達式來產生單一結果。
文字運算子 | 意義 | 範例 |
---|---|---|
&& (雙和號) |
在兩個表達式之間建立一個 AND 條件,每個表達式都有布爾值結果。
If 兩個表達式都會傳回 TRUE ,表達式的組合也會傳回 TRUE ;否則,組合會傳回 FALSE 。 |
([Region] = "France") && ([BikeBuyer] = "yes")) |
|| (雙管符號) |
建立兩個邏輯表達式之間的 OR 條件。
If 任一表達式傳回 TRUE ,則結果為 TRUE ;只有當這兩個表達式都為 FALSE 時,結果才是 FALSE 。 |
(([Region] = "France") || ([BikeBuyer] = "yes")) |
IN |
建立與數據表比較之每個數據列之間的邏輯 OR 條件。 注意:資料表建構函式語法使用大括弧。 | 'Product'[Color] IN { "Red", "Blue", "Black" } |
運算子的 and 優先順序
在某些情況下,執行計算的順序可能會影響傳回 value;因此,請務必瞭解如何決定順序 and 如何變更順序以取得所需的結果。
計算順序
表達式會依特定順序評估運算子 andvalues。 All 表達式一律以相等 sign (=) 開頭。 相等 sign 表示後續字元構成表達式。
在等號 sign 之後,是要計算的元素(操作數),這些元素會以計算運算符分隔。 表達式一律會從 left 讀取到 right,但是可以使用括弧來控制元素分組的順序。
運算子優先順序
If 您在單一公式中結合數個運算符,作業會根據下表排序。 If 運算符的優先順序相等 value,它們會從 left 排列到 right。 例如,if 表示式 contains 乘法 and 除運算符,它們會依照表達式中出現的順序進行評估,從 left 到 right。
運算子 | 說明 |
---|---|
^ |
乘冪 |
– |
Sign (例如 –1) |
* and / |
乘法 and 除法 |
+ and – |
加法 and 減法 |
& |
連接兩個文字字串 (串連) |
=,==,<,>,<=,>=,<>,IN |
比較 |
NOT |
NOT (一元運算子) |
使用括弧來控制計算順序
若要變更評估順序,您應該以括弧括住必須計算的公式部分,first。 例如,因為乘法先於加法,所以下列公式會求得 11。 公式會將 2 乘以 3,and 然後將 5 加至結果。
=5+2*3
相反地,if 您使用括弧來變更語法,順序會變更,以便將 5 and 2 加在一起,and 結果乘以 3 以產生 21。
=(5+2)*3
在下列範例中,公式 first 部分周圍的括弧會強制計算 evaluate 表示式 (3 + 0.25)
firstand 然後 divide 表示式的結果,(3 - 0.25)
。
=(3 + 0.25)/(3 - 0.25)
在下列範例中,指數運算符會根據運算符的優先順序規則套用 first,and 然後套用 sign 運算符。 此運算式的結果為 -4。
=-2^2
若要確保 sign 運算子套用至數值 valuefirst,您可以使用括號來控制運算符,如下列範例所示。 此運算式的結果為 4。
= (-2)^2
相容性
DAX 容易地處理和比較 and 中的各種數據類型,就像 Microsoft Excel 一樣。 不過,基礎計算引擎是以 SQL Server Analysis Services 為基礎,and 提供關係型數據存放區的其他進階功能,包括更豐富的 dateandtime 類型支援。 因此,在某些情況下,計算結果 or 函式的行為可能會 not 與 Excel 中相同。 此外,DAX 支援比 Excel 更多的數據類型。 本節會描述主要差異。
強制轉換運算元的資料類型
一般而言,任何運算符 leftandright 端的兩個操作數應該是相同的數據類型。 不過,if 數據類型不同,DAX 會將其 convert 為通用數據類型,以在某些情況下套用 運算符:
- 兩個運算元會同時轉換成可能性最大的共同資料類型。
- 運算符可能套用於 if。
例如,假設您想要合併兩個數字。 公式中的一個數字結果,例如 =[Price] * .20
,and,結果可能包含許多小數位。 另一個數位是已以字串 value提供的整數。
在此情況下,DAX 會將兩個數字 convert 轉換為數值類型 format中的實數,並使用可儲存這兩類數字的最大數值 format。 然後,DAX 會套用乘法。
視數據類型組合而定,可能會 not 套用類型轉換進行比較作業。 如需
整數、實數、Currency、Date/timeandBlank 會被視為數值以供比較之用。 執行比較時,Blank 評估為零。 比較作業支援下列資料類型組合。
Left 端數據類型 | Right 端數據類型 |
---|---|
數值 | 數值 |
Boolean | Boolean |
String | String |
其他混合資料類型比較會傳回 error。 例如,例如 =“1” > 0 的公式會傳回 error,指出 DAX 比較作業 not 支持比較 Text 類型的 values 與整數類型類型的 values。
DAX 中使用的數據類型 | Excel 中使用的資料類型 |
---|---|
數字 (I8、R8) | 數字 (R8) |
String | String |
Boolean | Boolean |
DateTime | 變數 |
Currency | Currency |
優先順序的差異
DAX 公式中的作業優先順序基本上與 Microsoft Excel 所使用的相同,但支援某些 Excel not 運算符,例如百分比。 此外,範圍 not 也受到支持。
因此,每當從 Excel 複製 and 貼上公式時,請務必仔細檢閱公式,因為公式中的某些運算子 or 元素可能 not 有效。 當對執行作業的順序有任何疑慮時,建議您使用括號來控制作業順序,and 移除結果的任何模棱兩可。