Excel Dax 简明教程

Excel DAX - Performing Complex Calculations

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

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

  2. 应用筛选器到 DAX 公式。

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

  4. 使用外部循环的值。

Creating Custom Calculations for a PivotTable

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

CALCULATE Function

CALCULATE(<expression>, [<filter1>], [<filter2>]…)

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

如果您的数据已过筛选,CALCULATE 函数将更改筛选数据的上下文,并在您通过筛选器指定的新的上下文中计算表达式。这意味着,将删除已指定列上的任何现有筛选器,而改为应用在筛选器自变量中使用的筛选器。

Example

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

  1. 定义一个计算域 - 奖牌计数的百分比,如下图所示。

calculated fields

通过这个 DAX 公式,结果表中的所有行都会在 CALCULATE 函数中考虑,其中筛选器包含 ALL 函数。通过这种方式,您在分母中有总数。

您的数据透视表将如下图所示。

row labels

在上面的截图中,将国家/地区筛选为美国,并且在数据透视表中显示了前 18 个值。接下来,您可以在数据透视表中动态筛选值。但是,计算将通过您使用的自定义 DAX 公式来进行更正。

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

Filtering Data in Formulas

可以在 DAX 公式中创建筛选器,以从源数据中选择用作计算的值。为此,可以通过定义筛选器表达式以及使用作为 DAX 公式输入的表来实现。

筛选器表达式让你可以获取源数据的一个子集。筛选器在每次更新 DAX 公式的结果时会根据数据的当前上下文动态应用,你可以确信获得准确的预期结果。

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

Example

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

filtering data

使用此计算字段后,透视表会显示在下个屏幕截图中。

calculated field screenshot

正如你观察到的那样,带新计算字段的右侧透视表中的值与左侧透视表中的值匹配,左侧透视表明确地将筛选器应用到了赛季字段中。

Note − DAX 筛选器和值函数返回一个表,但从不会将表或行直接返回到数据模型中,因此始终嵌入在另一个 DAX 函数中。

有关这些 DAX 函数的详细信息,请参阅章节 - DAX 筛选器函数。

Adding and Removing Filters Dynamically

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

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

Using a Value from an Outer Loop

可以使用来自先前循环的一个值来使用 DAX EARLIER 函数创建一组相关计算。此 DAX 函数最多支持两级嵌套循环。