编写 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 函数
与 Microsoft Excel 类似,DAX 是一种函数语言,这意味着公式依赖于函数来实现特定的目标。 通常情况下,DAX 函数包含允许传入变量的参数。 公式可以使用多个函数调用,并且通常会在其他函数中嵌套函数。
在公式中,函数名称后面必须有括号。 变量将传入括号内。
注意
有些函数不使用参数,或者选用参数。
本模块后面的部分将介绍如何使用 DAX 函数。
DAX 运算符
公式还依赖于运算符,后者可以执行算术计算、比较值、处理字符串或测试条件。
本模块后面的部分对 DAX 运算符进行了详细介绍。
对模型对象的引用
公式只能引用三种类型的模型对象:表、列或度量值。 它不能引用层次结构或层次结构级别。 (回想一下,层次结构级别是基于列的,所以公式可以引用层次结构级别的列。)
表引用
当你在公式中引用一个表时,正式的表名是用单引号括起来的。 在下面的计算表定义中,请注意,Date 表是用单引号括起来的。
Ship Date = 'Date'
不过,如果同时满足以下两个条件,则可以省略单引号:
- 表名不包含嵌入的空格。
- 表名不是 DAX 使用的保留字。 所有 DAX 函数名称和运算符都是保留字。 Date 是一个 DAX 函数名称,用于说明在引用名为 Date 的表时,必须将其括在单引号内的原因。
在下面的计算表定义中,可在引用 Airport 表时省略单引号:
Arrival Airport = Airport
列引用
当你在公式中引用一列时,必须用方括号将列名括起来。 也可以在列名前加上表名。 例如,下面的度量值定义引用“销售额”列。
Revenue = SUM([Sales Amount])
由于列名在表中是唯一的,但在模型中不一定是唯一的,因此可以在列引用前加上它的表名,以消除列引用的歧义。 这个已消除歧义的列被称为“完全限定的列”。 一些 DAX 函数要求传递完全限定的列。
提示
为了提高公式的可读性,建议始终在列引用前加上其表名。
可以将前面的示例度量值定义改写为:
Revenue = SUM(Sales[Sales Amount])
度量值引用
当你在公式中引用一个度量值(如列名引用)时,必须用方括号将度量值名括起来。 例如,下面的度量值定义引用“收入”和“成本”度量值。
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 表,并选择“收入 YoY 百分比”度量值。 在编辑栏中,使用制表符和回车符可生成与上一示例相同的结果。 在添加回车符时,请注意按下 Shift + Enter。
还可以进一步改进此度量值定义以提高可读性和性能,这将在本模块后面的部分中进行介绍。
提示
另一个可以帮助你设置计算格式的优秀格式设置工具是 DAX 格式化程序。 使用此工具可以粘贴计算并设置其格式。 然后,可以将经过格式设置的计算复制到剪贴板,然后将其粘贴回 Power BI Desktop。