Power Query新增自定义列遇NULL值转换错误问题求助
Power Query 产品名称匹配时NULL值错误解决方法
问题场景
主表为销售数据表,产品名称附带技术规格(如:2' H型铁棒),数据量庞大;另一张表仅存部分简化产品名称(如:铁棒)。通过Power Query新增自定义列匹配简化名称,无匹配项时返回NULL,后续步骤因无法将NULL转换为文本报错。
原代码问题分析
原代码用Table.SelectRows返回匹配的表格,展开后无匹配项会生成NULL值,后续文本处理步骤无法识别NULL,导致报错。
解决方案
通过List.FirstOrDefault直接获取第一个匹配的简化名称,同时指定无匹配时的默认值(可选择保留原产品名或自定义文本),避免生成NULL。
修改后的代码(单列匹配)
let Fonte = Lista_gerada_pelo_programa, #"Colunas Removidas" = Table.RemoveColumns(Fonte,{"Tomador - CNPJ", "Tomador - Razão Social", "CTe - Nº"}), #"Personalização Adicionada" = Table.AddColumn(#"Colunas Removidas", "NOVA.Produto", each let matchedItems = List.Select(Lista_Variacoes[Variacoes], (x) => Text.Contains([Produto], x, Comparer.OrdinalIgnoreCase)), // 无匹配时返回原产品名,可替换为""或"无匹配"等自定义文本 result = List.FirstOrDefault(matchedItems, [Produto]) in result ) in #"Personalização Adicionada"
代码说明
List.Select:从简化名称列表中筛选出包含在主表产品名中的项,生成匹配列表。List.FirstOrDefault:获取列表第一个匹配项,无匹配时返回指定默认值(这里保留原产品名,可按需修改)。- 无需执行表格展开步骤,直接生成文本列,彻底避免NULL值问题。
扩展:同时匹配多列的处理代码
如果需要同时获取Lista_Variacoes中的Produto和Variacoes字段,可使用以下代码:
let Fonte = Lista_gerada_pelo_programa, #"Colunas Removidas" = Table.RemoveColumns(Fonte,{"Tomador - CNPJ", "Tomador - Razão Social", "CTe - Nº"}), #"Personalização Adicionada" = Table.AddColumn(#"Colunas Removidas", "匹配结果", each let matchedRows = Table.SelectRows(Lista_Variacoes, (x) => Text.Contains([Produto], x[Variacoes], Comparer.OrdinalIgnoreCase)), matchedProduto = if Table.RowCount(matchedRows) > 0 then matchedRows{0}[Produto] else [Produto], matchedVariacoes = if Table.RowCount(matchedRows) > 0 then matchedRows{0}[Variacoes] else [Produto] in [NOVA.Produto = matchedProduto, NOVA.Variacoes = matchedVariacoes] ), #"Expandido匹配结果" = Table.ExpandRecordColumn(#"Personalização Adicionada", "匹配结果", {"NOVA.Produto", "NOVA.Variacoes"}, {"NOVA.Produto", "NOVA.Variacoes"}) in #"Expandido匹配结果"
内容的提问来源于stack exchange,提问作者Willian Lopes
相关产品推荐
相关产品推荐

