Power Pivot 中的 DAX 方案

注意: 我们希望能够尽快以你的语言为你提供最新的帮助内容。 本页面是自动翻译的,可能包含语法错误或不准确之处。 我们的目的是使此内容能对你有所帮助。 可以在本页面底部告诉我们此信息是否对你有帮助吗? 请在此处查看本文的英文版本以便参考。

本部分提供了示例的链接, 这些示例演示了在以下情况下使用 DAX 公式的示例。

  • 执行复杂计算

  • 使用文本和日期

  • 条件值并测试错误

  • 使用时间智能

  • 对值进行排名和比较

本文内容

入门

示例数据

其他资源

方案: 执行复杂计算

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

将筛选器应用于公式

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

使用来自外部循环的值

方案: 处理文本和日期

通过串联创建键列

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

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

使用公式更改数据类型

方案: 条件值和错误测试

根据条件创建值

测试公式中的错误

方案: 使用时间智能

计算累计销售额

比较一段时间内的值

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

方案: 对值进行排名和比较

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

使用公式动态排序项目

入门

示例数据

如果您不熟悉 DAX 公式, 您可能希望首先查看Power Pivot的示例数据中的示例。 有关详细信息, 请参阅获取针对 DAX 和数据模型教程的示例数据

其他资源

你可能还想要访问dax 资源中心 Wiki , 你可以在其中找到有关 DAX 的所有类型的信息, 包括博客、示例、白皮书和业界领先专业人士和 Microsoft 提供的视频。

方案: 执行复杂计算

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

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

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

将筛选器应用于公式

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

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

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

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

  • 当前产品销售额占总销售额的年数是多少?

  • 与其他部门相比, 此部门对所有营业年的总利润有多大的贡献?

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

ALLEXCEPT 主题提供了如何有选择地清除公式中的筛选器的示例。 两个示例都指导你完成结果如何随数据透视表的设计而变化。

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

使用来自外部循环的值

除了在计算中使用当前上下文中的值, 在创建一组相关计算时, DAX 也可以使用上一个循环中的值。 以下主题提供了有关如何生成引用来自外部循环的值的公式的演练。 早期函数支持多达两层的嵌套循环。

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

方案: 处理文本和日期

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

通过串联创建键列

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

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

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

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

= 日期 (右 ([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执行的隐式数据类型转换来处理输出数据类型。 有关类型转换的详细信息, 请参阅获取针对 DAX 和数据模型教程的示例数据

  • 若要将日期或数字字符串转换为数字, 请乘以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 2010 中的功能创建顶部筛选器。 您还可以选择数据透视表中的多个值或最小值。 本部分的第一部分介绍了如何筛选数据透视表中的前10项。 有关详细信息, 请参阅 Excel 文档。

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

每种方法都有优缺点。

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

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

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

在数据透视表中显示最大值或最小值

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

  2. 选择 "值筛选器" > "前10个"。

  3. 在 "前10个筛选 <column name> " 对话框中, 选择要对其进行排序的列和值的数目, 如下所示:

    1. 选择 "" 可查看具有最高值的单元格, 或底部的单元格, 以查看具有最小值的单元格。

    2. 键入要查看的上限值或下限值的个数。 默认值为10。

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

名称

说明

项目

选择此选项以筛选数据透视表, 以便仅按其值显示最大或最小项目的列表。

百分比

选择此选项以筛选数据透视表, 以便只显示最多包含指定百分比的项目。

Sum

选择此选项以显示最大或最小项的值之和。

  1. 选择包含要对其进行排序的值的列。

  2. 单击“确定”。

使用公式动态排序项目

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

扩展你的 Office 技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×