Excel Power Query:筛选透视后状态无变更行或前置去重
解决方案
方案一:透视前处理(推荐,性能更优)
针对大型数据源,在透视前筛选出存在状态变化的ID,能大幅减少后续数据处理量,具体步骤:
- 在Power Query加载源数据后,按
ID分组:点击主页 > 分组依据,分组列选ID,新列名设为StatusList,操作选择所有行。 - 添加自定义列,判断该ID下状态是否有变化,输入公式:
逻辑:提取该ID下所有状态去重后,若和第一个状态的单元素列表不一致,说明存在状态变化。List.Distinct([StatusList][Status]) <> {[StatusList][Status]{0}} - 筛选自定义列为
true的行,展开StatusList列恢复原数据结构,再进行透视或其他后续处理。
方案二:透视后处理
如果已完成透视操作,可按以下步骤筛选:
- 选中所有动态生成的日期状态列:按住Ctrl点击所有日期列,或通过开始 > 选择列批量选中。
- 添加自定义列,判断当前行所有状态列值是否完全相同,输入公式:
逻辑:把当前行的状态列转为列表,检查所有元素是否等于第一个元素,返回List.AllTrue(List.Transform(Record.ToList(Record.SelectFields(_, List.RemoveFirstN(Table.ColumnNames(_),1))), each _ = Record.Field(_, List.RemoveFirstN(Table.ColumnNames(_),1){0})))true代表无变化,false代表有变化。 - 筛选自定义列为
false的行,最后删除该自定义列即可。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

