如何使用Power Query对比两个CSV文件,查找用户增删及密钥集变更?
Excel Power Query 双CSV用户密钥对比实现方案
操作步骤
1. 导入并标记两份源数据
- 你已经将CSV放入指定文件夹,导入时新增
数据日期自定义列,区分是首日(Day1)还是次日(Day2)数据,保留用户、密钥、数据日期三列即可 - 也可以分别导入两份CSV为两个独立查询,分别命名为
Day1数据、Day2数据,结构统一为【用户、密钥】两列
2. 全外部联接合并两份数据
- 新建空白查询,选择合并查询功能,联接种类选完全外部(左和右),匹配列为
用户 - 展开合并后的嵌套列,得到最终基础结构:
用户、Day1密钥、Day2密钥三列
对应的M代码片段参考:
= Table.NestedJoin(Day1数据, {"用户"}, Day2数据, {"用户"}, "Day2数据", JoinKind.FullOuter) = Table.ExpandTableColumn(上一步操作名称, "Day2数据", {"密钥"}, {"Day2密钥"}) = Table.RenameColumns(上一步操作名称,{{"密钥", "Day1密钥"}})
3. 新增对比结果列判断状态
- 新增自定义列
变更类型,公式逻辑:- 如果
Day1密钥为空 → 新增用户 - 如果
Day2密钥为空 → 移除用户 - 如果
Day1密钥不等于Day2密钥→ 密钥变更 - 其余情况 → 无变化
自定义列公式:if [Day1密钥] = null then "新增用户" else if [Day2密钥] = null then "移除用户" else if [Day1密钥] <> [Day2密钥] then "密钥变更" else "无变化"
- 如果
- 再新增
变更详情列,公式:if [变更类型] = "密钥变更" then "原密钥:" & [Day1密钥] & " → 新密钥:" & [Day2密钥] else null
4. 过滤输出结果
- 过滤掉
变更类型为无变化的行,剩余结果完全匹配你的预期:
| 用户 | 变更类型 | 变更详情 |
|---|---|---|
| Dave 1 | 移除用户 | null |
| Dave 2 | 密钥变更 | 原密钥:Key 4/ Key 5 → 新密钥:Key 1/ Key 5 |
| Dave 5 | 新增用户 | null |
可参考的学习方向
- Power Query 联接种类逻辑:重点掌握完全外部、左外部、内部联接的适用场景
- Power Query 自定义列与条件判断语法
- 文件夹批量导入自动化逻辑:后续可优化为每日只需将新CSV放入指定文件夹,刷新即可自动生成对比结果,无需手动调整查询
内容的提问来源于stack exchange,提问作者Mickey
相关产品推荐
相关产品推荐

