You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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场景

用内置的「拆分为行」功能,完全动态:

  1. 筛选掉Delivery Number为null的行
  2. 选中该列,点击「转换」→「拆分列」→「按分隔符」,选择分号,然后选拆分为行(不是拆分为列)
  3. 用「修剪」功能清理单号前后的空格
  4. 删除重复项即可

问题2:是否有更简便的解决方案?

有,直接合并「拆分+去重+关联」为一套流程,跳过单独筛选多单号订单的步骤:

  1. 先过滤掉Delivery Number为null的记录
  2. 将所有配送单号(不管单个还是多个)直接拆分为单行
  3. 对拆分后的单号去重(清理空格+删除重复)
  4. 直接用去重后的单号关联账单表

这套流程比原思路更简洁,因为单个单号的订单拆分后还是单行,不需要额外筛选多单号订单,一步覆盖所有情况,同时天然支持任意数量的配送单号。


内容的提问来源于stack exchange,提问作者worldwidegleb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:22:22