PowerBI计算度量中的溢出积压

PowerBI计算度量中的溢出积压,powerbi,dax,Powerbi,Dax,我的数据如下: 工厂ID 周 容量 要求 1. 21 1000 500 1. 22 1000 1200 1. 23 1500 1600 1. 24 1500 1100 2. 21 1000 500 2. 22 2000 1900 2. 23 2000 1000 2. 24 2000 2500 3. 21 1000 200 3. 22 1000 900 3. 23 1000 1300 3. 24 1000 800 在DAX中没有循环,也没有递归,这意味着我们必须编写一些非常难看的循环展开DAX代码

我的数据如下:

工厂ID 周 容量 要求 1. 21 1000 500 1. 22 1000 1200 1. 23 1500 1600 1. 24 1500 1100 2. 21 1000 500 2. 22 2000 1900 2. 23 2000 1000 2. 24 2000 2500 3. 21 1000 200 3. 22 1000 900 3. 23 1000 1300 3. 24 1000 800
在DAX中没有循环,也没有递归,这意味着我们必须编写一些非常难看的循环展开DAX代码。这是工作度量的最小实现,但为了使其在一般情况下工作,必须添加BacklogWeekNN变量,直到达到模型中可能的最大周深度

Backlog = 
VAR MinWeek = CALCULATE(MIN( T[Week] ), REMOVEFILTERS( T ) )
VAR MaxWeek = MAX( T[Week] )
VAR TAggregated = 
ADDCOLUMNS(
    CALCULATETABLE( VALUES( T[Week] ), T[Week] <= MaxWeek, REMOVEFILTERS( T ) ),
    "@Capacity", CALCULATE( SUM( T[CAPACITY] ), ALLEXCEPT( T, T[Week], T[Factory ID] ) ),
    "@Request", CALCULATE( SUM( T[Request] ), ALLEXCEPT( T, T[Week], T[Factory ID] ) )
    )
VAR BacklogWeek00 = SUMX( FILTER( TAggregated, T[Week] = MinWeek ), [@Capacity] - [@Request] ) + 0
VAR BacklogWeek01 = SUMX( FILTER( TAggregated, T[Week] = MinWeek + 1), [@Capacity] - [@Request] ) + IF(BacklogWeek00 > 0, 0, BacklogWeek00) 
VAR BacklogWeek02 = SUMX( FILTER( TAggregated, T[Week] = MinWeek + 2), [@Capacity] - [@Request] ) + IF(BacklogWeek01 > 0, 0, BacklogWeek01)  
VAR BacklogWeek03 = SUMX( FILTER( TAggregated, T[Week] = MinWeek + 3), [@Capacity] - [@Request] ) + IF(BacklogWeek02 > 0, 0, BacklogWeek02)  
VAR Result = IF(BacklogWeek03 > 0, 0, BacklogWeek03)
RETURN Result
Backlog=
VAR MinWeek=计算(最小(T[周]),移除过滤器(T))
VAR MaxWeek=MAX(T[周])
变量TAggregated=
添加列(
可计算表(值(T[周]),T[周]0,0,BacklogWeek00)
VAR BacklogWeek02=SUMX(过滤器(TAggregated,T[Week]=MinWeek+2),[@Capacity]-[@Request])+IF(BacklogWeek01>0,0,BacklogWeek01)
VAR BacklogWeek03=SUMX(过滤器(TAggregated,T[Week]=MinWeek+3),[@Capacity]-[@Request])+IF(BacklogWeek02>0,0,BacklogWeek02)
VAR结果=如果(BacklogWeek03>0,0,BacklogWeek03)
返回结果
通过这种方式,我们可以使用切片器来选择工厂,从而获得所需的结果矩阵(恐怕问题中的预期结果样本中存在一些错误)


编辑:我使用“FILTER(TAggregated,T[Week]=MinWeek)”而不是等效的CALCULATE/CalculateTable DAX代码,以避免发生上下文转换,因为weeks表只有很少的行需要迭代(如果保留几年的历史,我可以想象最多几十行或最多几百行)

工厂1,第22周,值不应该等于-222吗?@AntrikshSharma工厂1周1积压=1000-500-0(上一周的积压)=0周2积压=1000-1200-0(上一周的积压)=-200周3积压=1500-1600-200(上一周的积压)=-300我希望这能起到帮助作用。我曾尝试运行backlogweekNN循环,但没有成功。我需要创建52个积压变量以预测明年。非常感谢您提供此解决方案。这是一个救命的解决方案。性能不会很好,但我希望可以接受。DAX解释器在使用时有点慢是一种代码,但无法使用递归或循环,因此唯一的替代方法是在power query中移动此计算,或将此计算移动到数据源以准备快照表,其中包含为所需工厂组预先计算的积压工作,这应事先决定。