Power BI使用#sections生成查询列表后Apply时出现OLE DB/ODBC报错
问题分析与解决方案
问题现象
在Power BI Desktop的PDF信息提取项目中,使用#sections生成查询列表(如AccountsList[Value])并通过Table.Combine合并时,点击Apply或Close and Apply会触发错误:
OLE DB OR ODBC error: We cannot convert the value null to type Table
但直接硬编码查询列表(如{Table1, Table2,...})时,合并和加载完全正常,且所有单个查询本身无报错。
复现步骤:
- 创建三个空白查询:
Table1:返回一个有效表格myList:通过#sections筛选出Table1(示例代码:= Table.SelectRows(Record.ToTable(#sections[Section1]), each [Name] = "Table1"))myReport:使用Table.Combine(myList[Value])合并列表
- 取消
Table1和myList的Enable load选项 - 点击Apply触发报错;若将
myReport中的myList[Value]替换为{Table1}则无报错
核心原因
当查询被设置为Disable load后,Power BI在加载阶段不会主动计算这些查询的结果。使用#sections获取的查询引用,本质是指向未被加载的查询对象,而非其计算后的表格结果,最终导致Table.Combine尝试合并null值而非有效表格。
解决方案
方案1:强制计算未加载查询的结果
修改myList的代码,确保筛选出的查询引用被强制计算为表格,而非仅保留引用:
= Table.TransformColumns( Table.SelectRows(Record.ToTable(#sections[Section1]), each [Name] = "Table1"), {"Value", each _()} // 强制执行查询,获取表格结果 )
之后myReport仍使用Table.Combine(myList[Value])即可。
方案2:批量筛选并合并(推荐)
如果需要批量处理多个查询,可直接在myReport中完成筛选与合并,同时强制计算每个查询的结果:
= Table.Combine( List.Transform( // 按查询命名规则筛选,示例为以"Table"开头的查询 Table.SelectRows(Record.ToTable(#sections[Section1]), each [Name] starts with "Table")[Name], each Expression.Evaluate(_, #sections[Section1]) ) )
方案3:应急临时处理
- 先启用所有相关查询(
Table1、myList)的Enable load - 点击Apply完成加载
- 再取消这些查询的Enable load,重新点击Apply
此方法仅适用于查询结构不频繁变动的场景,每次新增查询后需重复操作。
验证方法
修改代码后点击Apply,若不再触发null转Table的错误,且myReport能正确合并所有目标表格,则说明解决有效。
内容的提问来源于stack exchange,提问作者Ron Rosenfeld
相关产品推荐
相关产品推荐

