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
相关产品推荐
相关产品推荐

