基于条件重置的DAX计算列实现连续值统计
Power BI 实现Cut Cases>0的连续周数重置统计
要解决你遇到的“Cut Cases=0后重置连续计数”的问题,核心是先把**同Customer/Item下的连续有效行(Cut Cases>0)**划分成独立分组,再在分组内排序计数。以下是具体的DAX计算列方案:
实现代码
连续Cut周数 = VAR 当前Cut = Table1[Cut Cases] VAR 当前客户 = Table1[Customer] VAR 当前商品 = Table1[Item] VAR 当前周 = Table1[Week Begin Date] -- 标记当前行是否为需要计数的有效行 VAR 是否有效 = IF(当前Cut > 0, 1, 0) -- 计算分组ID:当前行之前同客户/商品下的无效行总数,以此分隔连续有效区间 VAR 分组ID = CALCULATE( COUNTROWS(Table1), FILTER( Table1, Table1[Customer] = 当前客户 && Table1[Item] = 当前商品 && Table1[Week Begin Date] <= 当前周 && Table1[Cut Cases] <= 0 ) ) -- 仅对有效行,在同客户/商品/分组ID内按周日期排序,得到连续计数 VAR 组内排名 = IF( 是否有效 = 1, RANKX( FILTER( Table1, Table1[Customer] = 当前客户 && Table1[Item] = 当前商品 && Table1[Cut Cases] > 0 && -- 匹配当前行的分组ID CALCULATE( COUNTROWS(Table1), FILTER( Table1, Table1[Customer] = 当前客户 && Table1[Item] = 当前商品 && Table1[Week Begin Date] <= EARLIER(Table1[Week Begin Date]) && Table1[Cut Cases] <= 0 ) ) = 分组ID ), Table1[Week Begin Date],,ASC,Dense ), 0 ) RETURN 组内排名
代码逻辑说明
- 是否有效:直接标记当前行是否需要参与计数,无效行(Cut Cases≤0)最终返回0
- 分组ID:通过统计当前行之前同Customer/Item下的无效行数,将“无Cut周之后的连续有Cut区间”划分为独立分组——每次出现无效行,后续有效行的分组ID就会递增,实现计数重置的核心逻辑
- 组内排名:在同一个Customer/Item/分组ID的有效行范围内,按周日期升序做密集排名(Dense),得到连续的计数结果
简化优化(若已有客户商品组合列)
如果你的表已经创建了CustomerItemCut组合列(客户+商品的唯一标识),可以替换代码中的客户/商品判断,简化为:
连续Cut周数 = VAR 当前Cut = Table1[Cut Cases] VAR 当前组合 = Table1[CustomerItemCut] VAR 当前周 = Table1[Week Begin Date] VAR 是否有效 = IF(当前Cut > 0, 1, 0) VAR 分组ID = CALCULATE( COUNTROWS(Table1), FILTER(Table1, Table1[CustomerItemCut] = 当前组合 && Table1[Week Begin Date] <= 当前周 && Table1[Cut Cases] <= 0) ) VAR 组内排名 = IF( 是否有效 = 1, RANKX( FILTER( Table1, Table1[CustomerItemCut] = 当前组合 && Table1[Cut Cases] > 0 && CALCULATE( COUNTROWS(Table1), FILTER(Table1, Table1[CustomerItemCut] = 当前组合 && Table1[Week Begin Date] <= EARLIER(Table1[Week Begin Date]) && Table1[Cut Cases] <= 0) ) = 分组ID ), Table1[Week Begin Date],,ASC,Dense ), 0 ) RETURN 组内排名
内容的提问来源于stack exchange,提问作者user28081423
相关产品推荐
相关产品推荐

