Excel DAX – 评估上下文

Excel DAX – 评估上下文


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

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

当您不断参考 DAX 函数以了解 DAX 公式中的相关用法时,您需要参考有关 DAX 上下文的这一章以获得清晰的结果。

DAX 中的上下文类型

DAX 支持以下评估上下文 –

  • 行上下文
  • 过滤上下文

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

行上下文

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

某些 DAX 函数(例如,X 函数、FILTER ())和所有计算列都具有行上下文。例如,如果您使用 DAX 公式 = YEAR ([Date]) 创建计算列 Year,则计算列的值是通过在表中的给定列上逐行应用给定 DAX 公式获得的。

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

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

相比之下,当您使用 SUMX 等 DAX 函数时,将逐行计算的值相加,并且只会显示最终结果。也就是说,中间值被丢弃。

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

多行上下文

DAX 具有类似于 SUMX 的迭代器函数。您可以使用这些函数来嵌套行上下文。有了这个,以编程方式,您可以对内部循环和外部循环进行递归,您可以在其中拥有多个当前行和当前行上下文。

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

有关示例,请参阅方案 – 排名和比较值一章中的方案 – 创建动态排名值的 DAX 公式。

过滤上下文

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

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

由数据透视表创建的过滤器上下文是通过对以下数据透视表字段所做的选择应用的自然过滤 –

  • 过滤器
  • 切片机

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

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

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

过滤上下文作为行上下文的补充

行上下文不会自动创建过滤器上下文。您可以使用包含 DAX 过滤器函数的 DAX 公式实现相同的效果。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