Power Query条件替换未识别Text.Contains匹配值问题排查
问题根因
代码不生效的核心错误是替换器参数选型错误:
Replacer.ReplaceText仅用于文本子串替换,遇到目标字段的null值会直接跳过,不会执行你写的条件判断逻辑,这就是null值完全没更新的直接原因。- 你需要的是按条件重写整个单元格值,应该使用
Replacer.ReplaceValue替换器。
另外原代码的返回值和你给出的预期输出取值不匹配:预期中西语裔标识为Yes/No格式,而非文本Hispanic/Non-hispanic,同时你样本里的Decline to respond需要统一首字母大写格式。
修正后可直接运行的M代码
cleanData = Table.ReplaceValue( rawData, each [Ethnicity], each if [Ethnicity] = null and ( Text.Contains([Race], "non-Hispanic", Comparer.OrdinalIgnoreCase) or Text.Contains([Race], "not Hispanic", Comparer.OrdinalIgnoreCase) ) then "No" else if [Ethnicity] = null and Text.Contains([Race], "hispanic", Comparer.OrdinalIgnoreCase) then "Yes" else if [Ethnicity] = "Decline to respond" then "Decline to Respond" else [Ethnicity], Replacer.ReplaceValue, {"Ethnicity"} )
匹配样本的运行效果
对照你提供的测试样本,代码运行后完全符合预期:
- 原有明确
Yes/No取值的行无改动 White (non-Hispanic) | null行更新为White (non-Hispanic) | NoWhite (Hispanic) | null行更新为White (Hispanic) | YesWhite (non-Hispanic) | Decline to respond行格式修正为White (non-Hispanic) | Decline to RespondAsian | null行因Race字段无相关族裔关键词,保留null值
内容的提问来源于stack exchange,提问作者Steve Tomey
相关产品推荐
相关产品推荐

