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

Power BI中用DAX计算值的连续出现次数(Streak列需求)

正确DAX实现连续UsedMLLWOP=1次数统计(Streak列)

针对你的需求,以下是符合规则的DAX计算列实现:

Streak = 
VAR CurrentPerson = '22PPReport-VetList'[PersonnelNumber]
VAR CurrentPeriod = '22PPReport-VetList'[PayPeriodID]
VAR CurrentValue = '22PPReport-VetList'[UsedMLLWOP]

-- 查找当前人员在当前周期之前最后一个UsedMLLWOP=0的周期
VAR LastZeroPeriod = 
    CALCULATE(
        MAX('22PPReport-VetList'[PayPeriodID]),
        FILTER(
            ALL('22PPReport-VetList'),
            '22PPReport-VetList'[PersonnelNumber] = CurrentPerson
            && '22PPReport-VetList'[UsedMLLWOP] = 0
            && '22PPReport-VetList'[PayPeriodID] < CurrentPeriod
        )
    )

-- 处理无前置0的情况:取该人员最小周期减1,确保第一个1从1开始计数
VAR StartPeriod = 
    IF(
        ISBLANK(LastZeroPeriod),
        MINX(
            FILTER(ALL('22PPReport-VetList'), '22PPReport-VetList'[PersonnelNumber] = CurrentPerson),
            '22PPReport-VetList'[PayPeriodID]
        ) - 1,
        LastZeroPeriod
    )

-- 统计从起始点到当前周期内连续的UsedMLLWOP=1的次数
VAR StreakCount = 
    CALCULATE(
        COUNTROWS('22PPReport-VetList'),
        FILTER(
            ALL('22PPReport-VetList'),
            '22PPReport-VetList'[PersonnelNumber] = CurrentPerson
            && '22PPReport-VetList'[PayPeriodID] > StartPeriod
            && '22PPReport-VetList'[PayPeriodID] <= CurrentPeriod
            && '22PPReport-VetList'[UsedMLLWOP] = 1
        )
    )

RETURN
    IF(CurrentValue = 0, 0, StreakCount)

代码逻辑说明

  1. 基础变量定义:获取当前行的人员编号、周期编号和UsedMLLWOP值,确保计算基于当前行上下文。
  2. 查找最近的前置0周期:定位当前人员在当前周期之前最后一个UsedMLLWOP=0的记录,这个点是连续1的起始分界点。
  3. 处理无前置0的场景:如果当前人员在当前周期之前没有UsedMLLWOP=0的记录(比如首次出现1),则用该人员的最小周期减1作为起始点,保证第一个1的计数从1开始。
  4. 统计连续次数:计算从分界点之后到当前周期内,所有UsedMLLWOP=1的行数,即为当前的连续次数。
  5. 返回结果:如果当前行UsedMLLWOP=0,直接返回0;否则返回统计的连续次数。

原代码问题分析

  1. 语法错误:原代码中使用了HTML转义字符&amp;&amp;,实际DAX中需要使用&&作为逻辑与运算符,这会导致代码无法正常运行。
  2. 上下文错误:计算列中使用SELECTEDVALUE不合适,SELECTEDVALUE主要用于度量值的筛选上下文,计算列应直接引用当前行字段(如'22PPReport-VetList'[PersonnelNumber])来获取准确的行上下文值。
  3. 无前置0的场景未处理:当当前人员首次出现UsedMLLWOP=1时,lastweekStart会返回空白,此时PayPeriodID >= lastweekStart会包含所有历史记录,逻辑上存在隐患,比如如果人员之前有非连续的1,会导致计数错误。

内容的提问来源于stack exchange,提问作者Qwest336

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:57:04