PowerPivot 的 DAX 語法規格

Data Analysis Expressions (DAX) 是函數、運算子與常數的程式庫,可將函數、運算子與常數結合以在 PowerPivot for Excel 中建立公式和運算式。本節提供關於 DAX 語言之語法和需求的詳細資料。 

如需您可以建立的公式種類,以及如何使用運算式來篩選資料表並且變更內容的範例,請參閱<Data Analysis Expressions (DAX) 概觀>。本主題包含下列章節:

語法需求

命名需求

函數

運算子和常數

資料類型

語法需求

DAX 公式與您在 Excel 資料表中輸入的公式非常類似,但是有一些主要的差異。

  • 在 Microsoft Excel 中,您可以參考個別的儲存格或陣列。在 PowerPivot 中,則僅能參考完整的資料表或資料行。不過,如果您只需要處理資料行的一部分,或資料行中的唯一值,您可以使用篩選資料行或傳回唯一值的 DAX 函數來達到類似的行為。

  • DAX 公式與 Microsoft Excel 兩者支援的資料類型並非完全相同。一般而言,DAX 提供的資料類型比 Excel 提供的資料類型還多,而且 DAX 會在匯入時,針對某些資料執行隱含的類型轉換。如需詳細資訊,請參閱<Data Analysis Expressions (DAX) 概觀>。

DAX 公式一律以等號 (=) 開頭。等號之後,您可以提供計算結果為純量的任何運算式,或是可以轉換為純量的運算式。包括:

  • 純量常數或使用純量運算子 (+、-、*、/、>=、...、&& 等) 的運算式

  • 資料行或資料表的參考。DAX 語言一律使用資料表和資料行做為函數的輸入,絕不會使用陣列或任意一組值。

  • 當做運算式一部分提供的運算子、常數和值。

  • 函數及其必要引數的結果。某些 DAX 函數會傳回資料表而非純量,因此必須以評估資料表並傳回純量的函數包裝;此資料表若不是具有單一資料行和單一資料列的資料表,則視為純量值處理。

    大部分的 PowerPivot 函數都需要一個或多個引數,這可以包含資料表、資料行、運算式和值。不過,PI 之類的某些函數則不需要任何引數,但是永遠需要使用括號來表示 null 引數。例如,您必須一律使用類型 PI(),而非 PI。您也可以將函數放在其他函數內,成為巢狀結構。

  • 運算式。運算式可以包含下列任一項或所有項目:運算子、常數或資料行的參考。

例如,下列全部都是有效的公式。

公式

結果

=3

3

="Sales"

銷售額

='Sales'[Amount]

如果您在 Sales 資料表中使用此公式,將會在目前資料列的 Sales 資料表中,得到 Amount 資料行的值。

=(0.03 *[Amount])

=0.03 * [Amount]

目前資料表內 Amount 資料行中的值的百分之三。

此公式可以用於計算百分比,但是結果並不會顯示為百分比,除非您在資料表中套用格式設定。

=PI()

常數 PI 的值。

[!附註]

公式的行為會視這些公式是用於導出資料行還是樞紐分析表中的量值而有所不同。您必須永遠注意內容以及您在公式中使用的資料如何與計算中可能使用的其他資料相關。如需詳細資訊,請參閱<DAX 公式中的內容>。

命名需求

PowerPivot 視窗可以包含多個資料表,每個資料表各有自己的索引標籤。資料表及其資料行共同組成資料庫,儲存在 PowerPivot VertiPaq 引擎內。在該資料庫中,所有資料表都必須擁有唯一的名稱。資料行的名稱在每個資料表中也必須是唯一的。所有物件名稱都不區分大小寫;例如,SALES 和 Sales 代表相同的資料表。

您加入至現有 PowerPivot 資料庫的每個資料行和量值都必須屬於特定的資料表。指定包含資料行的資料表有兩種情形:在資料表中建立導出資料行時,以隱含方式指定,或者在建立量值並指定應該儲存量值定義的資料表名稱時,明確地指定。

當您使用資料表或資料行做為函數的輸入時,一般必須「限定」(Qualify) 資料行名稱。資料行的「完整」(Fully Qualified) 名稱是資料表名稱後面加上以方括號括住的資料行名稱:例如,'U.S. Sales'[Products]。當您在下列內容中參考資料行時,一律都需要完整名稱:

  • 做為 VALUES 函數的引數

  • 做為 ALL 或 ALLEXCEPT 函數的引數

  • 用於 CALCULATE 或 CALCULATETABLE 函數的篩選引數中

  • 做為 RELATEDTABLE 函數的引數

  • 做為任何時間智慧函數的引數

「資格不符的」(Unqualified) 資料行名稱是只用方括號括住之資料行的名稱,例如 [Sales Amount]。例如,當您從目前資料表的相同資料列參考純量值時,就可以使用資格不符的資料行名稱。

如果資料表的名稱包含空格、保留的關鍵字或不允許的字元,您必須使用單引號括住資料表名稱。如果名稱包含 ANSI 英數字元範圍之外的任何字元,不論您的地區設定是否支援該字元集,您也必須將資料表名稱括在引號中。例如,如果您開啟包含以斯拉夫文字元撰寫之資料表名稱 (如 Таблица) 的活頁簿,則即使其中不包含空格,資料表名稱也必須以引號括住。

[!附註]

為了讓您更容易輸入資料行的完整名稱,建議您在用戶端使用「公式自動完成」功能。

資料表

  • 每當資料行來自不同於目前資料表的資料表時,就需要資料表名稱。資料表名稱在資料庫內必須是唯一的。

  • 如果資料表名稱包含空格、其他特殊字元或任何非英語系文數字元,則必須使用單引號括住。

