Applies ToMicrosoft 365 专属 Excel Excel 2024 Excel 2021 Excel 2019 Excel 2016 Power BI

本部分提供了一些示例的链接,这些示例演示如何在以下方案中使用 DAX 公式。

  • 执行复杂计算

  • 使用文本和日期

  • 条件值和错误测试

  • 使用时间智能

  • 对值进行排名和比较

本文内容

入门

访问 DAX 资源中心 Wiki ,在其中可以找到有关 DAX 的各种信息,包括行业领先的专业人员和Microsoft提供的博客、示例、白皮书和视频。

方案:执行复杂计算

DAX 公式可以执行涉及自定义聚合、筛选和使用条件值的复杂计算。 本部分提供了有关如何开始使用自定义计算的示例。

为数据透视表创建自定义计算

CALCULATE 和 CALCULATETABLE 是功能强大且灵活的函数,可用于定义计算字段。 通过这些函数,可以更改执行计算的上下文。 还可以自定义要执行的聚合或数学运算的类型。 有关示例,请参阅以下主题。

将筛选器应用于公式

在 DAX 函数将表作为参数的大多数位置中,通常可以通过使用 FILTER 函数而不是表名称或将筛选器表达式指定为函数参数之一来传入筛选表。 以下主题提供了有关如何创建筛选器以及筛选器如何影响公式结果的示例。 有关详细信息,请参阅 在 DAX 公式中筛选数据

FILTER 函数允许使用表达式指定筛选条件,而其他函数专门用于筛选空值。

有选择地删除筛选器以创建动态比率

通过在公式中创建动态筛选器,可以轻松回答如下问题:

  • 当前产品的销售额对当年总销售额的贡献是多少?

  • 与其他部门相比,该部门在所有营业年度的总利润中贡献了多少?

在数据透视表中使用的公式可能会受到数据透视表上下文的影响,但可以通过添加或删除筛选器来有选择地更改上下文。 ALL 主题中的示例演示如何执行此操作。 若要查找特定经销商的销售额与所有经销商的销售额之比,请创建一个度量值,用于计算当前上下文的值除以 ALL 上下文的值。

ALLEXCEPT 主题提供了有关如何选择性地清除公式上的筛选器的示例。 这两个示例将引导你了解结果如何根据数据透视表的设计而变化。

有关如何计算比率和百分比的其他示例,请参阅以下主题:

使用外部循环中的值

除了在计算中使用当前上下文中的值外,DAX 还可以使用上一个循环中的值来创建一组相关计算。 以下主题演练了如何生成引用外部循环中的值的公式。 EARLIER 函数最多支持两个级别的嵌套循环。

若要详细了解行上下文和相关表以及如何在公式中使用此概念,请参阅 DAX 公式中的上下文

方案:使用文本和日期

本部分提供了指向 DAX 参考主题的链接,这些主题包含涉及处理文本、提取和撰写日期和时间值或基于条件创建值的常见方案示例。

通过串联创建键列

Power Pivot 不允许组合键;因此,如果数据源中有复合键,则可能需要将它们合并为单个键列。 以下主题提供了一个示例,说明如何基于复合键创建计算列。

基于从文本日期中提取的日期部分撰写日期

Power Pivot 使用 SQL Server 日期/时间数据类型来处理日期;因此,如果外部数据包含格式不同的日期(例如,如果日期以 Power Pivot 数据引擎无法识别的区域日期格式编写,或者数据使用整数代理键),则可能需要使用 DAX 公式提取日期部分,然后将这些部分组合成有效的日期/时间表示形式。

例如,如果日期列表示为整数,然后导入为文本字符串,则可以使用以下公式将该字符串转换为日期/时间值:

=DATE (RIGHT ([Value1],4) ,LEFT ([Value1],2) ,MID ([Value1],2) )

Value1

结果

01032009

1/3/2009

12132008

12/13/2008

06252007

6/25/2007

以下主题提供有关用于提取和撰写日期的函数的详细信息。

定义自定义日期或数字格式

如果数据包含的日期或数字未以标准 Windows 文本格式之一表示,则可以定义自定义格式以确保正确处理值。 这些格式在将值转换为字符串或从字符串转换时使用。 以下主题还提供了可用于处理日期和数字的预定义格式的详细列表。

使用公式更改数据类型

在 Power Pivot 中,输出的数据类型由源列确定,不能显式指定结果的数据类型,因为最佳数据类型由 Power Pivot 确定。 但是,可以使用 Power Pivot 执行的隐式数据类型转换来操作输出数据类型。 

  • 若要将日期或数字字符串转换为数字,请将 1.0 相乘。 例如,以下公式计算当前日期减去 3 天,然后输出相应的整数值。

    = (Today () -3) *1.0

  • 若要将日期、数字或货币值转换为字符串,请将值与空字符串连接。 例如,以下公式以字符串的形式返回今天的日期。

    =“”& TODAY ()

以下函数还可用于确保返回特定数据类型:

将实数转换为整数

方案:条件值和错误测试

