Excel DAX 执行复杂计算


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

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

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


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

计算函数

计算(<表达式>、[]、[]…)

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

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

例子

假设你要显示按国家/地区名称过滤的运动奖牌百分比。你的计算应获得覆盖你在数据透视表中应用于国家/地区的过滤器的百分比值。

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

Calculated Fields

使用此 DAX 公式,结果表中的所有行都在 CALCULATE 函数中被考虑在内,过滤器包含 ALL 函数。这样,你就有了分母中的总数。

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

Row Labels

在上面的屏幕截图中,Country 被过滤为 USA,前 18 个值显示在数据透视表中。接下来,你可以动态过滤数据透视表中的值。但是,你使用的自定义 DAX 公式的计算将是正确的。

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

过滤公式中的数据


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

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

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

例子

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

Filtering Data

使用此计算字段,数据透视表如下面的屏幕截图所示。

Calculated Field Screenshot

如你所见,右侧数据透视表中带有新计算字段的值与左侧数据透视表中的值匹配,其中明确应用了季节字段上的过滤器。

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

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

动态添加和删除过滤器

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

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

使用外循环中的值

你可以在使用 DAX EARLIER 函数创建一组相关计算时使用上一个循环中的值。此 DAX 函数最多支持两级嵌套循环。