DAX 公式在 Power BI 中用于哪里?
在 Power BI 中,您可以通过三种方式使用 DAX 公式:
- 计算表——基于公式向报告中添加一个新的表。
- 计算列——基于公式向表中添加一个新的列。这些列与表中的其他字段一样对待。
- 度量值——基于公式向表中添加一个汇总或聚合的度量。
这三种计算类型的主要差异在于其上下文(稍后详述)以及它们生成的输出。
要将其中任意一种计算添加到模型中,请转到功能区的建模选项卡。在这里,您可以选择添加新度量值、计算列或表。或者,您也可以在字段窗格中右键单击某个表,并在下拉菜单中选择添加新度量值或计算列。

如何编写 DAX 公式
DAX 公式直观、易读。这使您能够轻松掌握 DAX 基础,从而较快开始编写自己的公式。让我们来看看规范 DAX 语法的构成要素。

- 度量值或计算列的名称
- 等号运算符(“=”)表示公式的开始
- DAX 函数
- 成对的括号(“()”)
- 列和/或表引用
- 请注意,函数中的每个后续参数由逗号(“,”)分隔
DAX 函数也可以相互嵌套,以高效执行多步操作。这在编写 DAX 公式时可以节省大量时间。例如,多个嵌套的 IF 语句常常很有用,或者使用 IFERROR 函数包裹其他函数,以便当公式出现错误时,返回您指定的值。
报告中最常用的一些 DAX 函数包括:
- 简单计算:
COUNT、DISTINCTCOUNT、SUM、AVERAGE、MIN、MAX。 SUMMARISE:返回一个表,通常用于在不同分组上进一步应用聚合。CALCULATE:在一个或多个筛选条件下执行聚合。当您指定多个筛选器时,函数会在所有筛选条件均为true的情况下执行计算。IF:基于逻辑条件,在条件为true或false时返回不同的值。这类似于 SQL 中的CASE WHEN操作。IFERROR:检测内部函数是否出现错误,并返回指定结果。ISBLANK:检查列中的行是否为空白并返回 true 或 false。与 IF 等函数配合使用非常有用。EOMONTH:返回给定日期(日期格式的列引用)所在月份的最后一天,可指定向前或向后若干个月。DATEDIFF:返回两个日期(均为日期格式的列引用)之间的差值,单位可以是天、月、季度、年等。
理解 DAX 公式中的上下文
Power BI 中的 DAX 公式是动态的,会根据其创建时所处的上下文而变化。理解 DAX 中的上下文非常重要,这能帮助您在遇到令人困惑的公式错误时少走弯路。
DAX 中主要有两种上下文:行上下文和筛选上下文。
行上下文
这指的是表中“当前行”在所有列上的上下文,并扩展到相关表中的所有列。此类上下文让 DAX 公式知道在某个公式中应使用哪些行。
以下是一个具有行上下文的计算列公式示例:
Cost Price Per Unit = financials[COGS] / financials[Units Sold]

