语法要求
DAX公式始终以等号(=)开头。在等号后,您可以提供任何计算为标量的表达式,或者可以转换为标量的表达式。这些包括以下内容:
标量常量或使用标量运算符的表达式(+, - ,,/,> =,…,&&,…)*
对列或表的引用。DAX语言总是使用表和列作为函数的输入,而不是数组或任意值集。
作为表达式的一部分提供的运算符,常量和值。
函数的结果及其必需的参数。一些DAX函数返回一个表而不是一个标量,并且必须包含在一个函数中,该函数用于计算表并返回一个标量; 除非表是单列,单行表,否则它被视为标量值。
大多数DAX函数都需要一个或多个参数,这些参数可以包括表,列,表达式和值。但是,某些函数(如PI)不需要任何参数,但始终需要括号来指示null参数。例如,您必须始终键入PI(),而不是PI。您还可以在其他函数中嵌套函数。
表达式。表达式可以包含以下任何或所有:运算符,常量或对列的引用。
备注:
公式的行为可能会有所不同,具体取决于它们是在计算列中使用还是在数据透视表中的度量中使用。您必须始终了解上下文以及您在公式中使用的数据如何与计算中可能使用的其他数据相关联。
命名要求
数据模型通常包含多个表。表及其列一起构成存储在内存分析引擎(VertiPaq)中的数据库。在该数据库中,所有表必须具有唯一的名称。列的名称在每个表中也必须是唯一的。所有对象名称都不区分大小写 ; 例如,名称SALES和Sales将代表同一个表。
添加到现有数据模型的每个列和度量必须属于特定表。在表中创建计算列时,可以隐式指定包含列的表,也可以在创建度量时指定包含列的表,并指定应存储度量定义的表的名称。
使用表或列作为函数的输入时,通常必须限定列名。列的完全限定名称是表名,后面是方括号中的列名:例如,“US Sales”[Products]。在以下上下文中引用列时,始终需要完全限定名称:
-
作为函数的一个参数,VALUES
-
作为函数的参数,ALL或ALLEXCEPT
-
在函数的过滤器参数中,CALCULATE或CALCULATETABLE
-
作为函数的参数,RELATEDTABLE
-
作为任何时间智力功能的论据
一个不合格的列名是列,用方括号括的只是名称:例如,[销售金额。例如,当您从当前表的同一行引用标量值时,可以使用非限定列名。
如果表的名称包含空格,保留关键字或不允许的字符,则必须将表名括在单引号中。如果名称包含ANSI字母数字字符范围之外的任何字符,则还必须将表名括在引号中,无论您的语言环境是否支持该字符集。例如,如果打开包含用西里尔字符编写的表名称的工作簿(例如“Таблица”),则表名必须用引号括起来,即使它不包含空格。
备注:
要更轻松地输入列的完全限定名称,请使用公式编辑器中的“自动完成”功能。
表
-
只要列来自与当前表不同的表,就需要表名。表名在数据库中必须是唯一的。
-
如果表名包含空格,其他特殊字符或任何非英语字母数字字符,则必须用单引号括起来。
措施:
-
度量名称必须始终放在括号中。
-
度量名称可以包含空格。
-
每个度量名称在模型中必须是唯一的。因此,在引用现有度量时,表名称在度量名称前面是可选的。但是,在创建度量时,必须始终指定将存储度量定义的表。
列:
列名在表的上下文中必须是唯一的; 但是,多个表可以具有相同名称的列(消歧带有表名)。
通常,可以引用列而不引用它们所属的基表,除非可能存在要解析的名称冲突或需要完全限定列名的某些函数。
保留关键字:
如果用于表的名称与Analysis Services保留关键字相同,则会引发错误,您必须重命名该表。但是,如果对象名称括在括号(对于列)或引号(对于表)中,则可以在对象名中使用关键字。
备注:
引号可以由几个不同的字符表示,具体取决于应用程序。如果从外部文档或网页粘贴公式,请确保检查用于打开和关闭引号的字符的ASCII代码,以确保它们相同。否则DAX可能无法将符号识别为引号,使引用无效。
特殊字符:
以下字符和字符类型在表,列或度量的名称中无效:
-
领先或尾随空间; 除非空格由名称分隔符,括号或单个撇号括起来。
-
控制字符
-
以下在对象名称中无效的字符:
。,;’:?!/ \ * |&%$ + =()[] {} <>
对象名称的示例:
下表显示了一些对象名称的示例:
其他限制:
每个函数所需的语法及其可执行的操作类型根据函数的不同而有很大差异。但是,通常,以下规则适用于所有公式和表达式:
-
DAX公式和表达式不能在表中修改或插入单个值。
-
您无法使用DAX创建计算行。您只能创建计算的列和度量。
-
定义计算列时,可以将函数嵌套到任何级别。
-
DAX有几个返回表的函数。通常,您使用这些函数返回的值作为其他函数的输入,这些函数需要表作为输入。
DAX运算符和常量:
下表列出了DAX支持的运算符。有关各个运算符语法的详细信息,请参阅DAX运算符。
数据类型:
您不需要转换,转换或以其他方式指定在DAX公式中使用的列或值的数据类型。在DAX公式中使用数据时,DAX会自动识别引用列中的数据类型以及您键入的值,并在必要时执行隐式转换以完成指定的操作。
例如,如果您尝试向日期值添加数字,引擎将解释函数上下文中的操作,并将数字转换为公共数据类型,然后以预期格式显示结果,日期。
但是,可以成功转换的值存在一些限制。如果值或列的数据类型与当前操作不兼容,DAX将返回错误。此外,DAX不提供允许您显式更改,转换或转换已导入数据模型的现有数据的数据类型的函数。
重要:
DAX不支持使用变体数据类型。因此,当您将数据加载或导入数据模型时,预计每列中的数据通常具有一致的数据类型。
某些函数返回标量值,包括字符串,而其他函数则使用数字,整数和实数,或日期和时间。每个函数所需的数据类型在DAX函数一节中描述。
您可以使用包含多列和多行数据的表作为函数的参数。某些函数还返回表,这些表存储在内存中,可用作其他函数的参数。
更多资料 https://docs.microsoft.com/zh-cn/dax/data-analysis-expressions-dax-reference