Power Query中去除扁平化交叉表反转列重复行的方法
解决Power Query中列值反转的重复行去重问题
嘿,我明白你的需求了——就是要去掉那些「列1和列2值互换」的重复行,只保留唯一的一组对吧?之前你尝试的方法方向偏了,咱们换个更直接的Power Query专属思路来搞定它。
核心思路
给每一对「互为反转」的行生成一个统一的唯一标识:不管列1和列2的顺序如何,让它们生成的标识完全相同。之后只要根据这个标识去重,就能轻松剔除重复的反转行。
具体操作步骤
假设你的两列叫列1和列2,跟着下面的步骤来:
添加自定义标识列
在Power Query编辑器中,点击顶部菜单栏的「添加列」→「自定义列」
在弹出的公式框里输入以下公式(可以根据你的列名修改,分隔符用
|或者其他不会和内容冲突的符号都行):= Text.Combine(List.Sort({[列1], [列2]}), "|")这个公式的作用是:把
列1和列2的值放进一个列表,排序后再拼接成字符串。比如(A,B)和(B,A)都会生成A|B,完美统一标识。如果你的列是数值类型,可以用这个更稳妥的公式:
= Text.From(List.Min({[列1], [列2]})) & "|" & Text.From(List.Max({[列1], [列2]}))
根据标识列去重
- 选中刚生成的自定义列,点击顶部菜单栏的「开始」→「删除重复项」
- 此时Power Query会自动剔除所有标识重复的行,只保留每组反转行中的第一行。
为什么你之前的方法不对?
你之前新建newCol1 = Col1+2、newCol2 = Col2+1的逻辑,其实是在找满足Col1+2 = Col2+1(也就是Col1 = Col2-1)的行,这和「去除反转重复行」的需求完全不匹配,自然只能筛选出特定关系的行啦。
示例效果
比如你原数据是这样:
| 列1 | 列2 |
|---|---|
| 苹果 | 香蕉 |
| 香蕉 | 苹果 |
| 橙子 | 梨 |
| 梨 | 橙子 |
| 西瓜 | 西瓜 |
生成标识列后,前两行的标识都是苹果|香蕉,中间两行是橙子|梨,最后一行是西瓜|西瓜。删除重复项后,就会只剩下:
| 列1 | 列2 |
|---|---|
| 苹果 | 香蕉 |
| 橙子 | 梨 |
| 西瓜 | 西瓜 |
内容的提问来源于stack exchange,提问作者duncan.idahopotato




