Power Query条件合并:为FirstAPI添加newCol列的技术问询
Power Query M语言解决方案:生成newCol列
问题分析
你需要在FirstAPI中新增newCol列,规则是优先使用自身的policyTypeName,当该值为null时,通过policyTypeId匹配SecondAPI中的对应policyTypeName。原代码的问题在于语法不符合M语言规范,无法正确从SecondAPI中提取单个匹配值。
解决方案
方案1:通过查询合并实现(可视化操作,易上手)
- 打开FirstAPI查询,点击主页→合并查询→合并查询(直接合并到当前查询)
- 合并配置:
- 左表选择FirstAPI,选中
policyTypeId列 - 右表选择SecondAPI,选中
policyTypeId列 - 连接类型选左外部(保留左表所有行,匹配右表对应行)
- 左表选择FirstAPI,选中
- 点击确定后,新列会显示匹配的SecondAPI行记录,点击列标题右侧的展开按钮,仅勾选
policyTypeName,将展开后的列命名为matched_policyTypeName - 添加自定义列
newCol,输入公式:if [policyTypeName] <> null then [policyTypeName] else [matched_policyTypeName] - 可按需删除
matched_policyTypeName列
方案2:直接编写M语言自定义列(一步到位)
利用List.Single和List.Select提取唯一匹配值(因SecondAPI是一一映射,所以只会有一个匹配结果),公式如下:
if [policyTypeName] <> null then [policyTypeName] else List.Single(List.Select(SecondAPI, (row) => row[policyTypeId] = [policyTypeId])[policyTypeName])
若你的Power Query版本支持Lookup函数,可使用更简洁的写法:
if [policyTypeName] <> null then [policyTypeName] else Lookup(SecondAPI, "policyTypeId", [policyTypeId], "policyTypeName")
验证结果
应用上述任一方案后,FirstAPI的newCol列会得到期望结果:
- abcd → Global
- pqrs → Americas
- pqws → Global
内容的提问来源于stack exchange,提问作者fireball.1
相关产品推荐
相关产品推荐

