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

Power Query技术问询:从多查找表匹配提取并清理内容

Power Query多维度数据拆分方案(基于Lookup表匹配)

一、新手友好的分步实现

1. 准备Lookup表

把所有Lookup_n表导入Power Query,给每个表起清晰的名字(比如Lookup_产品、Lookup_地区),确保每个表只有一列,列名对应维度(比如产品、地区)。

2. 编写通用匹配删除函数

这个函数能一次性完成「匹配Lookup值+从原文本移除」的操作,不用重复写代码:
进入Power Query编辑器,点击「主页」→「高级编辑器」,直接替换成以下代码:

// 函数名:MatchAndRemove
(LookupTable as table, LookupColumn as text, InputText as text) as record =>
let
    // 缓存Lookup值列表,大数据场景下提速
    LookupList = List.Buffer(LookupTable[LookupColumn]),
    // 找出原文本中第一个匹配的Lookup值
    MatchedValue = List.First(List.Select(LookupList, each Text.Contains(InputText, _))),
    // 移除匹配值,得到剩余文本
    RemainingText = if MatchedValue <> null then Text.Replace(InputText, MatchedValue, "") else InputText
in
    [匹配值 = MatchedValue, 剩余文本 = RemainingText]

注意:如果同一维度有短/长匹配值(比如「苹果」和「苹果手机」),要把长值放在Lookup表最前面,避免短值先被匹配导致长值漏判。

3. 给主表拆分维度列

回到你的主数据集(比如命名为主数据):

  • 处理第一个维度:点击「添加列」→「自定义列」,输入公式 MatchAndRemove(Lookup_产品, "产品", [Column_1]),回车后生成包含「匹配值」和「剩余文本」的记录列。点击列名右侧的展开箭头,只选择「匹配值」,将新列重命名为「产品」。
  • 处理第二个维度:再次添加自定义列,用刚生成的「剩余文本」作为输入,公式改为 MatchAndRemove(Lookup_地区, "地区", [剩余文本]),同样展开「匹配值」并重命名为「地区」,保留新的「剩余文本」。
  • 重复上述操作直到所有维度处理完成,最后把最终的「剩余文本」重命名为Column_1替换原列,临时剩余文本列可直接删除。

4. 处理无匹配场景

如果部分行未匹配到某个维度的值,对应新列会显示null,可以用「替换值」功能将null改为空文本或你需要的默认值。

二、大数据集优化方案

如果数据集规模极大,分步操作效率偏低,可尝试批量处理:

  1. 将所有Lookup表合并为一张「维度映射表」,结构如下:
维度名称匹配值
产品手机
产品电脑
地区北京
地区上海
  1. 编写批量匹配函数,一次性遍历所有维度完成匹配和文本移除。该方法稍复杂,建议先掌握基础方法后再尝试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:50:23