DAX函数EARLIER与用变量存储外部上下文值是否技术等价?
EARLIER函数与变量存储值的技术等价性
EARLIER基础语法
EARLIER(<column>, <number>)
问题核心
EARLIER在技术上是否等价于用变量保存外部上下文的值?
举个实际场景:假设存在Products表,要计算每个产品子类别的销售额排名。用EARLIER可以获取外层上下文的当前行销售额,对应的DAX表达式如下:
COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales]) < ProductSubcategory[TotalSubcategorySales])) + 1
另一种写法是先把外层上下文的当前值存入变量,再执行计算:
VAR curVal = ProductSubcategory[TotalSubcategorySales] RETURN COUNTROWS(FILTER(ProductSubcategory, curVal < ProductSubcategory[TotalSubcategorySales])) + 1
结论:两者技术完全等价
这两种写法在DAX的执行逻辑和最终结果上没有任何区别:
- EARLIER的本质就是从当前上下文的外层(默认第1层)捕获指定列的单一值,避免被内部迭代上下文覆盖;
- 用
VAR存储列值,同样是固定住外层上下文的当前值,后续在FILTER的行上下文迭代中不会被重新计算。
两者都是用来锁定外部上下文值的手段,实现逻辑完全一致。
内容的提问来源于stack exchange,提问作者variable
相关产品推荐
相关产品推荐

