Excel DAX - 执行复杂计算


DAX 公式可以执行涉及自定义聚合、筛选和条件值的使用的复杂计算。您可以使用 DAX 执行以下操作 -

  • 为数据透视表创建自定义计算。
  • 对 DAX 公式应用过滤器。
  • 有选择地删除过滤器以创建动态比率。
  • 使用外循环中的值。

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

DAX 函数 CALCULATE 和 CALCULATETABLE 功能强大且灵活。它们对于定义计算字段很有用。这些 DAX 函数使您能够更改执行计算的上下文。您还可以自定义要执行的聚合或数学运算的类型。

计算功能

计算(<表达式>,[<过滤器1>],[<过滤器2>]...)

CALCULATE 函数在由零个或多个指定过滤器修改的上下文中计算给定表达式。

如果您的数据已被过滤,则 CALCULATE 函数会更改过滤数据的上下文,并在您由过滤器指定的新上下文中计算表达式。这意味着,指定列上的任何现有过滤器都将被删除,并改为应用过滤器参数中使用的过滤器。

例子

假设您想要显示按国家/地区名称筛选的运动奖牌百分比。您的计算应该获得覆盖您对数据透视表中的国家/地区应用的筛选器的百分比值。

  • 定义一个计算字段 - 奖牌计数百分比,如以下屏幕截图所示。

计算字段

使用此 DAX 公式,结果表中的所有行都会在 CALCULATE 函数中考虑,并且筛选器包含 ALL 函数。这样,您就可以得到分母中的总数。

您的数据透视表将如以下屏幕截图所示。

行标签

在上面的屏幕截图中,国家/地区被筛选为美国,前 18 个值显示在数据透视表中。接下来,您可以动态筛选数据透视表中的值。但是,您使用的自定义 DAX 公式的计算结果将是正确的。

CALCULATETABLE 函数采用值表并执行与 CALCULATE 函数相同的操作。

过滤公式中的数据

您可以在 DAX 公式中创建过滤器,以从源数据中选择值以用于计算。您可以通过定义过滤表达式并将其与作为 DAX 公式输入的表一起使用来实现此目的。

过滤表达式使您能够获取源数据的子集。每次更新 DAX 公式的结果时,都会动态应用过滤器,具体取决于数据的当前上下文,并且您可以确保获得准确且符合预期的结果。

筛选表达式通常包含一个 DAX 筛选函数,该函数仅返回表中选定的行,然后可以将其用作用于数据聚合的另一个 DAX 函数的参数。

例子

以下屏幕截图显示了计算字段的定义,该字段仅给出夏季运动的奖牌计数。

过滤数据

使用此计算字段,数据透视表看起来如以下屏幕截图所示。

计算字段屏幕截图

您可以观察到,右侧数据透视表中包含新计算字段的值与左侧数据透视表中显式应用季节字段筛选器的值相匹配。

注意- DAX 过滤器和值函数返回一个表,但从不将表或行直接返回到数据模型,因此始终嵌入到另一个 DAX 函数中。

有关这些 DAX 函数的详细信息,请参阅“DAX 过滤器函数”一章。

动态添加和删除过滤器

在数据透视表中使用的 DAX 公式可能会受到数据透视表上下文的影响。但是,您可以通过添加或删除过滤器有选择地更改上下文。您可以使用 DAX 函数 ALL 和 ALLEXCEPT 动态选择行,而不管数据透视表上下文如何。

此外,您可以使用 DAX 函数 DISTINCT 和 VALUES 来返回不同的值。

使用外循环中的值

您可以使用前一个循环中的值通过 DAX EARLIER 函数创建一组相关计算。此 DAX 函数最多支持两层嵌套循环。