如何在DAX中按组实现累计计数?
在DAX中实现按组累计计数
需求示例
| 值 | 按组累计计数 |
|---|---|
| A | 1 |
| B | 1 |
| A | 2 |
| C | 1 |
| B | 2 |
| A | 3 |
| C | 2 |
实现方案
DAX做这种分组累计计数的核心是要确定行的先后顺序,所以你的表必须有一个能标记行顺序的列(比如索引、日期、时间戳)。假设你的表叫数据,且有一个索引列(没有的话先在Power Query里添加索引列),直接创建计算列即可:
按组累计计数 = VAR 当前值 = '数据'[值] VAR 当前索引 = '数据'[索引] RETURN CALCULATE( COUNTROWS('数据'), FILTER( '数据', '数据'[值] = 当前值 && '数据'[索引] <= 当前索引 ) )
公式说明
- 用变量存储当前行的「值」和「索引」,避免重复计算
- 通过筛选条件,找出所有和当前值相同、且索引不大于当前行索引的记录,统计这些记录的行数,就是当前值的累计出现次数
无索引列的处理方法
如果没有天然的顺序列,去Power Query编辑器添加:
- 选中目标表
- 点击「添加列」→「索引列」→「从1开始」
- 关闭并应用更改后,再使用上面的DAX公式即可
要是你的表是按日期/时间排序的,把公式里的'数据'[索引]换成对应的日期/时间列也能实现效果。
内容的提问来源于stack exchange,提问作者Andres Torres
相关产品推荐
相关产品推荐

