首页 > 解决方案 > Power Query (PowerBI) 解决多对多关系

问题描述

我有两个来自两个来源的联系人表,我需要关联:

ID 电子邮件 给定的名称
0 愤怒@mad.com 汤普森 苏珊
1 愤怒@mad.com 汤普森 苏珊娜
2 高兴@mad.com 麦克尼尔 乔治
3 快乐@sad.com 汤普森 苏珊娜
代码 给定的名称 开始日期
65432 汤普森 苏珊 2020/01/01
65432 汤普森 2019/01/01
65432 苏珊 2018/01/01
65432 2017/01/01
65432 汤普森 苏珊娜 2016/01/01
45678 麦克尼尔 乔治 2020/06/20
45678 麦克尼尔 2019/06/20
45678 乔治 2018/06/20
45678 2017/06/20
25581 汤普森 苏珊娜 2020/01/01

我需要一种方法将表 1 中的 ID 链接到表 2 中的代码。但是,两个表之间唯一的共同点是员工的姓名,这是多对多的关系,我无法知道哪个员工是哪个。

这两个表都容易出现人为错误,其中同一个人出现多个姓名拼写或遗漏。但是,可以确定,在表 1 中,电子邮件地址对每个人都是唯一的(ID 0 和 1 是同一个人,因为他们使用相同的电子邮件地址),而在表 2 中,代码对每个人都是唯一的(所有代码为 65432 的条目都是同一个人,等等)

但是对于如何为每个表创建将它们链接在一起所需的唯一键,我完全不知所措。

我在想,对于表 1,可以制作一个由姓名 + 电子邮件地址组成的唯一键,但我被困在那里。

有任何想法吗?

标签: powerbipowerquery

解决方案


在表 1 中:您可以考虑按电子邮件分组,并保留其他列的 MIN/MAX 值。请记住,这将为您提供一些接近正确的结果,但并非每次都正确。但是这样一来,您最终将在每行中拥有 1 个电子邮件和 id/姓氏/名字。

在表 2 中:您可以在 Code 列上应用与上述相同的 Group by。这也将移动一些冗余数据(lofically)并以更好的方式为您提供数据。

在表 2 中:您还需要首先决定要保留哪个日期,每个代码的 MAX 还是 MIN?

最后,一个大问题,你想如何连接表 1 和表 2。唯一的选择是我可以看到 First name 和 Last name 列。但不能保证您可以完全加入,因为名称拼写存在人为错误。


推荐阅读