DAX中累计Backlog计算方案咨询(非递归实现)
DAX实现非负累计积压(Backlog)计算
DAX不允许递归引用上一行的计算结果,无法直接照搬Excel的逻辑。我们可以通过累计供需差结合历史最小累计供需差的方式,高效计算出非负的累计积压值,核心逻辑是:每个时间点的积压等于当前累计供需差减去历史上出现过的最小累计供需差(若最小累计为正则取0),最终结果取与0的较大值。
实现Measure代码
Backlog = VAR CurrentIndex = MAX('Table'[Index]) -- 计算到当前月份的累计供需差(需求-产能) VAR CumulativeDiff = SUMX( FILTER(ALL('Table'), 'Table'[Index] <= CurrentIndex), 'Table'[DEMAND] - 'Table'[Capacity] ) -- 计算从第一个月到当前月的所有累计供需差中的最小值 VAR MinCumulativeDiff = MINX( FILTER(ALL('Table'), 'Table'[Index] <= CurrentIndex), SUMX( FILTER(ALL('Table'), 'Table'[Index] <= EARLIER('Table'[Index])), 'Table'[DEMAND] - 'Table'[Capacity] ) ) -- 确保积压值不低于0 RETURN MAX(0, CumulativeDiff - MIN(0, MinCumulativeDiff))
代码说明
CurrentIndex:获取当前上下文的最大索引值,确定计算截止的月份(若使用标准日期列,可直接替换为日期字段)。CumulativeDiff:统计从第一个月到当前月的累计供需差值(需求减产能)。MinCumulativeDiff:遍历所有截止到当前月的时间点,计算每个点的累计供需差,再取这些值中的最小值。- 最终返回值:用当前累计供需差减去历史最小累计供需差(若最小累计为正则减0),再与0取较大值,保证积压不会为负。
内容的提问来源于stack exchange,提问作者Maarten
相关产品推荐
相关产品推荐

