了解迭代器函数
计算列和度量值都具有用于计算它们的上下文。 上下文定义要执行计算的粒度。 了解上下文并有效使用上下文对于生成高性能公式、动态分析以及公式中问题的故障排除十分重要。
在讨论迭代器函数之前,需要了解两个重要的上下文概念:行上下文和筛选器上下文。
了解行上下文
行上下文是粒度或当前行;这是计算数据所依据的行明细。 所有迭代器函数都按行上下文进行计算。 计算列按行上下文进行计算 - 这便是它们对每个单独行都具有列值的原因。
行上下文会自动遵循表之间的关系,以便确定哪些行(相关表中)与当前行关联。
例如,我们来查看以下代码:
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 迭代器函数中。
SUMX 函数中的第一部分是迭代器表或是计算应依据的粒度。 在此例中,迭代器表是 Sales 表。 若要执行此计算,需要计算 Sales 表中的每行。
接下来,它会在临时表中创建列表输出。
最后,它会执行在函数开头指定的聚合。
参考链接
有关上下文的详细信息,请参阅:DAX 函数中的上下文
有关行和筛选器上下文的详细信息,请参阅:DAX 中的行上下文和筛选器上下文