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

PowerBI中用DAX实现仅累加当前值大于前值的列求和咨询

DAX实现:仅累加当前行大于前一行的小时统计值

假设你的数据集按小时排序(需包含明确的排序列,如Hour序号列或DateTime时间列),目标是计算g1和g2的总计,仅当当前行数值大于前一行时,将当前行值计入求和结果(手动计算结果为g1=168,g2=173)。以下是具体DAX实现方案:

基础实现(基于小时序号列)

若你的表名为HourlyData,包含Hour(连续整数,如1、2、3...)、g1、g2列,可使用以下度量值:

计算g1符合条件的总计

g1_符合条件总计 = 
SUMX(
    HourlyData,
    VAR 当前值 = HourlyData[g1]
    VAR 前一行值 = 
        CALCULATE(
            MAX(HourlyData[g1]),
            FILTER(
                HourlyData,
                HourlyData[Hour] = EARLIER(HourlyData[Hour]) - 1
            )
        )
    RETURN
        // 若第一行无需计入(无前置行),则添加NOT(ISBLANK(前一行值))判断
        IF(当前值 > 前一行值, 当前值, 0)
)

计算g2符合条件的总计

g2_符合条件总计 = 
SUMX(
    HourlyData,
    VAR 当前值 = HourlyData[g2]
    VAR 前一行值 = 
        CALCULATE(
            MAX(HourlyData[g2]),
            FILTER(
                HourlyData,
                HourlyData[Hour] = EARLIER(HourlyData[Hour]) - 1
            )
        )
    RETURN
        IF(当前值 > 前一行值, 当前值, 0)
)

适配DateTime时间列的版本

若你的时间列是DateTime格式(而非整数序号),可将前一行值的计算替换为DATEADD函数,更简洁:

g1_符合条件总计 = 
SUMX(
    HourlyData,
    VAR 当前值 = HourlyData[g1]
    VAR 前一行值 = 
        CALCULATE(
            MAX(HourlyData[g1]),
            DATEADD(HourlyData[DateTime], -1, HOUR)
        )
    RETURN
        IF(当前值 > 前一行值, 当前值, 0)
)

关键说明

  • SUMX用于逐行迭代数据集,对每一行执行判断逻辑
  • 前一行值通过筛选前一小时的记录获取对应列的值
  • 若第一行无需计入(无前置参考行),需在IF条件中添加NOT(ISBLANK(前一行值)),避免第一行因空白值被误判为符合条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:52:11