Excel DAX - 执行复杂计算



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

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

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

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

CALCULATE函数

CALCULATE (<表达式>,[<筛选器1>],[<筛选器2>]…)

CALCULATE函数在一个由零个或多个指定的筛选器修改的上下文中评估给定的表达式。

如果您的数据已被筛选,则CALCULATE函数会更改筛选数据的上下文,并在您通过筛选器指定的新的上下文中评估表达式。这意味着,指定列上的任何现有筛选器都将被删除,取而代之的是应用于筛选器参数中的筛选器。

示例

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

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

Calculated Fields

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

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

Row Labels

在上图中,国家/地区已过滤为美国,数据透视表中显示了前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函数最多支持两层嵌套循环。

广告