Power Query M公式验证列是否仅含小数及列值替换问题求助
解决Power Query替换Column4值的问题
问题分析
你的需求核心:
- 当Column3包含
Instant Payment BSF/MBK时,优先用Column5的小数替换Column4;若Column5不是小数,再用Column6的小数;两者都不满足则保留Column4原值 - 原代码逻辑错误:
Number.Mod([Column5],1)=0判断的是整数,和你要的“仅含小数”(非整数)完全相反;且未处理Column5/6可能不是数字类型的情况,容易触发报错
修正后的代码
= Table.ReplaceValue(#"Changed Type", each [Column4], each if Text.Contains([Column3], "Instant Payment BSF/MBK") then // 先校验Column5是数字且为小数 if Value.Is([Column5], type number) and Number.Mod([Column5], 1) <> 0 then [Column5] // 再校验Column6是数字且为小数 else if Value.Is([Column6], type number) and Number.Mod([Column6], 1) <> 0 then [Column6] // 都不满足则保留原Column4 else [Column4] else [Column4], Replacer.ReplaceValue, {"Column4"})
关键调整说明
- 反转判断逻辑:将
Number.Mod(...,1)=0改为Number.Mod(...,1)<>0,精准识别非整数的小数 - 增加类型校验:用
Value.Is([ColumnX], type number)确保Column5/6是数字类型,避免非数字值引发的运行错误 - 保留优先级:维持先Column5后Column6的替换顺序,符合需求设定
额外适配提示
如果Column5/6是文本格式的数字(比如带引号的小数),需要先转换为数字类型,可在判断逻辑中加入容错处理:
let Source = ..., #"Changed Type" = ..., #"Replace Column4" = Table.ReplaceValue(#"Changed Type", each [Column4], each if Text.Contains([Column3], "Instant Payment BSF/MBK") then let // 尝试将文本转为数字,失败则返回null col5Num = try Number.From([Column5]) otherwise null, col6Num = try Number.From([Column6]) otherwise null in if col5Num <> null and Number.Mod(col5Num, 1) <> 0 then col5Num else if col6Num <> null and Number.Mod(col6Num, 1) <> 0 then col6Num else [Column4] else [Column4], Replacer.ReplaceValue, {"Column4"}) in #"Replace Column4"
内容的提问来源于stack exchange,提问作者Ashraf
相关产品推荐
相关产品推荐

