了解迭代器函数

已完成

计算列和度量值都具有用于计算它们的上下文。 上下文定义要执行计算的粒度。 了解上下文并有效使用上下文对于生成高性能公式、动态分析以及公式中问题的故障排除十分重要。

在讨论迭代器函数之前,需要了解两个重要的上下文概念:行上下文和筛选器上下文。

了解行上下文

行上下文是粒度或当前行;这是计算数据所依据的行明细。 所有迭代器函数都按行上下文进行计算。 计算列按行上下文进行计算 - 这便是它们对每个单独行都具有列值的原因。

行上下文会自动遵循表之间的关系,以便确定哪些行(相关表中)与当前行关联。

行上下文的示例,其中你会确定哪些行与当前行关联。

例如,我们来查看以下代码:

ActualSales = Sales * RELATED( Product[Discount] )

前面的公式只使用 RELATED 函数从 Product 表获取当前产品的折扣率。 无需指定连接两个表的字段。

了解筛选器上下文

筛选器上下文是每列中允许使用的值集,基于应用于行的筛选器约束。 这些也可以被视为通过切片器或交互应用于报表的筛选器。

我们来查看筛选器上下文示例:

筛选器上下文示例的数据预览。

突出显示的单元格具有 2018 年的筛选器上下文,州等于 Alabama,季度等于 Q1。 透视表中的任何其他值会有所不同,因为它们对年份、州度具有不同的筛选器上下文。

提示

与 TABLEAU 的关联:Tableau 和 Power BI 决定计算度量值的方式是相似的;这基于你在页面上拥有的内容、所应用的筛选器等。Tableau 计算中的上下文通常与详细级别 (LOD) 表达式和表计算关联。

了解迭代器函数

讨论迭代器函数时,会侧重于行上下文的概念。

下面是简单迭代器函数的示例:

COGS = SUMX( Sales, RELATED( Product[Wholesale Price]) * Sales[Quantity] )

在前面的公式中,使用与之前相同的 COGS 公式,但会将它包装在 SUMX 迭代器函数中。

迭代器函数的示例。

  1. SUMX 函数中的第一部分是迭代器表或是计算应依据的粒度。 在此例中,迭代器表是 Sales 表。 若要执行此计算,需要计算 Sales 表中的每行。

  2. 接下来,它会在临时表中创建列表输出。

  3. 最后,它会执行在函数开头指定的聚合。

有关上下文的详细信息,请参阅:DAX 函数中的上下文

有关行和筛选器上下文的详细信息,请参阅:DAX 中的行上下文和筛选器上下文