powerbi - 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)。
谢谢
解决方案
不是非常优雅但有效......创建一个“种子”表,例如:
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 中创建一个新列,从基础中获取最大小时数表和相关表中的小时数。
如果这没有意义,请回复评论。
请注意,这是一种“快速而肮脏”的方法,因为组合的数量很少。如果您的实际“关键列”更复杂或不时更改,我会考虑使用可能带有外部参数的生成函数来提出类似“种子”表的内容。
推荐阅读
- reactjs - React 中的 useEffect()
- phpstorm - PhpStorm - 通过项目搜索可翻译的字符串
- python - 使用python检查来自JSON的URL的网络响应
- visual-studio - 如何在 Visual Studio 的 VsVIM 中将 ESC 键重新映射到 CAPS LOCK
- python - 如何通过python应用为列中的每个值分配不同的颜色
- azure - 如何修复 AKS for Apache Ignite 上的 CrashBackLoopOff 问题?
- javascript - 查找纯文本中的链接并将其转换为超链接
- python - 如何从视频中提取特征并将特征存储到单个 H5 文件中
- rest - 如何在通过surgemail调用rest api时删除.htaccess身份验证
- python - 在测试功能中使用夹具