量值

  • 量值名稱必須一律使用方括號括住。

  • 量值名稱可以包含空格。

  • 每個量值名稱在資料庫中都必須是唯一的。因此,參考現有的量值時,量值名稱前面的資料表名稱是選擇性的。不過,當您建立量值時,則必須一定指定將要儲存量值定義的資料表。

資料行

資料行名稱在資料表的內容中必須是唯一的;不過,多個資料表可以有相同名稱的資料行 (以資料表名稱做區別)。

一般而言,在參考資料行時可以不必參考其所屬的基底資料表,除非可能存在待解決的名稱衝突,或所使用的特定函數需要資料行的完整名稱。

保留關鍵字

如果您用於資料表的名稱與 Analysis Services 保留的關鍵字相同,就會引發錯誤,而且您必須為該資料表重新命名。不過,如果物件名稱使用方括號 (針對資料行) 或引號 (針對資料表) 括住,您就可以在物件名稱中使用關鍵字。

[!附註]

請注意,視應用程式而定,可以用多個不同字元來代表引號。如果您從外部文件或網頁貼上公式,請務必檢查用來做為左右引號的 ASCII 字元碼,以確保是相同的字元。否則 DAX 可能無法辨識該符號為引號,而使得參考無效。

特殊字元

在資料表、資料行或量值的名稱中,下列字元和字元類型無效:

  • 開頭或尾端空格;除非以名稱分隔符號、方括號或單引號括住空格。

  • 控制字元

  • 在 PowerPivot 物件的名稱中為無效的下列字元:

    .,;':/\*|?&%$!+=()[]{}<>

物件名稱的範例

下表顯示一些物件名稱的範例:

物件類型

範例

註解

資料表名稱

Sales

如果資料表名稱未包含空格或其他特殊字元,便不需要以引號括住名稱。

資料表名稱

‘Canada Sales’

如果名稱包含空格、Tab 字元或其他特殊字元,請以單引號括住名稱。

完整資料行名稱

Sales[Amount]

資料表名稱後面接著資料行名稱,同時以方括號括住資料行名稱。

完整量值名稱

Sales[Profit]

資料表名稱後面接著量值名稱,同時以方括號括住量值名稱。在某些內容中,一律都需要完整名稱。

資格不符的資料行名稱

[Amount]

由於只有資料行名稱並以方括號括住,此為資格不符的名稱。允許使用資格不符的名稱之內容包括:相同資料表內位於導出資料行中的公式,或是掃描一整個相同資料表的彙總函式。

資料表中含空格的完整資料行

‘Canada Sales’[Qty]

資料表名稱包含空格,因而必須以單引號括住。

[!附註]

為了讓您更容易輸入資料行的完整名稱,建議您在建置公式時使用「自動完成」功能。如需詳細資訊,請參閱<建立計算的公式>。

其他限制

每個函數所需要的語法及其可以執行的運算類型,視函數而定會有極大的差異。不過,一般而言,下列規則適用於所有公式和運算式:

  • DAX 公式和運算式無法在資料表中修改或插入個別的值。

  • 您無法使用 DAX 來建立導出資料列。您可以只建立計算結果欄及量值。

  • 定義導出資料行時,您可以在任何層級巢狀函數。

  • DAX 擁有數個會傳回資料表的函數。您通常會使用這些函數所傳回的值當做其他函數的輸入,這需要使用一個資料表做為輸入。

DAX 運算子和常數

下表列出 DAX 支援的運算子。一般而言,除了一些不重要的例外狀況,DAX 中的運算子與 Microsoft Excel 中的運算子以相同的方式運作。如需有關個別運算子語法的詳細資訊,請參閱<PowerPivot 的 DAX 運算子參考>。

運算子類型

符號和用法

括號運算子

引數的 () 優先順序和群組

算術運算子

+ (加)

- (減/符號)

* (乘)

/ (除)

^ (乘冪)

比較運算子

= (等於)

> (大於)

< (小於)

>= (大於或等於)

<= (小於或等於)

<> (不等於)

文字串連運算子

& (串連)

邏輯運算子

&& (及)

|| (或)

DAX 的資料類型

您不需要轉型、轉換或指定您在 DAX 公式中使用之資料行或值的資料類型。當您在 DAX 公式中使用資料時,DAX 會自動識別參考資料行中的資料類型,以及您所輸入之值的類型,並在需要時執行隱含的轉換來完成指定的作業。

例如,如果您嘗試將數字加至日期值,PowerPivot 會像 Excel 一樣在函數內容中解譯作業,並將該數字轉換為一般資料類型,然後使用預期的格式 (日期) 來呈現結果。

不過,對於可以成功轉換的值,有一些限制。如果值或資料行的資料類型與目前的作業不相容,DAX 會傳回錯誤。同時,DAX 所提供的函數不會讓您明確地變更、轉換或轉型您已匯入 PowerPivot 活頁簿之現有資料的資料類型。

重要事項重要事項

PowerPivot 不支援使用在 Excel 中所使用的變數資料類型。因此,當您載入或匯入資料時,通常會預期每個資料行中的資料都屬於一致的資料類型。

有些函數會傳回純量值 (包括字串),而有些函數則使用數字 (整數和實數) 或日期和時間。每個函數所需的資料類型詳述於<PowerPivot 的 DAX 函數參考>一節中。

資料表是 PowerPivot 中的新資料類型。您可以使用包含多個資料行與多個資料列的資料表,做為函數的引數。有些函數也會傳回資料表,這些資料表儲存在記憶體中,而且可以當做其他函數的引數使用。

如需有關不同數值和日期/時間資料類型的詳細資訊,以及如何處理 Null 和空字串的詳細資料,請參閱<PowerPivot 活頁簿中支援的資料類型>。

請參閱

概念