在此示例中,Cost Price Per Unit 是按行逐一计算的。这意味着在遍历数据集进行计算并将结果填充到新列时,DAX 需要知道当前行。
计算列中隐含了行上下文。这是因为计算列中的计算是逐行执行的,因此行上下文默认已定义。然而,度量值就不是这样,因为度量值会对表中的所有行进行聚合。这类计算不需要了解当前行,因为所有行会被一起聚合。
以一个度量值为例,考虑以下 DAX 公式:
Profit margin = SUM ( financials[Profit] ) / SUM ( financials[Sales] )
在这种情况下,整个 Profit 列会被求和得到一个数值,然后再除以整个 Sales 列的总和。由于执行的是聚合,DAX 不需要知道当前行。因此,此度量值不具有行上下文。
若要在度量值中显式定义行上下文,您需要使用称为迭代器的特殊函数。迭代器函数的示例包括 SUMX、AVERAGEX 和 COUNTX。这些函数会先按行逐一执行计算,然后对结果进行最终聚合(如求和、平均、计数等)。通过使用这些迭代器,就可以显式定义行上下文。
让我们看一个迭代器函数的示例:
Average Cost Per Unit = AVERAGEX ( financials, financials[COGS] / financials[Units Sold] )
此示例执行了两步计算:首先按行逐一计算表达式,然后将结果应用于 AVERAGE 函数。达到同一结果的另一种方法是,先像上面那样创建计算列 Cost Price Per Unit,然后针对该列再创建一个单独的 AVERAGE 度量值。不过,掌握何时使用这些迭代器函数可以让您的报告更高效、占用更少内存,因为您可以用一个公式高效地完成两步计算。
筛选上下文
筛选上下文是在行上下文之上应用的,指的是在报告中作为筛选条件指定的某些行或列的子集。筛选可以通过以下几种方式应用:
- 直接在 DAX 公式中
- 使用筛选器窗格
- 使用切片器可视化
- 通过构成可视化的字段(例如矩阵中的行与列)
在 DAX 公式中添加筛选上下文的一个好例子是使用 CALCULATE 函数,它允许您向度量值添加一个或多个筛选参数。在下面的示例中,我们创建了一个仅针对美国的利润率度量值:
USA Profit Margin = CALCULATE ( SUM ( financials[Profit] ) / SUM ( financials[Sales] ), financials[Country] = "United States of America")
DAX 的常见挑战与新手误区
在学习 DAX 的过程中,新手常会遇到一些常见陷阱,使得理解和调试公式更具挑战。以下是一些问题及其应对建议:
1. 混淆行上下文与筛选上下文:许多初学者难以区分行上下文与筛选上下文。请记住,行上下文指按行逐一执行的操作(如计算列);而筛选上下文则是为计算施加额外筛选(如报表中的切片器或筛选器)。提示:在度量值中使用 SUMX 或 AVERAGEX 等迭代器函数来显式定义行上下文。
2. 过度使用计算列:虽然计算列很有用,但很多情况下可以用度量值替代,后者更省内存且更具动态性。不必要的计算列会让数据模型臃肿。提示:尽可能使用度量值,因为它们是即时计算的,不会永久增加数据模型的大小。
3. 忽视良好的命名规范:在复杂报告中,命名不当的度量值或计算列会很快让人困惑。提示:采用一致且具描述性的命名规范来组织您的 DAX 公式。
4. 忽略性能优化:在大数据集下,如果没有进行优化,DAX 公式可能会变慢。过度复杂的公式或过多的嵌套函数可能导致性能问题。提示:使用 DAX Studio 等工具分析和优化您的公式,并在可能的情况下简化计算。
优化 DAX 公式的最佳实践
要提升 DAX 公式在大型数据集中的性能,请遵循以下最佳实践:
| 最佳实践 | 说明 |
|---|---|
| 优先使用度量值而非计算列 | 度量值是动态的、按需计算的,比计算列更省内存。 |
| 避免嵌套迭代 | 尽量减少复杂的嵌套函数(例如 SUMX、AVERAGEX)以避免性能瓶颈。 |
| 尽早筛选 | 在数据源或 DAX 公式中尽早应用筛选,以减少需要处理的行数。 |
| 利用变量 | 使用 VAR 存储中间结果,避免在同一公式中重复计算。 |
| 简化关系 | 确保数据模型具有清晰的关系,并对表进行适当索引,以加快处理速度。 |
| 优化基数 | 降低用于筛选或连接的列中的唯一值数量,以提升性能。 |
结语
您现在已经掌握了一些基础的 DAX 工具,而这仅仅是 DAX 能力冰山一角。DAX 拥有 250 多个函数,精通之路既具挑战也很有收获。今天就通过我们的Introduction to DAX in Power BI课程,开始提升您的 DAX 技能吧!
常见问题
Power BI 中的 DAX 是什么?
DAX(数据分析表达式)使您能够执行计算,从而在模型中创建新的字段,甚至新的表。
在 Power BI 中,DAX 是什么的缩写?
Data Analysis Expressions
如何在 Power BI 中编写 DAX 公式?
DAX 公式输入在 Power BI 功能区下方的公式栏中。先为公式命名,然后输入等号(“=”)。接着使用函数、常量或字符串编写您的公式。
如何在 Power BI 中编写 DAX 度量值?
在功能区的“建模”选项卡中选择“新建度量值”,或在“字段”窗格中右键单击某个表并从下拉菜单中选择“新建度量值”,即可创建 DAX 度量值。
如何在 Power BI 中使用 DAX 创建“case when” 公式?
“case when” 公式可通过 DAX 公式中的 IF 函数来实现。
如何在 Power BI 中使用 DAX 连接两张表?
连接两张表的最简单方法是利用两表之间的现有关系,并使用 ADDCOLUMNS 函数向某个表添加额外列。该函数执行的是左连接。
如何在 Power BI 中使用 DAX 应用 where 子句?
在 DAX 中可以通过筛选参数轻松应用 where 子句。例如,CALCULATE 函数接收一个表达式和多个可选筛选参数。这有助于控制图表和用户输入对这些函数的影响。
如何使用 DATATABLE DAX 函数在 Power BI 中创建静态表?
DATATABLE 函数是一种简单便捷的方式来创建静态表,除非显式更改 DAX 函数,否则这些表不会刷新。DATATABLE 的语法为:
DATATABLE (
<column1_name>, <column1_datatype>,
<column2_name>, <column2_datatype>,
{
{ <value1_row1>, <value2_row1> },
{ <value1_row2>, <value2_row2> }
}
)
如何在 Power BI 中使用 DAX 替换值?
在 DAX 中有两种方式可替换列中的字符串值,即使用 REPLACE 和 SUBSTITUTE 函数。REPLACE 函数会基于您指定的确切位置和字符数替换字符串;而 SUBSTITUTE 函数会替换任何与目标完全匹配的字符串,而不考虑其位置。
我该如何学习在 Power BI 中使用 DAX?
DataCamp 的Introduction to DAX in Power BI课程涵盖从入门到进阶的大量 DAX 计算,以及在报告中最佳的使用方式。

DAX 是什么?
DAX(Data Analysis Expressions,数据分析表达式)驱动着您在 Power BI 中可执行的所有计算。DAX 公式灵活、动态且功能强大——它们允许您在模型中创建新的字段和表。DAX 是一种用于 Power BI、Power Pivot 和 SSAS 表格模型的公式语言。
DAX 公式由 3 个核心组成部分构成,本教程将逐一介绍:
为何 DAX 在 Power BI 中很重要?
DAX 公式使您能够充分挖掘数据与 Power BI 的价值,高效解决业务问题。
您可以在不使用 DAX 的情况下执行简单计算(如求和或平均)并创建大多数可视化。例如,若要创建显示总利润的简单图表,您可以将利润字段拖到图表的值区域,它会对该字段中的行执行求和。然而,在以下两种情况下,创建 DAX 公式会更好:
SUM或AVERAGE就能满足您要解决的业务问题。