Power Query 系列 (10) - 合并查询多字段关联技巧

2021-03-25 09:45:50 浏览数 (1)

本篇介绍的合并查询的时候,需要多个字段关联作为连接条件的操作技巧。Excel Vlookup 函数可以进行多列作为条件的关联,但已经需要高级操作技巧,在 Power Query (PQ) 中实现则非常简单,方法基本上和上篇一样。

我设计了一个假想的案例:假设公司有两个仓库 #1002 和 #2001,在销售出库的时候,需要自动先从 1001 仓库出库,如果1001 仓库数量不够,剩下部分从 2001 出库。如下图所示。以 B180RBK 为例,销售 7 只,1001 库位只有 1 只,所以先将 1001 的 1 只扣掉,然后再从 2001 扣除余下的 6 只。

物料库存数据和销售数量数据放在 Excel 工作表中,根据这两个表数据,在 PQ 中创建两个查询:

代码语言:txt复制
- materialqty: 库存数量
- delivery : 销售出库数量

delivery 查询只有 MaterialNo 字段,缺少仓位字段,为了方便后面使用合并查询,基于 delivery 查询新建两列,分别为 wh1001 和 wh2001:

切换到【添加列】选项卡,选择【自定义列】,定义 wh1001 字段如下:

用同样的方法添加一个自定义列 wh2001。完成后 delivery 查询的显示界面如下:

接下来通过合并查询建立与 materialqty 查询的连接。选中 delivery 查询后,点击【主页】选项卡中的【合并查询】,在合并查询界面中:

step 1:选中 delivery 查询的 MaterialNo 和 wh1001 字段,因为要同时选中两列,使用 Ctrl 键与鼠标一起操作,Ctrl 用于选中不连续列,Shift 用于选中连续列

step 2:在界面中间部分选择第二个查询表 materialqty,表示 delivery 要和 materialqty 进行连接

step 3:选中 materialqty 查询的 MaterialNo 和 StorageLocation 列,这两列是与 delivery 查询进行连接的关联条件:

代码语言:txt复制
- delivery.MaterialNo = materialqty.MaterialNo
- delivery.wh1001 = materialqty.StorageLocation

Step 4: 使用左连接,这是 PQ 连接的默认选项

然后点击确定按钮,回到查询编辑器。这是本篇操作的重点,给出操作步骤的动图:

MaterialQty 列是一个结构化列,对这一列进行展开操作,保留 Qty 字段即可:

将 Qty.1 字段改名为 Qty1001。然后用同样的方法,再次与 materialqty 查询进行一次查询合并,获取 2001 库位的库存数量。

完成本步骤,查询设计器的界面如下:

添加一个自定义列,计算 wh1001 的出库数量:

然后再计算 wh2001 的出库数量:

删除不需要在输出中显示的列,比如:wh1001、wh2001、Qty1001 和 Qty2001。完成本步骤后,查询编辑器的界面如下:

我一般习惯在 PQ 中处理的时候,将所有列名改为英文,因为公式栏和高级编辑器对中文的支持不是很好。最后加载到 Excel 工作表之前,可以将列名改为中文,以增加友好性。

示例数据我已经放在 github 上,方便参照学习。

qt

0 人点赞