Power BI Power Query:从分号分隔文本生成唯一键
处理含多配送单号的销售订单并关联数据表的优化方案
背景
销售订单数据集包含“Delivery Number(配送单号)”列:已处理订单通常对应1个单号,未结订单为
null;部分订单的配送单号以分号分隔合并成文本,且存在重复值。
目标
以配送单号为键关联另一数据表,获取每个唯一配送的详情。
现有思路
- 移除配送单号字段的重复值
- 筛选出包含多个配送单号的订单
- 按分号拆分该列
- 将拆分后的多列透视为单个新的配送单号列
- 使用新的唯一配送单号关联账单表
问题1:如何让公式/逻辑动态适配任意数量的配送单号?
完全可以实现动态适配,核心是避免固定拆分列数,改用「拆分后转为单行」的逻辑,不同工具的实现方式如下:
SQL场景(以PostgreSQL/MySQL 8.0+为例)
直接用字符串拆分转多行的函数,不管单号数量多少都能自动处理:
- PostgreSQL:用
unnest(string_to_array())拆分并转多行,配合trim()清理空格,DISTINCT去重
WITH unique_deliveries AS ( SELECT DISTINCT trim(unnest(string_to_array("Delivery Number", ';'))) AS delivery_id FROM sales_orders WHERE "Delivery Number" IS NOT NULL ) SELECT ud.delivery_id, bd.* FROM unique_deliveries ud JOIN billing_details bd ON ud.delivery_id = bd.delivery_id;
- MySQL 8.0+:用递归CTE或
JSON_TABLE实现动态拆分,同样无需固定列数
Power Query/Excel场景
用内置的「拆分为行」功能,完全动态:
- 筛选掉
Delivery Number为null的行 - 选中该列,点击「转换」→「拆分列」→「按分隔符」,选择分号,然后选拆分为行(不是拆分为列)
- 用「修剪」功能清理单号前后的空格
- 删除重复项即可
问题2:是否有更简便的解决方案?
有,直接合并「拆分+去重+关联」为一套流程,跳过单独筛选多单号订单的步骤:
- 先过滤掉
Delivery Number为null的记录 - 将所有配送单号(不管单个还是多个)直接拆分为单行
- 对拆分后的单号去重(清理空格+删除重复)
- 直接用去重后的单号关联账单表
这套流程比原思路更简洁,因为单个单号的订单拆分后还是单行,不需要额外筛选多单号订单,一步覆盖所有情况,同时天然支持任意数量的配送单号。
内容的提问来源于stack exchange,提问作者worldwidegleb
相关产品推荐
相关产品推荐

