编写 DAX 公式

已完成

每个模型计算类型、计算表、计算列或度量值都由其名称定义,后跟等号 (=),然后是 DAX 公式。 使用以下模板创建模型计算:

<Calculation name> = <DAX formula>

例如,复制 Date 表数据的 Ship Date 计算表的定义是:

Ship Date = 'Date'

DAX 公式由返回结果的表达式组成。 结果可以是一个表对象,也可以是一个标量值。 计算表公式必须返回表对象;计算列公式和度量值公式必须返回标量值(单个值)。

使用以下内容来汇编公式:

  • DAX 函数
  • DAX 运算符
  • 对模型对象的引用
  • 常量值,例如数字 24 或文字文本“FY”(会计年度的缩写)
  • DAX 变量
  • 空格

提示

在 Power BI Desktop 中输入 DAX 公式时,您可以利用 IntelliSense 的优势。 IntelliSense 是一个代码补充辅助工具,可列出函数和模型资源。 当您选择 DAX 函数时,它还会为您提供定义和描述。 我们建议您使用 IntelliSense 来帮助您快速生成准确的公式。

DAX 函数

DAX 类似于 Microsoft Excel,它是一种函数语言,这意味着公式依赖函数来实现特定目标。 通常,DAX 函数包含允许传入变量的参数。 公式可以使用多个函数调用,并且通常会在其他函数中嵌套函数。

在公式中,函数名称后面必须有括号。 变量将传入括号内。

注意

某些函数不使用参数,或者可能选用参数。

本模块后面将介绍如何使用 DAX 函数。

DAX 运算符

公式还依赖运算符,可用于执行算术计算、比较值、使用字符串或测试条件。

本模块后面将更详细地介绍 DAX 运算符。

对模型对象的引用

公式只能引用三种类型的模型对象:表、列或度量值。 公式不能引用层次结构或层次结构级别。 (回想一下,层次结构级别基于列,因此公式可以引用层次结构级别的列。)

表引用

在公式中正式引用表时,表名称将括在单引号中。 在以下计算表定义中,请注意 Date 表括在单引号中。

Ship Date = 'Date'

但是,如果同时满足以下两个条件,则可以省略单引号:

  1. 表名称不包括嵌入空格。
  2. 表名称不是 DAX 使用的保留字。 所有 DAX 函数名称和运算符都是保留字。 Date 是一个 DAX 函数名称,可解释引用名为 Date 的表的原因和情形,必须将其括在单引号中。

在以下计算表定义中,引用 Airport 表时可以省略单引号:

Arrival Airport = Airport

列引用

引用公式中的列时,列名称必须括在方引号中。 也可以在其前面加上表名称。 例如,以下度量值定义引用 Sales Amount 列。

Revenue = SUM([Sales Amount])

由于列名称在表中是唯一的,但在模型中不一定是唯一的,因此可以在列引用前面加上其表名称,以消除列引用的歧义。 此已消除歧义的列称为完全限定的列。 某些 DAX 函数要求传入完全限定的列。

提示

为了提高公式的可读性,我们建议您始终在列引用前面加上其表名称。

可以将前面的示例度量值定义改写为:

Revenue = SUM(Sales[Sales Amount])

度量值引用

当您在公式中引用度量值(例如列名称引用)时,度量值名称必须括在方括号中。 例如,以下度量值定义引用 RevenueCost 度量值。

Profit = [Revenue] - [Cost]

如果您是 DAX 初学者,在尝试理解公式时,列和度量值引用始终括在方括号中,这一事实可能会导致混淆。 但是,在熟练掌握 DAX 基础知识后,您可以确定对象的类型,因为在 DAX 公式中,列和度量值的使用方式各不相同。

提示

可以在度量值引用前面加上其表名称。 但是,度量值是模型级别的对象。 虽然它们分配到主表,但在数据窗格中以逻辑方式组织度量值只是一种表面关系。

因此,虽然我们建议您始终在列引用前面加上其表名称,但对于度量值来说,情况正好相反:我们建议您不要在度量值引用前面加上其表名称。

有关详细信息,请参阅列引用和度量值引用

DAX 变量

公式可以声明 DAX 变量以存储结果。

本模块后面将介绍如何以及何时使用 DAX 变量。

空格

空格是指可用于通过便捷易懂的方式来设置公式格式的字符。 空格字符包括:

  • 空格
  • 制表符
  • 回车符

空格是可选的,它不会修改公式逻辑或对性能产生负面影响。 我们强烈建议您采用一种格式样式,以一致的方式应用它,并考虑以下建议:

  • 在运算符之间使用空格。
  • 使用制表符缩进嵌套函数调用。
  • 使用回车符分隔函数参数,特别是当它太长而无法放在一行时。 采用这种方式设置格式可以更轻松地排除故障,特别是当公式缺少括号时。
  • 使用过多的空格容易出错。

提示

在编辑栏中,若要输入回车符,请按 Shift+Enter。 只按 Enter 键会提交公式。

请注意以下度量值定义如何编写在一行中,其中包括五次 DAX 函数调用:

Revenue YoY % = DIVIDE([Revenue] - CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date])), CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date])))

以下示例是相同的度量值定义,但现在进行了格式设置,有助于更轻松地阅读和理解:

Revenue YoY % =
DIVIDE(
    [Revenue]
        - CALCULATE(
            [Revenue],
            SAMEPERIODLASTYEAR('Date'[Date])
    ),
    CALCULATE(
        [Revenue],
        SAMEPERIODLASTYEAR('Date'[Date])
    )
)

尝试自行设置度量值的格式。 打开 Adventure Works DW 2020 M02.pbix Power BI Desktop 文件,然后在数据窗格中,展开 Sales 表,随后选择 Revenue YoY % 度量值。 在编辑栏中,使用制表符和回车符生成与上一示例相同的结果。 添加回车符时,请记住按 Shift+Enter

此度量值定义可进一步改进以提高可读性和性能,本模块后面将对此进行说明。

提示

另一个可以帮助您设置计算格式的优秀格式设置工具是 DAX Formatter。 此工具允许您粘贴计算并设置其格式。 然后,您可以将已设置格式的计算复制到剪贴板并将其粘贴回 Power BI Desktop。