power query 根据两个日期之间的事务日期合并两个表
Posted
技术标签:
【中文标题】power query 根据两个日期之间的事务日期合并两个表【英文标题】:power query merge two tables based on the transaction date between two dates 【发布时间】:2020-06-11 20:04:20 【问题描述】:我正在尝试使用 Power Query 在两个表(1 - 事务表和 2 - 员工 ID 和日期范围)之间执行连接,其中事务日期介于两个日期之间。
交易表
+-------+-----------------+--------+
| EmpID | TransactionDate | Amount |
+-------+-----------------+--------+
| 123 | 5/5/2019 | 30 |
| 345 | 2/23/2019 | 40 |
| 456 | 4/3/2018 | 50 |
+-------+-----------------+--------+
员工编号
+-------+-----------+-----------+
| EmpID | StartDate | EndDate |
+-------+-----------+-----------+
| 123 | 5/1/2019 | 5/30/2019 |
+-------+-----------+-----------+
期望的输出
+-------+-----------------+--------+
| EmpID | TransactionDate | Amount |
+-------+-----------------+--------+
| 123 | 5/5/2019 | 30 |
| 456 | 4/3/2018 | 50 |
+-------+-----------------+--------+
如果我要在 SQL 中执行此操作,我会编写以下代码:
select *
from transaction as A
inner join empID_date as B
on A.EmployeeID = B.EmployeeID
and A.TransactionDate >= B.StartDate
and A.TransactionDate <= B.EndDate
是否可以在 Excel Power Query 中执行此操作?谢谢。
【问题讨论】:
ID表没有456的情况下,为什么想要的输出中有两列? 【参考方案1】:进行标准合并,然后过滤。
-
使用内部联接合并查询。
展开开始和结束日期列。
选择满足您条件的列。
删除多余的列。
let
Source = < Transaction table source or definition goes here >,
#"Merged Queries" = Table.NestedJoin(Source, "EmpID", emp_ID, "EmpID", "emp_ID", JoinKind.Inner),
#"Expanded emp_ID" = Table.ExpandTableColumn(#"Merged Queries", "emp_ID", "StartDate", "EndDate", "StartDate", "EndDate"),
#"Filtered Rows" = Table.SelectRows(#"Expanded emp_ID", each [TransactionDate] >= [StartDate] and [TransactionDate] <= [EndDate]),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows","StartDate", "EndDate")
in
#"Removed Columns"
【讨论】:
以上是关于power query 根据两个日期之间的事务日期合并两个表的主要内容,如果未能解决你的问题,请参考以下文章
在 Power Bi 中使用 Power Query M 的上一周日期