Power Query合并两表仅匹配一次唯一值 按订单优先级分配库存实现方法
需求实现逻辑(Power Query 版本)
核心匹配思路
通过给同品类的订单、库存分别生成独立的递增匹配序号,以「零部件ID+匹配序号」为唯一关联条件做左合并,实现高优先级订单优先匹配库存、一一对应无重复、无库存返回空值的效果。
具体操作步骤
第一步:预处理订单表(Orders)
- 排序:先按零部件ID升序排序,再按优先级升序排序(优先级1为最高,排在最前),可额外增加订单编号排序保证同优先级订单顺序稳定。
- 生成匹配序号:优先推荐用分组加索引的方式(大数据量下效率更高),公式如下:
= Table.Group(#"排序后的步骤名", {"零部件ID"}, {{"订单数据", each Table.AddIndexColumn(_, "匹配序号", 1, 1)}})
执行后展开「订单数据」列即可得到同零部件下、按优先级排序生成的1、2、3...递增的匹配序号。
第二步:预处理库存表(Stock)
- 排序:先按零部件ID升序排序,再按你需要的库存取用规则排序(比如先进先出就按入库日期升序,就近取货就按货架编号升序),保证库存顺序符合业务规则。
- 生成匹配序号:同样用分组加索引的方式生成,公式如下:
= Table.Group(#"排序后的步骤名", {"零部件ID"}, {{"库存数据", each Table.AddIndexColumn(_, "匹配序号", 1, 1)}})
执行后展开「库存数据」列即可得到同零部件下的递增匹配序号。
第三步:合并两张表
- 选择左外连接模式(Orders表为左表,保证所有订单行都保留),关联条件勾选两个字段:零部件ID、匹配序号。
- 展开库存表的字段(序列号、货架位置等),没有匹配到库存的订单行对应位置会自动返回空值。
效果验证说明
- 无重复匹配:同零部件下每个匹配序号唯一对应一条订单、一条库存,不会出现多对多重复关联的问题
- 优先级正确:订单匹配序号完全按优先级排序生成,高优先级订单序号更小,优先匹配靠前的可用库存
- 无订单行丢失:左外连接模式保留全部订单行,无库存时仅对应库存字段为空
内容的提问来源于stack exchange,提问作者Luna
相关产品推荐
相关产品推荐

