Power Query基于自定义条件表实现数据动态分组的方法咨询
实现步骤
步骤1:规范VendorCriteria条件表字段
先确保你的VendorCriteria表配置以下4个字段:
- VendorMin:供应商编号范围下限(包含该值)
- VendorMax:供应商编号范围上限(包含该值)
- AllowedAreas:允许匹配的业务区域,多区域用英文逗号分隔,无需匹配区域时留空即可
- TargetGroup:符合规则后对应的分组名称
步骤2:创建动态匹配的自定义函数
新建空白查询,命名为fnGetVendorGroup,粘贴如下代码:
(vendorID as number, businessArea as text) as text => let // 从条件表读取所有规则 allRules = Table.ToRecords(VendorCriteria), // 遍历匹配符合当前行的规则 matchedRules = List.Select( allRules, (rule) => let // 判断供应商编号是否在指定范围 vendorFit = vendorID >= rule[VendorMin] and vendorID <= rule[VendorMax], // 判断业务区域是否符合要求,区域为空则自动跳过该条件 areaFit = if rule[AllowedAreas] = null or Text.Trim(rule[AllowedAreas]) = "" then true else List.Contains(Text.Split(rule[AllowedAreas], ","), businessArea) in vendorFit and areaFit ), // 取第一个匹配的分组,无匹配返回未分组 result = if List.Count(matchedRules) > 0 then matchedRules{0}[TargetGroup] else "未分组" in result
步骤3:给主表添加分组列
打开Proposal表的Power Query编辑界面,新增自定义列,列名设为VendorGroup,公式填写:
= fnGetVendorGroup([Vendor], [Business Area])
加载后即可得到动态匹配的分组结果。
提示:如果你的Vendor字段是文本类型,需要先转换为数字类型再传入函数,或者调整代码中vendorFit的判断逻辑适配文本格式的供应商编号。
生效逻辑说明
- 所有规则完全从VendorCriteria表读取,新增/修改/删除规则仅需调整条件表内容,不需要修改代码
- 规则优先级按条件表的行顺序生效,优先返回第一个匹配的分组,调整行顺序即可修改优先级
- 多业务区域规则只要主表的业务区域属于指定列表中的任意一个即可匹配
内容的提问来源于stack exchange,提问作者Junekuan
相关产品推荐
相关产品推荐

