DAX计算列循环依赖问题求助:日历维度表标记事实表最大日期
解决DIM Calendar计算列循环依赖问题
问题出在原代码中FILTER('FACT', SUM('FACT'[Amount]) > 0)的行级筛选逻辑——遍历FACT表行时,由于DIM Calendar与FACT的关联关系,会自动引入当前DIM行的[%DateKey]筛选上下文,和计算列的依赖形成循环。
可以通过先聚合FACT表的DateKey维度,再筛选有效数据的方式避免循环,以下是可行的DAX代码:
Max_Date_Fact = VAR _MaxDateKey = MAXX( FILTER( VALUES('FACT'[%DateKey]), CALCULATE(SUM('FACT'[Amount])) > 0 ), 'FACT'[%DateKey] ) RETURN IF('DIM Calendar'[%DateKey] = _MaxDateKey, 1, 0)
代码逻辑说明:
VALUES('FACT'[%DateKey]):提取FACT表中所有唯一的[%DateKey]值,避免遍历FACT的每一行。CALCULATE(SUM('FACT'[Amount])):针对每个唯一的DateKey,计算其对应的金额总和,此时上下文仅锁定单个DateKey,不会关联到DIM Calendar的行上下文。FILTER(...):筛选出金额总和大于0的DateKey集合。MAXX(...):从有效DateKey集合中取出最大值。- 最后通过IF判断当前DIM Calendar的[%DateKey]是否等于该最大值,返回1或0。
也可以用SUMMARIZE实现相同逻辑,代码如下:
Max_Date_Fact = VAR ValidDateGroups = FILTER( SUMMARIZE('FACT', 'FACT'[%DateKey], "TotalAmt", SUM('FACT'[Amount])), [TotalAmt] > 0 ) VAR _MaxDateKey = MAXX(ValidDateGroups, 'FACT'[%DateKey]) RETURN IF('DIM Calendar'[%DateKey] = _MaxDateKey, 1, 0)
内容的提问来源于stack exchange,提问作者titatovenaar
相关产品推荐
相关产品推荐

