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

Power Query Editor需求:基于列值变化生成递增组及统计列

解决方案:Power BI中实现连续分组及组内累计/最大值计算

Power Query 实现步骤

1. 标记分组切换点

添加自定义列IsNewGroup,用来判断当前行是否属于新分组:

// 假设你的[Index]列从1开始,若从0开始则把[Index]=1改成[Index]=0,[Index]-2改成[Index]-1
if [Index] = 1 then true else [Type] <> #"Changed Type"{[Index]-2}[Type]

2. 生成Increment Group列

基于切换点的累计求和生成分组编号:

List.Sum(List.Range(#"Added Custom"[IsNewGroup], 0, [Index]))

3. 计算组内累计与最大值

  • 用分组依据功能,按Increment Group分组,聚合方式选择「所有行」,得到每个组的行集合
  • 添加自定义列Cumulative Count Sales计算组内累计:
    List.Accumulate([All Rows][Count Sales], {}, (state, current) => state & {List.Sum(state) + current})
    
  • 添加自定义列Max for Group取组内累计的最大值:
    List.Max(List.Accumulate([All Rows][Count Sales], {}, (state, current) => state & {List.Sum(state) + current}))
    
  • 最后展开这两个列,与原表数据合并即可

DAX 实现步骤

1. 生成Increment Group列

通过统计当前行之前的Type切换次数生成分组编号:

Increment Group = 
VAR CurrentIndex = 'Table'[Index]
VAR CurrentType = 'Table'[Type]
RETURN
SUMX(
    FILTER('Table', 'Table'[Index] <= CurrentIndex),
    IF(
        'Table'[Index] = 1,
        1,
        IF('Table'[Type] <> CALCULATE(MAX('Table'[Type]), FILTER('Table', 'Table'[Index] = EARLIER('Table'[Index]) - 1)), 1, 0)
    )
)

2. 计算Cumulative Count Sales列

筛选同组内Index小于等于当前行的记录,求和得到累计值:

Cumulative Count Sales = 
VAR CurrentGroup = 'Table'[Increment Group]
VAR CurrentIndex = 'Table'[Index]
RETURN
SUMX(
    FILTER('Table', 'Table'[Increment Group] = CurrentGroup && 'Table'[Index] <= CurrentIndex),
    'Table'[Count Sales]
)

3. 计算Max for Group列

筛选同组的所有累计值,取最大值:

Max for Group = 
VAR CurrentGroup = 'Table'[Increment Group]
RETURN
MAXX(
    FILTER('Table', 'Table'[Increment Group] = CurrentGroup),
    'Table'[Cumulative Count Sales]
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:03:13