我的公司正在将一些零件运送到外部喷漆店。有许多喷漆店和许多零件号。我有一份包含每次运输(发货和退货)历史记录的清单。我的目标是处理清单,以便只有最近发送的货物才会出现在清单上。为了更好地解释,请看以下示例:
我的列表:
供应商 | 零件编号 | 日期 | 数量 | 类型 |
---|---|---|---|---|
S01 | P0001 | 2024-05-05 | -3 | 已收到 |
S01 | P0001 | 2024-05-04 | 2 | 发送 |
S01 | P0001 | 2024-05-03 | -5 | 已收到 |
S02 | P0005 | 2024-04-24 | -6 | 已收到 |
S01 | P0001 | 2024-04-02 | 3 | 发送 |
S01 | P0001 | 2024-03-11 | 10 | 发送 |
S02 | P0005 | 2024-03-05 | 4 | 发送 |
S02 | P0005 | 2024-02-05 | 3 | 发送 |
S02 | P0001 | 2024-01-25 | -5 | 已收到 |
S02 | P0001 | 2024-01-14 | 5 | 发送 |
现在,基于此列表,我想保留那些仍在供应商处(尚未退回)的“已发送”类型的记录。困难的部分是,并非所有已发送的数量都需要退回,这意味着特定数量需要减去已退回的数量(结果为单独的“余额”列)。
预期结果:
供应商 | 零件编号 | 日期 | 数量 | 平衡 |
---|---|---|---|---|
S01 | P0001 | 2024-05-04 | 2 | 2 |
S01 | P0001 | 2024-04-02 | 3 | 3 |
S01 | P0001 | 2024-03-11 | 10 | 2 |
S02 | P0005 | 2024-03-05 | 4 | 1 |
解释:最早发运给供应商 S02 的部件 P0001 已被退回,因此最后两条记录将被删除。
零件 P0005 发送给供应商 S02 的数量为 3,然后又发送了 4,但后来退回了 6。考虑到“先进先出”规则,供应商 S02 仍剩下 1 个,因此结果表中显示第 4 行。
因此,零件 P0001 发送给供应商 S01(这必须独立于发往 S02 的零件),数量为 (10+3+2),收到涂漆的零件数量为 (5+3)。退回的数量必须从第一批货物中扣除,而其他两批货物仍在供应商处。因此,结果表第 3 行中的余额为 (10-5-3=2),而第 1 行和第 2 行中的其他两批货物将保持原样。
我的第一次尝试是使用 Power Query,但我不知道该怎么做。这可能吗?如果不行,我下次会尝试 VBA,但我真的希望 PQ 可以完成这项任务。
在 Power Query 中尝试以下操作。它适用于您上面的示例表,需要使用您的实际数据进行彻底检查。
Supplier+Part No.