📅  最后修改于: 2020-12-01 04:51:04             🧑  作者: Mango
DAX公式可以执行复杂的计算,包括自定义聚合,过滤和条件值的使用。您可以使用DAX执行以下操作-
DAX函数CALCULATE和CALCULATETABLE是强大而灵活的。它们对于定义计算字段很有用。这些DAX功能使您可以更改执行计算的上下文。您还可以自定义要执行的聚合或数学运算的类型。
计算(<表达式>,[<过滤器1>],[<过滤器2>] …)
CALCULATE函数在由零个或多个指定过滤器修改的上下文中计算给定表达式。
如果已过滤数据,则CALCULATE函数更改过滤数据的上下文,并在由过滤器指定的新上下文中评估表达式。这意味着将删除指定列上的所有现有过滤器,并改用filter参数中使用的过滤器。
假设您要显示按国家/地区名称过滤的奖牌百分比。您的计算应获得百分比值,该百分比值将覆盖您在数据透视表中对“国家/地区”应用的过滤器。
定义一个计算字段-奖牌计数百分比,如以下屏幕截图所示。
使用此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函数最多支持两个级别的嵌套循环。