You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,...})时,合并和加载完全正常,且所有单个查询本身无报错。

复现步骤:

  1. 创建三个空白查询:
    • Table1:返回一个有效表格
    • myList:通过#sections筛选出Table1(示例代码:= Table.SelectRows(Record.ToTable(#sections[Section1]), each [Name] = "Table1"))
    • myReport:使用Table.Combine(myList[Value])合并列表
  2. 取消Table1和myList的Enable load选项
  3. 点击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:应急临时处理

  1. 先启用所有相关查询(Table1、myList)的Enable load
  2. 点击Apply完成加载
  3. 再取消这些查询的Enable load,重新点击Apply
    此方法仅适用于查询结构不频繁变动的场景,每次新增查询后需重复操作。

验证方法

修改代码后点击Apply,若不再触发null转Table的错误,且myReport能正确合并所有目标表格,则说明解决有效。

内容的提问来源于stack exchange,提问作者Ron Rosenfeld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:53:16