共用方式為


DAX 運算子

數據分析表達式 (DAX) 語言會使用運算符來建立表達式來比較值、執行算術計算,或使用字串。

運算子的類型

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

算術運算子

執行加法、減法或乘法等基本數學運算:合併數位;併產生數值結果,請使用下列算術運算符。

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

注意

加號可以同時做為 二元運算子一元運算子。 二元運算子需要運算子兩側的數位,並執行加法。 當您在二元運算符兩端的 DAX 公式中使用值時,如果值還不是數位,DAX 嘗試將值轉換成數值數據類型。 相反地,一元運算子則適用於任何類型的引數。 加號不會影響類型或值,而且只會忽略,而減號運算符會在套用至數值時建立負值。

比較運算子

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

比較運算子 意義 範例
= 等於 [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 會將它們轉換成通用數據類型,以在某些情況下套用 運算符:

  1. 兩個運算元會同時轉換成可能性最大的共同資料類型。
  2. 運算符將在可能的情況下被套用。

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

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

根據數據類型組合而定,可能不會針對比較作業進行型別轉換。 如需 所支援之數據類型的完整清單,請參閱 表格式模型中支援的數據類型, 和 Power BI Desktop數據類型。

整數、實數、貨幣、日期/時間和空白會被視為數值以供比較之用。 執行比較時,空值評估為零。 比較作業支援下列資料類型組合。

左側數據類型 右側數據類型
數值 數值
Boolean Boolean
String String

其他混合數據類型比較會產生錯誤。 例如,例如 =“1” > 0 的公式會傳回錯誤,指出 DAX 比較作業不支持比較 Text 類型的值與整數類型的值

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

優先順序的差異

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

因此,每當從 Excel 複製和貼上公式時,請務必仔細檢閱公式,因為公式中的某些運算符或元素可能無效。 當對執行作業的順序有任何疑慮時,建議您使用括號來控制作業順序,並移除結果的任何模棱兩可。

DAX 語法DAX 參數命名