📜  Excel DAX-评估上下文

📅  最后修改于: 2020-12-01 04:44:43             🧑  作者: Mango


在DAX中,上下文是编写DAX公式时应注意的重要术语。 DAX上下文也称为评估上下文,用于确定DAX公式的评估和相应的结果。这意味着,DAX公式的结果可以根据上下文而变化。您应该清楚地了解如何使用特定的DAX上下文以及结果如何不同。

评估上下文使您能够执行动态分析,其中DAX公式的结果可以更改以反映当前行或单元格选择以及任何相关数据。了解上下文并有效使用上下文对于构建强大的DAX公式,执行动态数据分析以及对DAX公式中的问题进行故障排除非常重要。评估上下文是DAX所有高级功能的基础,您需要掌握这些功能才能创建复杂的数据分析报告。

在继续引用DAX函数以获取DAX公式中的相关用法时,您需要参考本章有关DAX上下文的内容,以使结果更加清晰。

DAX中的上下文类型

DAX支持以下评估上下文-

  • 行上下文
  • 过滤上下文

在评估DAX公式时,将考虑所有上下文并将其作为相关应用。上下文一起存在,并且根据计算值时使用的上下文,公式的结果将有所不同。例如,当您为数据透视表中的行,列和过滤器选择字段时,小计将根据小计/总计与哪一行和哪一列相关联来动态计算,并且行和列中的值由过滤器确定用过的。

行上下文

行上下文意味着DAX公式或DAX函数在任何时间点都知道它所引用的表的哪一行。您可以将行上下文视为当前行。该公式将与行上下文逐行计算。

一些DAX函数(例如X函数,FILTER())和所有计算出的列都具有行上下文。例如,如果使用DAX公式= YEAR([日期])创建计算列Year,则通过将给定DAX公式逐行应用于表中的给定列来获得计算列的值。

这意味着,如果创建了计算列,则行上下文由每个单独行中的值以及与当前行相关的列中的值组成,这由使用的DAX公式确定。尽管DAX公式不包含对行的引用,但DAX在计算值时会隐式理解行上下文。

当您定义计算列时,DAX会自动创建一个行上下文,并且所有使用DAX公式的计算值都将出现在计算列中。

相反,当您具有DAX函数(例如SUMX)时,逐行计算的值将被汇总,并且仅显示最终结果。即,中间值被丢弃。

当您具有相关表时,行上下文确定相关表中的哪些行与当前行相关联。但是,行上下文不会自动通过关系传播。您必须为此使用DAX函数-RELATED和RELATEDTABLE。

多行上下文

DAX具有迭代器功能,例如SUMX。您可以使用这些函数来嵌套行上下文。这样,您可以通过编程方式在一个内循环和一个外循环上进行递归,其中可以有多个当前行和当前行上下文。

例如,您可以使用DAX函数Earlier(),该函数存储当前操作之前的操作中的行上下文。此函数在内存中存储了两组上下文-一组上下文代表公式的内部循环的当前行,另一组上下文代表公式的外部循环的当前行。 DAX会在两个循环之间自动输入值,以便您可以创建复杂的聚合。

有关示例,请参考“场景-值的排序和比较”一章中的场景-创建可动态对值进行排序的DAX公式。

过滤上下文

过滤器上下文是指在DAX中应用于数据模型的任何过滤。筛选器上下文由数据透视表以及DAX函数创建。

筛选器数据透视表创建的上下文

由数据透视表创建的筛选器上下文是自然筛选,是通过对以下数据透视表字段进行选择而应用的-

  • 行数
  • 筛选器
  • 切片机

由数据透视表创建的筛选器上下文筛选数据模型中的基础表。如果这些表是相关的,那么过滤器将从查找表流到数据表。这意味着,您可以根据查找表的结果过滤数据表。过滤器传播不会相反发生。但是,您可以使用DAX公式根据数据表中的结果过滤查找表。

DAX函数创建的过滤器上下文

您可以使用DAX筛选器功能来定义计算字段和计算列,其中包含控制DAX公式使用的值的筛选器表达式。这些计算的字段和计算的列然后成为数据透视表字段列表的一部分,您可以将它们添加到数据透视表中。您也可以使用这些DAX筛选器功能有选择地清除特定列上的筛选器。 CALCULATE()是创建过滤器上下文的强大DAX过滤器函数的一个示例。有关示例,请参阅场景-执行复杂计算一章。

筛选上下文作为行上下文的补充

行上下文不会自动创建过滤器上下文。您可以使用包含DAX筛选器功能的DAX公式来实现相同目的。