【问题标题】:power query merge two tables based on the transaction date between two datespower query 根据两个日期之间的事务日期合并两个表
【发布时间】: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的情况下,为什么想要的输出中有两列?

标签: powerquery m


【解决方案1】:

进行标准合并,然后过滤。

  1. 使用内部联接合并查询。
  2. 展开开始和结束日期列。
  3. 选择满足您条件的列。
  4. 删除多余的列。
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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2018-08-11
    • 2017-01-29
    • 1970-01-01
    • 2019-08-08
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多