与 Excel 一样,DAX 具有可让你测试数据中的值的函数,并根据条件返回不同的值。 例如,可以创建一个计算列,根据年度销售额将经销商标记为 “首选 ”或“ ”。 测试值的函数也可用于检查值的范围或类型,以防止意外的数据错误中断计算。

基于条件创建值

可以使用嵌套 IF 条件测试值并有条件地生成新值。 以下主题包含条件处理和条件值的一些简单示例:

测试公式中的错误

与 Excel 不同,计算列的一行中不能有有效值,另一行中不能有无效值。 也就是说,如果 Power Pivot 列的任何部分存在错误,则整个列将标记为错误,因此必须始终更正导致无效值的公式错误。

例如,如果创建除以零的公式,可能会得到无穷大结果或错误。 如果函数在需要数值时遇到空白值,某些公式也会失败。 开发数据模型时,最好允许出现错误,以便单击消息并排查问题。 但是,在发布工作簿时,应合并错误处理,以防止意外值导致计算失败。

为了避免在计算列中返回错误,可以使用逻辑函数和信息函数的组合来测试错误并始终返回有效值。 以下主题提供了一些如何在 DAX 中执行此操作的简单示例:

方案:使用时间智能

DAX 时间智能函数包括有助于从数据中检索日期或日期范围的函数。 然后,可以使用这些日期或日期范围来计算类似时间段的值。 时间智能函数还包括使用标准日期间隔的函数,用于比较月份、年份或季度的值。 还可以创建一个公式,用于比较指定时间段的第一个和最后一个日期的值。

有关所有时间智能函数的列表,请参阅 时间智能函数 (DAX)。 有关如何在 Power Pivot 分析中有效使用日期和时间的提示,请参阅 Power Pivot 中的日期

计算累计销售额

以下主题包含有关如何计算期末余额和期初余额的示例。 通过这些示例,可以跨不同间隔(例如天、月、季度或年)创建运行余额。

比较一段时间内的值

以下主题包含有关如何比较不同时间段的总和的示例。 DAX 支持的默认时间段为月份、季度和年份。

计算自定义日期范围内的值

有关如何检索自定义日期范围的示例,请参阅以下主题,例如促销开始后的前 15 天。

如果使用时间智能函数检索一组自定义日期,则可以使用该组日期作为执行计算的函数的输入,以跨时间段创建自定义聚合。 有关如何执行此操作的示例,请参阅以下主题:

  • PARALLELPERIOD 函数

    注意: 如果不需要指定自定义日期范围,但使用的是标准会计单位(如月份、季度或年份),建议使用专为此目的设计的时间智能函数(例如 TOTALQTD、TOTALMTD、TOTALQTD 等)来执行计算。

方案:排名和比较值

若要仅显示列或数据透视表中的前 n 个项数,可以使用多个选项:

  • 可以使用 Excel 中的功能创建 Top 筛选器。 还可以在数据透视表中选择多个顶部或底部值。 本部分的第一部分介绍如何筛选数据透视表中的前 10 个项目。 有关详细信息,请参阅 Excel 文档。

  • 可以创建动态排名值的公式,然后按排名值进行筛选,或者将排名值用作切片器。 本部分的第二部分介绍如何创建此公式,然后在切片器中使用该排名。

每种方法都有其优点和缺点。

  • Excel Top 筛选器易于使用,但筛选器仅用于显示目的。 如果数据透视表的基础数据发生更改,则必须手动刷新数据透视表才能看到更改。 如果需要动态处理排名,可以使用 DAX 创建一个公式,将值与列中的其他值进行比较。

  • DAX 公式更强大;此外,通过将排名值添加到切片器,只需单击切片器即可更改显示的顶级值数。 但是,计算成本高昂,此方法可能不适用于包含许多行的表。

仅显示数据透视表中的前十个项

显示数据透视表中的顶部或底部值

  1. 在数据透视表中,单击 “行标签” 标题中的向下箭头。

  2. 选择“ 值筛选器 ”> 前 10 个

  3. 在“ 前 10 个筛选器 <列名称> 对话框中,选择要排名的列和值数,如下所示:

    1. 选择“ 顶部 ”可查看值最高的单元格,或选择 “底部 ”以查看值最低的单元格。

    2. 键入要查看的顶部或底部值的数目。 默认值为 10。

    3. 选择所需的值显示方式:

名称

说明

项目

选择此选项可筛选数据透视表,以按其值仅显示顶部或底部项的列表。

百分比

选择此选项可筛选数据透视表,以仅显示加到指定百分比的项。

Sum

选择此选项可显示顶部或底部项的值的总和。

  1. 选择包含要排名的值的列。

  2. 单击“确定”。

使用公式动态排序项

以下主题包含有关如何使用 DAX 创建存储在计算列中的排名的示例。 由于 DAX 公式是动态计算的,因此即使基础数据已更改,也始终可以确保排名正确。 此外,由于公式用于计算列,因此可以在切片器中使用排名,然后选择前 5 个、前 10 个甚至前 100 个值。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。