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

