Excel DAX – 执行复杂的计算

Excel DAX – 执行复杂的计算


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

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

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

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

CALCULATE 函数

计算 (<表达式>, [<filter1>], [<filter2>]…)

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

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

例子

假设您想显示按国家名称过滤的运动奖牌百分比。您的计算应该获得覆盖您在数据透视表中的 Country 上应用的过滤器的百分比值。

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

计算字段

使用此 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 函数最多支持两级嵌套循环。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