DAX 语法规范

来源:互联网 发布:centos squid 配置 编辑:程序博客网 时间:2024/05/16 15:50

数据分析表达式 (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 工作簿中支持的数据类型。

1 0
原创粉丝点击