Power Query应用手动输入筛选条件时类型转换报错的解决咨询
Power Query筛选报错:字符串无法转换为逻辑值
操作背景
用户手动输入买家代码作为筛选条件,尝试应用到IKX数据连接:
用户输入示例
| BUYER CODE FILTER |
|---|
| 104 |
| 800 |
现有操作流程
- 通过Excel表格生成筛选格式字符串:
| BUYER CODE FILTER FORMAT | FORMULA |
|---|---|
| [BUYER_CODE] = 104 | IFERROR(IF(LEN(InputBuyerCodes[@[Buyer Code Filter]])>0, "[BUYER_CODE] = "&InputBuyerCodes[@[Buyer Code Filter]], ""),"") |
| or [BUYER_CODE] = 800 | IFERROR(IF(LEN(InputBuyerCodes[@[Buyer Code Filter]])>0, " or [BUYER_CODE] = "&InputBuyerCodes[@[Buyer Code Filter]], ""),"") |
- 拼接得到完整筛选字符串:
| CONCAT BUYER CODE FILTER FORMAT | FORMULA |
|---|---|
| [BUYER_CODE] = 104 or [BUYER_CODE] = 800 | CONCAT(Table2[Buyer Code Filter Format]) |
- 在Power Query中提取该字符串命名为
ConcatBuyerCodeFilterFormat,应用筛选时执行:
= Table.SelectRows(Source, each (ConcatBuyerCodeFilterFormat))
报错信息
Expression.Error: We cannot convert the value "[BUYER_CODE] = 104 o..." to type Logical.
Details:
Value=[BUYER_CODE] = 104 or [BUYER_CODE] = 800
Type=[Type]
问题原因
Table.SelectRows的第二个参数要求返回布尔值的逻辑表达式,但传入的是纯文本字符串,Power Query无法直接将字符串解析为可执行的逻辑判断。
解决方案
方法1:列表包含判断(推荐)
无需拼接字符串,直接用列表匹配实现筛选,更高效且避免语法错误:
- 在Power Query中加载用户输入的
InputBuyerCodes表格 - 提取买家代码为非空列表:
BuyerCodeList = List.RemoveNulls(InputBuyerCodes[BUYER CODE FILTER]) - 对IKX数据源应用筛选:
= Table.SelectRows(Source, each List.Contains(BuyerCodeList, [BUYER_CODE]))
方法2:动态解析表达式(适用于复杂筛选场景)
如果必须使用拼接的字符串,可通过Expression.Evaluate将字符串转换为可执行逻辑:
= Table.SelectRows(Source, each Expression.Evaluate(ConcatBuyerCodeFilterFormat, [_ = _, BUYER_CODE = [BUYER_CODE]]))
- 第二个参数传递当前行的上下文变量,确保表达式能正确识别
[BUYER_CODE]对应的行值。
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

