PowerPivot 的 DAX 運算子參考

Data Analysis Expression (DAX) 語言使用運算子所建立的運算式會比較值、執行算術運算或處理字串。 本節描述每個運算子的用法。

運算子類型

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

算術運算子

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

算術運算子

意義

範例

+ (加號)

3+3

– (減號)

減或符號

3–1–1

* (星號)

3*3

/ (斜線)

3/3

^ (插入號)

乘冪

16^4

[!附註]

加號可以同時當做「二元運算子」(Binary Operator) 和「一元運算子」(Unary Operator) 運作。 二元運算子需要運算子兩邊的數字,並執行加法。 當您在二元運算子兩邊使用 DAX 公式中的值時,如果這些值還不是數字,DAX 會嘗試將它們轉型成數值資料類型。 相反地,一元運算子可以套用至任何類型的引數。 加號不會影響類型或值,只會遭到忽略,而減號運算子會建立負值 (如果套用到數值)。

比較運算子

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

比較運算子

意義

範例

=

等於

[Region] = "USA"

>

大於

[Sales Date] > "Jan 2009"

<

小於

[Sales Date] < "Jan 1 2009"

>=

大於或等於

[Amount] >= 20000

<=

小於或等於

[Amount] <= 100

<>

不等於

[Region] <> "USA"

文字串連運算子

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

文字運算子

意義

範例

& (& 符號)

連接或串連兩個值以產生一個連續的文字值

[Region] & ", " & [City]

邏輯運算子

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

文字運算子

意義

範例

&& (兩個 & 符號)

在各有一個布林結果的兩個運算式之間建立 AND 條件。 如果兩個運算式都傳回 TRUE,運算式的組合也會傳回 TRUE;否則組合會傳回 FALSE。

([Region] = "France") && ([BikeBuyer] = "yes"))

| | (兩個管線符號)

在兩個邏輯運算式之間建立 OR 條件。 如果任一個運算式傳回 TRUE,結果就是 TRUE;只有在兩個運算式都是 FALSE 時,結果才是 FALSE。

(([Region] = "France") || ([BikeBuyer] = "yes"))

運算子和優先順序

在某些情況下,執行計算的順序可能會影響傳回值,因此,了解如何決定順序以及如何變更順序來取得想要的結果相當重要。

計算順序

運算式會以特定的順序評估運算子和值。 所有運算式開頭一律是等號 (=)。 等號表示後續的字元會構成運算式。

等號後面是要計算的元素 (運算元),這些元素會以計算運算子分隔。 運算式的讀取一律從左至右,但是元素群組的順序則可以使用括號控制成特定程度。

運算子優先順序

如果將數個運算子合併成單一公式,系統會根據下表來排列作業。 如果運算子有相同的優先順序值,它們的順序為由左至右。 例如,如果運算式同時包含乘法和除法運算子,則會由左至右依照它們出現在運算式中的順序進行計算。

運算子

說明

^

乘冪

符號 (如 –1)

* 和 /

乘法和除法

!

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 將會比較這兩個值。

相反地,Excel 會嘗試比較不同類型的值,而不會先將它們強制型轉成一般類型。 因此,對於相同的比較運算式,您可能會在 DAX 和 Excel 中看到不同的結果。

DAX 中所使用的資料類型

Excel 中所使用的資料類型

數字 (I8、R8)

布林

字串

DateTime

貨幣

數字 (R8)

布林

字串

變數

貨幣

如需有關隱含資料類型轉換的詳細資訊,請參閱<PowerPivot 活頁簿中支援的資料類型>。

優先順序的差異

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

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

請參閱

概念

PowerPivot 的 DAX 語法規格

Data Analysis Expressions (DAX) 概觀