Excel Power Query简化产品线判定IF查询方案咨询
简化Power Query产品线归类及报表流程方案
核心思路:用映射表替代冗长IF语句
把所有产品线归类规则从M代码中剥离,放到独立的Excel映射表中,既方便维护,又能让同事直接复用,不用修改代码。
1. 创建产品线映射表
在Excel中新建一个名为产品线映射的工作表,结构如下:
| 匹配类型 | 匹配值 | 产品线名称 |
|---|---|---|
| 零件号前缀 | ABC- | ABC产品线 |
| 零件号前缀 | XYZ- | XYZ产品线 |
| 描述关键词 | 液压泵 | 液压产品线 |
| 描述关键词 | 传感器 | 传感产品线 |
- 匹配类型:分为「零件号前缀」和「描述关键词」,对应两种判断逻辑
- 匹配值:填写零件号的前缀(如
ABC-)或描述中的关键词(如液压泵) - 产品线名称:统一的归类名称
2. 在Power Query中编写可复用的匹配函数
打开Power Query编辑器,新建一个自定义函数(点击「主页」→「自定义函数」),粘贴以下M代码:
let GetProductLine = (PartNum as text, Description as text) => let // 加载映射表(确保工作表名称与实际一致) MappingTable = Excel.CurrentWorkbook(){[Name="产品线映射"]}[Content], // 为每条规则添加匹配结果 EvaluateMatches = Table.AddColumn(MappingTable, "匹配成功", each if [匹配类型] = "零件号前缀" then Text.StartsWith(PartNum, [匹配值]) else if [匹配类型] = "描述关键词" then Text.Contains(Description, [匹配值], Comparer.OrdinalIgnoreCase) else false ), // 筛选出第一个匹配的规则(优先零件号前缀) MatchedRule = Table.SelectRows(EvaluateMatches, each [匹配成功] = true), // 返回产品线名称,无匹配则标记为"其他" Result = if Table.RowCount(MatchedRule) > 0 then MatchedRule{0}[产品线名称] else "其他" in Result in GetProductLine
3. 为发货报表添加产品线列
在发货报表的Power Query查询中,点击「添加列」→「自定义列」,输入公式:= GetProductLine([Part Numbers], [Descriptions])
重命名该列为Product Line Description,关闭并加载数据到Excel。
4. 优化团队复用性
- 把包含映射表和Power Query函数的文件保存为Excel模板(.xltx),同事打开模板后,只需导入自己的发货报表数据,刷新查询即可自动生成产品线列。
- 后续更新归类规则时,只需修改模板中的映射表,所有使用模板的人刷新后就能同步最新规则。
5. 快速对接数据透视表
- 处理完成的数据选择「仅创建连接」加载到Excel,然后插入数据透视表,选择该连接作为数据源。
- 字段配置:
- 行区域:拖入「月份」字段
- 值区域:拖入「发货数值」(设置为求和)
- 筛选/列区域:拖入「Product Line Description」
- 右键数据透视表→「数据」→「刷新」,即可快速更新月份数据;也可设置「打开文件时自动刷新」。
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

