DAX 语法规范
數據分析表達式 (DAX) 是一個由函數、運算符和常量組成的庫,可在 PowerPivot for Excel 中組合這些庫元素以生成公式和表達式。本節提供了有關 DAX 語言的語法和要求的詳細信息。?
有關可以生成的各種公式的示例,以及有關如何使用表達式篩選表和更改上下文的信息,請參閱數據分析表達式 (DAX) 入門。本主題包含以下各節:
語法要求
命名要求
函數
運算符和常量
數據類型
語法要求
DAX 公式與您在 Excel 表中鍵入的公式非常相似,但是兩者之間也有一些重要區別。
-
在 Microsoft Excel 中,可以引用單個的單元格或陣列;在 PowerPivot 中,只能引用完整的數據表或數據列。然而,如果只需要使用列的一部分,或者列中的唯一值,則可以使用能夠篩選列或返回唯一值的 DAX 函數實現類似的目的。
-
DAX 公式與 Microsoft Excel 支持的數據類型并非完全相同。一般而言,DAX 提供的數據類型比 Excel 多,在導入數據時 DAX 會對某些數據執行隱式類型轉換。有關詳細信息,請參閱?PowerPivot 工作簿中支持的數據類型。
DAX 公式始終以等號 (=) 開頭。等號之后,可以提供計算結果為標量的任何表達式或可以轉換為標量的表達式。其中包括:
-
標量常量或使用標量運算符(+、-、*、/、>=、...、&&、...)的表達式
-
對列或表的引用。DAX 語言始終將表和列用作函數的輸入,而絕不會使用值數組或任意的值集。
-
作為表達式的一部分提供的運算符、常量和值。
-
函數的結果及其所需的參數。一些 DAX 函數返回的是表而不是標量,并且必須包裝在對表執行計算并返回標量的函數內;除非該表是單列、單行的表,否則,該表將被視作標量值。
大多數 PowerPivot 函數需要一個或多個參數,這些參數可以包括表、列、表達式和值。?但是,一些函數(如 PI)不需要任何參數,不過始終需要使用括號來表示 Null 參數。例如,您始終必須鍵入 PI(),而不是 PI。還可以在其他函數中嵌套函數。
-
表達式。表達式可以包含以下任意項或所有項:運算符、常量或對列的引用。
例如,下面都是有效公式。
| 公式 | 結果 |
| =3 | 3 |
| ="Sales" | Sales |
| ='Sales'[Amount] | 如果在 Sales 表中使用此公式,您將獲取 Sales 表中當前行的 Amount 列的值。 |
| =(0.03 *[Amount]) =0.03 * [Amount] | 當前表的 Amount 列中值的 3%。 雖然此公式可用來計算百分比,但是,除非您在該表中設置格式,否則結果并不會以百分比形式顯示。 |
| =PI() | 常量 PI 的值。 |
| 根據公式的使用位置是在計算列中還是數據透視表的度量值中,公式的行為可能有所不同。必須始終注意上下文以及在公式中使用的數據如何與計算中可能使用的其他數據相關。有關詳細信息,請參閱?DAX 公式中的上下文。 |
命名要求
PowerPivot 窗口可包含多個表,每個表都在自己的選項卡上。這些表和表中的列一起構成一個存儲在 PowerPivot VertiPaq 引擎中的數據庫。該數據庫中所有表的名稱都必須唯一。列名稱在每個表中也必須唯一。?所有對象名稱都不區分大小寫;例如,SALES?和?Sales?表示同一個表。
您添加到現有 PowerPivot 數據庫中的每個列和度量值都必須屬于特定的表。在表中創建計算列時,您是在隱式指定包含該列的表;在創建度量值并指定用于存儲該度量值定義的表的名稱時,您是在顯式指定包含該度量值的表。
將表或列用作函數的輸入時,通常必須“限定”列名稱。列的“完全限定”名稱是表名,后跟放在方括號中的列名:例如 'U.S.Sales'[Products]。在您引用以下上下文中的列時,始終要求完全限定名稱:
-
作為函數 VALUES 的參數
-
作為函數 ALL 或 ALLEXCEPT 的參數
-
在函數 CALCULATE 或 CALCULATETABLE 的篩選器參數中
-
作為函數 RELATEDTABLE 的參數
-
作為任何時間智能函數的參數
“非限定”列名稱就是放在方括號中的列名稱:例如 [Sales Amount]。例如,從當前表的同一行引用標量值時,可以使用非限定列名。
如果表名包含空格、保留關鍵字或不允許使用的字符,則必須將表名放在單引號中。如果名稱包含 ANSI 字母數字字符范圍之外的任何字符,還必須將表名稱用引號引起來,而不管您的區域設置是否支持該字符集。例如,如果您打開一個工作簿,工作簿中包含用西里爾語字符編寫的表名(如“Таблица”),則該表名必須用引號引起來,即使它不包含空格。
| 為了便于輸入列的完全限定名稱,建議您使用客戶端中的公式記憶式鍵入功能。 |
表
-
只要列來自與當前表不同的表,表名就是必需的。表名在數據庫中必須唯一。
-
如果表名包含空格、其他特殊字符或者任何非英語字母數字字符,則必須將其括在單引號內。
度量值
-
度量值名稱必須始終放在方括號中。
-
度量值名稱可以包含空格。
-
每個度量值名稱在數據庫中都必須唯一。因此,在引用現有度量值時,度量值名稱前面的表名是可選的。但是,在創建度量值時,始終必須指定將存儲度量值定義的表。
列
列名在表的上下文中必須唯一;但是,多個表可以具體同名的列(只要表名明確)。
一般而言,可以不引用列屬于的基礎表就引用列,只有在可能存在要解析的名稱沖突時或者具有某些要求列名完全限定的函數時除外。
保留關鍵字
如果對表使用的名稱與 Analysis Services 保留關鍵字相同,則會產生錯誤,且您必須重命名該表。但是,如果對象名稱放在方括號中(對于列)或引號中(對于表),則可在對象名稱中使用關鍵字。
| 請注意,引號可用多個不同字符表示,具體取決于應用程序。如果您從外部文檔或 Web 頁中粘貼公式,請務必檢查用于左右引號的字符的 ASCII 代碼,以確保它們相同。否則,DAX 可能無法將這些符號識別為引號,從而將該引用視為無效。 |
特殊字符
以下字符和字符類型在表、列或度量值的名稱中無效:
-
前導或尾隨空格;除非空格被名稱分隔符(方括號或單引號)括起來。
-
控制字符
-
以下字符在 PowerPivot 對象的名稱中無效:
.,;':/\*|?&%$!+=()[]{}<>
對象名稱示例
下表顯示了一些對象名稱的示例:
| 對象類型 | 示例 | 注釋 |
| 表名 | Sales
| 如果表名中不包含空格或者其他特殊字符,則名稱無需在引號中引起來。 |
| 表名 | ‘Canada Sales’
| 如果表名中包含空格、制表符或其他特殊字符,請將表名用單引號引起來。 |
| 完全限定的列名稱 | Sales[Amount] | 表名位于列名之前,并且列名用方括號括起來。 |
| 完全限定的度量值名稱 | Sales[Profit] | 表名位于度量值名稱之前,并且度量值名稱用方括號括起來。在某些上下文中,始終要求完全限定名稱。 |
| 非限定列名稱 | [Amount] | 非限定名稱只是方括號中的列名。可使用非限定名稱的上下文包括同一表內計算列中的公式,或者掃描同一表的聚合函數中的公式。 |
| 包含空格的完全限定表列 | ‘Canada Sales’[Qty] | 表名包含空格,因此必須用單引號引起來。 |
| 為了便于輸入列的完全限定名稱,建議您在構建公式時使用記憶式鍵入功能。有關詳細信息,請參閱為計算列和度量值構建公式。 |
其他限制
每個函數所需的語法以及它可執行的操作類型可能有很大差異。但是,以下規則一般適用于所有公式和表達式:
-
DAX 公式和表達式不能修改表中的單個值或將單個值插入表中。
-
不能通過 DAX 創建計算行。只能創建計算列和度量值。
-
在定義計算列時,可以在任意級別嵌套函數。
-
DAX 提供了幾個返回表的函數。您通??梢允褂眠@些函數返回的值作為需要將表作為輸入的其他函數的輸入。
DAX 中的函數
DAX 提供以下類型的函數。
-
日期和時間函數 (DAX)
-
篩選器函數 (DAX)
-
信息函數 (DAX)
-
邏輯函數 (DAX)
-
數學和三角函數 (DAX)
-
統計函數 (DAX)
-
文本函數 (DAX)
DAX 運算符和常量
下表列出了 DAX 支持的運算符。一般來說,DAX 中的運算符的作用與在 Microsoft Excel 中相同,但有一些細微區別。有關各個運算符的語法的詳細信息,請參閱運算符參考 (DAX)。
| 運算符類型 | 符號和用途 |
| 括號運算符 | ()優先順序和參數分組 |
| 算術運算符 | +(加) -(減/求反) *(乘) /(除) ^(求冪) |
| 比較運算符 | =(等于) >(大于) <(小于) >=(大于等于) <=(小于等于) <>(不等于) |
| 文本串聯運算符 | &(串聯) |
| 邏輯運算符 | &&(與) ||(或) !(求反) |
DAX 中的數據類型
對于在 DAX 公式中使用的列或值,無需對其數據類型執行強制轉換或轉換,也無需用其他方法指定其數據類型。當您在 DAX 公式中使用數據時,DAX 會自動確定所引用的列中的數據類型以及您所鍵入的值的數據類型,并會在需要時執行隱式轉換以完成指定操作。
例如,如果您將一個數字與一個日期值相加,PowerPivot 將在函數上下文中解釋該運算(和 Excel 一樣),并將數字轉換為通用數據類型,然后以目標格式(即日期格式)顯示結果。
但是,對于可以成功轉換的值有一些限制。如果值或列的數據類型與當前運算不兼容,則 DAX 將返回錯誤。此外,DAX 未提供可對已導入 PowerPivot 工作簿中的現有數據進行數據類型更改、轉換或強制轉換的函數。
| PowerPivot 不支持使用在 Excel 中使用的變量數據類型。因此,當您加載或導入數據時,每個列中的數據通常應為一致的數據類型。 |
有些函數會返回包括字符串在內的標量值,而有些函數則處理數字,包括整數和實數或日期和時間。函數參考 (DAX)一節介紹了每個函數所需的數據類型。
在 PowerPivot 中,表是一種新的數據類型。您可以將包含多列和多行數據的表用作函數的參數。一些函數也會返回表,這些表存儲在內存中,且可用作其他函數的參數。
有關不同數值和日期/時間數據類型的詳細信息以及處理 Null 和空字符串的詳細信息,請參閱?PowerPivot 工作簿中支持的數據類型。
總結
- 上一篇: 释疑の修改SAP标准表内容
- 下一篇: 50、Power Query-Text.