You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件重置的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 组内排名

代码逻辑说明

  1. 是否有效:直接标记当前行是否需要参与计数,无效行(Cut Cases≤0)最终返回0
  2. 分组ID:通过统计当前行之前同Customer/Item下的无效行数,将“无Cut周之后的连续有Cut区间”划分为独立分组——每次出现无效行,后续有效行的分组ID就会递增,实现计数重置的核心逻辑
  3. 组内排名:在同一个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 19:30:11