首页 > 解决方案 > PowerQuery - 当第二个表中的行在第一个表中不存在时,将行从第二个表添加到表中

问题描述

我有一种情况,当第二个表中的行在主表中不存在时,我需要合并 2 个表或将第二个表中的记录添加到主表中。解释一下,我有一系列按月/年记录记录的小时数,并非所有月份都存在,而要拥有干净的数据系列,我需要所有月份,如果以正确的时间记录,否则为 0 行。类似:

This is the recording table    This is the complete table       This should be the outcome
WO  ID  Date       Hrs          WO  ID  Date       Hrs          WO  ID  Date    Hrs
A   1   01-01-20    4           A   1   01-01-20    0           A   1   01-01-20    4
A   1   01-02-20    8           A   1   01-02-20    0           A   1   01-02-20    8
A   2   01-03-20    3           A   1   01-03-20    0           A   1   01-03-20    0
A   2   01-04-20    4           A   1   01-04-20    0           A   1   01-04-20    0
B   1   01-01-20    6           A   1   01-05-20    0           A   1   01-05-20    0
B   1   01-02-20    2           A   1   01-06-20    0           A   1   01-06-20    0
B   1   01-03-20    3           A   1   01-07-20    0           A   1   01-07-20    0
B   6   01-02-20    8           A   1   01-08-20    0           A   1   01-08-20    0
B   6   01-03-20    5           A   1   01-09-20    0           A   1   01-09-20    0
B   6   01-04-20    3           A   1   01-10-20    0           A   1   01-10-20    0
B   6   01-05-20    7           A   1   01-11-20    0           A   1   01-11-20    0
B   6   01-06-20    4           A   1   01-12-20    0           A   1   01-12-20    0
                                A   2   01-01-20    0           A   2   01-01-20    0
                                A   2   01-02-20    0           A   2   01-02-20    0
                                A   2   01-03-20    0           A   2   01-03-20    3
                                A   2   01-04-20    0           A   2   01-04-20    4
                                A   2   01-05-20    0           A   2   01-05-20    0
                                A   2   01-06-20    0           A   2   01-06-20    0
                                A   2   01-07-20    0           A   2   01-07-20    0
                                A   2   01-08-20    0           A   2   01-08-20    0
                                A   2   01-09-20    0           A   2   01-09-20    0
                                A   2   01-10-20    0           A   2   01-10-20    0
                                A   2   01-11-20    0           A   2   01-11-20    0
                                A   2   01-12-20    0           A   2   01-12-20    0
                                B   1   01-01-20    0           B   1   01-01-20    6
                                B   1   01-02-20    0           B   1   01-02-20    2
                                B   1   01-03-20    0           B   1   01-03-20    3
                                B   1   01-04-20    0           B   1   01-04-20    0
                                B   1   01-05-20    0           B   1   01-05-20    0
                                B   1   01-06-20    0           B   1   01-06-20    0
                                B   1   01-07-20    0           B   1   01-07-20    0
                                B   1   01-08-20    0           B   1   01-08-20    0
                                B   1   01-09-20    0           B   1   01-09-20    0
                                B   1   01-10-20    0           B   1   01-10-20    0
                                B   1   01-11-20    0           B   1   01-11-20    0
                                B   1   01-12-20    0           B   1   01-12-20    0
                                B   6   01-01-20    0           B   6   01-01-20    0
                                B   6   01-02-20    0           B   6   01-02-20    8
                                B   6   01-03-20    0           B   6   01-03-20    5
                                B   6   01-04-20    0           B   6   01-04-20    3
                                B   6   01-05-20    0           B   6   01-05-20    7
                                B   6   01-06-20    0           B   6   01-06-20    4
                                B   6   01-07-20    0           B   6   01-07-20    0
                                B   6   01-08-20    0           B   6   01-08-20    0
                                B   6   01-09-20    0           B   6   01-09-20    0
                                B   6   01-10-20    0           B   6   01-10-20    0
                                B   6   01-11-20    0           B   6   01-11-20    0
                                B   6   01-12-20    0           B   6   01-12-20    0

有没有办法实现这个或类似的结果,以便每个组合的记录都存在?PowerBI 也是一个选项 (DAX)。

谢谢

标签: powerbipowerquery

解决方案


不是非常优雅但有效......创建一个“种子”表,例如:

WO ID Hours
A  1  0
A  2  0
B  1  0
B  2  0

然后创建一个相关日期的新表(Modeleing / New Table)(因为你提到了DAX):

日期 = 日历(“2020 年 1 月 1 日”,“2020 年 1 月 12 日”)

最后,使用 crossjoin 函数将所有日期的表创建为另一个新表(在连接表中创建所有记录组合):

BaseTable = CROSSJOIN(日期,种子)

然后,BaseTable 就是问题陈述中的“完整”表。您可以在 BaseTable 和具有实际小时信息的表中创建一个连接 WO、ID 和 Date 的计算列,在关系视图中加入该键列,然后在 BaseTable 中创建一个新列,从基础中获取最大小时数表和相关表中的小时数。

如果这没有意义,请回复评论。

请注意,这是一种“快速而肮脏”的方法,因为组合的数量很少。如果您的实际“关键列”更复杂或不时更改,我会考虑使用可能带有外部参数的生成函数来提出类似“种子”表的内容。


推荐阅读