Power BI中按Category为多时间序列生成自增测试时间列求助
DAX方案:按Category生成从0开始的递增测试时间
核心思路
针对每个category分组,计算当前行之前所有Steps的累计总和,让第一个行的测试时间为0,后续行依次累加前序Steps值,实现按category独立递增的时间序列。
基础DAX计算列代码
假设你的数据表名为合并后的时间序列表,直接创建计算列(不是度量值),代码如下:
测试时间 = VAR 当前分类 = '合并后的时间序列表'[category] VAR 当前步骤值 = '合并后的时间序列表'[Steps] VAR 前序步骤总和 = CALCULATE( SUM('合并后的时间序列表'[Steps]), FILTER( ALL('合并后的时间序列表'), '合并后的时间序列表'[category] = 当前分类 && '合并后的时间序列表'[Steps] < 当前步骤值 ) ) RETURN IF(ISBLANK(前序步骤总和), 0, 前序步骤总和)
代码解释
当前分类:捕获当前行的category,确保只在同一分类内计算当前步骤值:标记当前行的Steps,用于筛选该分类下更早的步骤前序步骤总和:通过CALCULATE+FILTER筛选同一分类中Steps小于当前值的所有行,求和得到累计时间- 返回逻辑:如果是分类的第一行(无前置步骤),返回0;否则返回累计的前序步骤总和
进阶处理:Steps重复的情况
如果同一分类下存在相同的Steps值,仅靠Steps排序会出错,建议先在Power Query中给数据表添加索引列(行号),再用以下代码:
测试时间 = VAR 当前分类 = '合并后的时间序列表'[category] VAR 当前行号 = '合并后的时间序列表'[索引] VAR 前序步骤总和 = CALCULATE( SUM('合并后的时间序列表'[Steps]), FILTER( ALL('合并后的时间序列表'), '合并后的时间序列表'[category] = 当前分类 && '合并后的时间序列表'[索引] < 当前行号 ) ) RETURN IF(ISBLANK(前序步骤总和), 0, 前序步骤总和)
注意事项
- 确保
Steps列是数值类型(如整数、小数),如果是时间格式,先转换成秒数(例如:SECOND([时间列]) + MINUTE([时间列])*60 + HOUR([时间列])*3600) - 替换代码中的
合并后的时间序列表为你实际的数据表名称 - 计算列会随数据刷新自动更新,适合静态或增量更新的数据集
内容的提问来源于stack exchange,提问作者Woncheol Chang
相关产品推荐
相关产品推荐

