在迭代函数中应用不同关系:限定ALL筛选范围的DAX需求
解决方案
要实现仅让ALL('Invoice Line')和ALL('Purchase Order')作用于[Finished demand per bag],而非整个计算表达式,核心是在迭代的行上下文内部,单独对该字段应用筛选覆盖,而非将ALL筛选作用于整个SUMX外层。
直接实现写法
无需拆分额外度量值,直接在SUMX的迭代逻辑中嵌套CALCULATE,仅对目标字段应用ALL筛选:
TEST CM Total Cost Sold Bags = SUMX( mainReseptitSQL, -- 仅对当前行的Finished demand per bag忽略Invoice Line和Purchase Order的筛选 CALCULATE( mainReseptitSQL[Finished demand per bag], ALL('Invoice Line'), ALL('Purchase Order') ) * ([CM Kg price after reduced]/[CM Yield]) * [CM Sold No of Bags] )
拆分度量值的正确写法
如果希望将目标字段的逻辑拆分为独立度量值,需注意保留行级上下文(而非直接做聚合):
- 先定义行级度量值,返回当前行的
Finished demand per bag并应用ALL筛选:
CM Finished demand per bag (Row Level) = CALCULATE( SELECTEDVALUE(mainReseptitSQL[Finished demand per bag]), ALL('Invoice Line'), ALL('Purchase Order') )
- 再在主度量值中调用该行级度量值:
TEST CM Total Cost Sold Bags = SUMX( mainReseptitSQL, [CM Finished demand per bag (Row Level)] * ([CM Kg price after reduced]/[CM Yield]) * [CM Sold No of Bags] )
原有尝试的问题说明
你之前拆分的CM Finished demand per bag是聚合后的全局总和(SUMX+ALL),在迭代中调用时会返回整个表的聚合结果,而非当前行对应的值加上ALL筛选,导致计算逻辑不符合预期。
内容的提问来源于stack exchange,提问作者user19346480
相关产品推荐
相关产品推荐

