共用方式為


DAX 語法

本文說明 and 語法需求,以適用於 DAX 公式表達語言。

語法需求

DAX 公式一律以相等 sign 開頭(=)。 在 等於 sign之後,您可以提供任何評估為純量的表達式,or 可轉換成純量的表達式。 其中包括下列各項:

  • 使用純量運算子的表示式 or(純量常數+,-,*,/,>=,...,&&, ...

  • 表 or 欄位的參考。 DAX 語言一律使用資料表 and 欄作為函式的輸入,從不使用陣列 or 任意組 values。

  • 運算子、常數、andvalues 做為表達式的一部分提供。

  • 函式的結果 and 其必要自變數。 某些 DAX 函式會傳回數據表,而不是純量,and 必須包裝在評估數據表的函式中,and 傳回純量;除非資料表是單一資料行、單一數據列資料表,否則它會視為純量 value。

    大部分的 DAX 函式都需要至少 or 個以上的參數,其中可包括資料表、資料欄、運算式 andvalues。 不過,某些函式,例如 PI,not 需要任何自變數,但一律需要括號來表示 null 自變數。 例如,您必須一律輸入 PI(), notPI。 您也可以在其他函式內巢狀處理函式。

  • 運算式。 表達式可以包含下列任何 orall:運算子、常數、or 數據行的參考。

例如,以下是 all 有效的公式。

公式 結果
= 3 3
= "Sales" Sales
= 'Sales'[Amount] If 您在 Sales 表中使用此公式,將取得當前行的 Sales 表中 Amount 欄的 value。
= (0.03 *[Amount])

=0.03 * [Amount]
目前數據表之 Amount 數據行中 value 的 3%。

雖然此公式可以用來 calculate 百分比,但是除非您在表格中套用格式設定,否則結果 not 顯示為百分比。
= PI() 常數 pi的 value。

公式的行為會根據公式的使用方式而有所不同。 您必須一律了解內容 and 公式中所使用的數據如何 related 其他可能用於計算的數據。

命名需求

數據模型通常會 contains 多個數據表。 數據表一起 and 其數據行組成儲存在記憶體內部分析引擎 (VertiPaq) 中的資料庫。 在該資料庫中,all 數據表必須具有唯一的名稱。 資料行名稱在每份資料表中也必須是唯一的。 All 物件名稱 不區分大小寫;例如,名稱 SALESand和 Sales 將代表相同的表格。

您加入至現有數據模型的每個資料行 andmeasure 都必須屬於特定數據表。 當您在資料表中建立匯出數據行時,or 明確指定 measureand 指定應儲存 measure 定義之數據表名稱時,您可以隱含指定 contains 數據行的數據表。

當您將資料表 or 欄用作函數的輸入時,通常必須使用 來限定欄名稱。 資料行的「完整」名稱是資料表名稱,後面加上以方括弧括住的資料行名稱:例如,'U.S.Sales'[Products]。 當您參考下列內容中的資料行時,一律需要完整名稱:

  • 作為函式的參數,VALUES

  • 作為函式的參數,ALLorALLEXCEPT

  • 在函式的 filter 自變數中,CALCULATEorCALCULATETABLE

  • 作為函式的參數,RELATEDTABLE

  • 作為任何 time 智能函數的自變數

「不完整的」資料行名稱是只以方括弧括住的資料行名稱,例如 [Sales Amount]。 例如,當您從當前數據表的相同行中參考純量 value 時,您可以使用非限定欄名。

If 資料表的名稱 contains 空格、保留關鍵詞、or 不允許的字元,您必須以單引號括住數據表名稱。 不論您的地區設定是否支援字元集 ornot,您也必須將數據表名稱括在引號 ifcontains ANSI 英數位 range元以外的任何字元。 例如,if 開啟一個活頁簿,contains 以斯拉夫字元撰寫的數據表名稱,例如 'Таблица',數據表名稱必須以引號括住,even 雖然 not 它確實包含空格。

注意

為輕鬆地輸入資料行的完整名稱,請使用公式編輯器中的 [自動完成] 功能。

資料表

  • 只要資料行來自目前資料表以外的其他資料表,就一定要有資料表名稱。 資料表名稱在資料庫內必須是唯一的。

  • 數據表名稱必須以單引號括住,if 它們包含空格,其他特殊字元 or 任何非英文英數位元。

量值

  • Measure 名稱必須一律以括弧括住。

  • Measure 名稱可以包含空格。

  • 每個 measure 名稱在模型中都必須是唯一的。 因此,參考現有 measure時,數據表名稱在 measure 名稱前面是選擇性的。 不過,當您建立 measure 時,務必一律指定一個資料表來儲存 measure 的定義。

資料行

資料行名稱在資料表內容中必須是唯一的,但多份資料表可有同名的資料行 (以資料表名稱去除混淆)。

一般而言,您可以參考數據行,而不參考其所屬的基表,except 當可能有名稱衝突時,使用需要數據行名稱的完整特定函式來解決 or。

保留關鍵字

If 如果您使用的資料表名稱與 Analysis Services 的保留關鍵字相同,就會引發 error,and 您必須重新命名該資料表。 不過,您可以在物件名稱中使用關鍵詞,if 對象名稱會以方括號(適用於數據行)括住 or 引號(適用於數據表)。

注意

視應用程式而定,引號可由數個不同的字元表示。 If 貼上外部檔 or 網頁的公式,請務必檢查用於開啟 and 結尾引號的字元 ASCII 代碼,以確保它們相同。 否則 DAX 可能無法將符號辨識為引號,使參考無效。

特殊字元

下列字元 and 字元類型 not 是在資料表、資料行、量值 or 的名稱中有效:

  • 前置 or 尾端空格;除非空格以名稱分隔符、方括弧、or 單引弧括住。

  • 控制字元

  • 下列字元在物件名稱中是 not 有效的:

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

物件名稱範例

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

物件類型 範例 註解
資料表名稱 Sales If 如果數據表名稱 not 含有空格或 or 其他特殊字元,則名稱 not 必須以引號括住。
資料表名稱 'Canada Sales' If 名稱 contains 空格、索引標籤 or 其他特殊字元,以單引號括住名稱。
完整的資料行名稱 Sales[Amount] 數據表名稱在數據行名稱前面,and 數據行名稱會以括弧括住。
完整 measure 名稱 Sales[Profit] 數據表名稱在 measure 名稱前面,andmeasure 名稱會以括弧括住。 某些內容一律需要完整名稱。
不完整的資料行名稱 [Amount] 不完整名稱是只以方括弧括住的資料行名稱。 您可以在相同資料表中的計算欄位公式中使用未限定名稱,或在於相同資料表上進行掃描的聚合函式 or 中使用。
包含空格的資料表完整資料行 'Canada Sales'[Qty] 數據表名稱 contains 含有空格,因此必須以單引號括住。

其他限制

每個函式所需的語法,and 它可以執行的作業類型,會根據函式而有所不同。 不過,一般而言,下列規則適用於 all 公式 and 表示式:

  • DAX 公式 and 表示式無法修改 or 在數據表中插入個別 values。

  • 您無法使用 DAX建立計算列。 您只能建立計算欄位 and 量值。

  • 在定義計算結果欄時,您可以將函式巢狀處理到任何層級。

  • DAX 有數個傳回數據表的函式。 一般而言,您可以使用這些函式傳回的 values 做為其他函式的輸入,而其他函式需要數據表做為輸入。

DAX 運算子 and 常數

下表列出 DAX支援的運算子。 如需個別運算符語法的詳細資訊,請參閱 運算符。

運算子類型 and 符號的使用
括弧運算子 () 優先順序 and 引數分組
算術運算子 +(加法)

- (減法)

*(乘法)

/(部門)

^(指數運算)
比較運算子 = (等於)

> (大於)

< (小於)

>= 大於或等於 or

<= (小於 or 等於)

<> (not 等於)
文字串連運算子 & (串連)
邏輯運算子 && (and)

|| (or)

資料類型

您 not 必須轉換 convert,or 否則請指定您在 DAX 公式中使用的數據行 orvalue 資料類型。 當您在 DAX 公式中使用數據時,DAX 會自動識別您輸入之 valuesand 參考數據行中的數據類型,and 視需要執行隱含轉換來完成指定的作業。

例如,if 當您嘗試將數字添加至 datevalue,引擎會在函式的上下文中解釋此操作,andconvert 數字轉換為通用數據類型,and 然後在預期的 format中呈現結果,date。

不過,在能成功轉換values時還是有一些限制。 If value or 資料行具有與目前作業不相容的數據類型,DAX 會傳回 error。 此外,DAXnot 會提供函式,讓您明確地變更、convert,or 轉換已匯入數據模型之現有數據的數據類型。

重要

DAX not 支援使用變體數據類型。 因此,當您將 or 匯入數據模型時,預期每欄中的數據通常是一致的數據類型。

某些函式會傳回純量 values,包括字串,而其他函式則使用數位,兩個整數 and 實數,or 日期 and 次。 每個函式所需的資料類型會在 區段中描述,DAX 函式

您可以使用包含多個資料行的數據表,and 多個數據列作為函式的自變數。 某些函式也會傳回儲存在記憶體 and 中的數據表,可作為其他函式的自變數。

Date and time

DAX 會使用 Microsoft SQL Server 所使用的 datetime 數據類型來儲存 dateandtimevalues。 Datetime format 使用浮點數,其中 Datevalues 對應到整數部分,代表 1899 年 12 月 30 日以來的天數。 Time values 對應至 datevalue 的小數部分,其中小時、分鐘、and 秒是由 day的小數點來表示。 DAX date and time 函式會將 convert 參數隱含地轉換為 datetime 數據類型。

注意

DAX 支援的 exact 日期時間 value 的上限為 9999 年 12 月 31 日 00:00:00。

Date and time 常值

從 2021 年 8 月版本的 Power BI Desktop 開始,DAXdateand datetime values 可以在 formatdt"YYYY-MM-DD"dt"YYYY-MM-DDThh:mm:ss"ordt"YYYY-MM-DD hh:mm:ss"中指定為常值。 當指定為常值時,表達式 not 中必須使用 DATETIMEDATEVALUETIMEVALUE 函式。

例如,下列表達式會使用 DATEandTIME 函式在 OrderDate 上 filter:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

相同的 filter 表示式可以被指定為字面值:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

注意

DAX date and datetime 類型的常值 format 在 all 版本的 Power BI Desktop、Analysis Services 和 Excel andPower Pivot 中受到 not 支援。 新的 and 更新 DAX 功能 first 通常會在 Power BI Desktop and 中引進,稍後包含在 Excel 的 Analysis Services andPower Pivot 中。