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

Power BI中Table.Combine动态合并查询报错无法将null转为Table

问题根因
  • #sections属于M语言元编程函数,在Power BI Desktop中编辑器预览、应用更改两个场景的评估逻辑存在差异:
    • 编辑器预览采用懒加载的样本评估机制,仅枚举当前上下文已完成加载的查询对象,此时筛选出的前缀匹配项均为正常加载的表查询,无null值,因此预览显示正常
    • 点击「应用更改」触发全量刷新时,Power BI会走完整个查询依赖链的完整评估流程,#sections[Section1]会枚举Section1下的所有条目,包括未被显式引用、未完成评估的查询,以及系统临时生成的同名前缀条目,这类条目的Value字段值为null
  • 原有代码中的Table.RemoveRowsWithErrors仅能移除Value为错误值的行,null不属于错误值范畴,不会被该步骤过滤,最终null值被传入Table.Combine,就会触发Cannot convert the value null to type Table报错。
正规解决方法

方案1:最小改动修复现有逻辑

在原有筛选流程后补充null值过滤、表类型校验步骤,确保传入Table.Combine的所有条目均为合法表对象,修正后代码如下:

let
    Origen = #sections[Section1],
    #"Convertido en tabla" = Record.ToTable(Origen),
    #"Errores quitados" = Table.RemoveRowsWithErrors(#"Convertido en tabla", {"Value"}),
    Personalizado1 = Table.SelectRows(#"Errores quitados", each Text.StartsWith([Name], "COMPRAS Y GASTOS")),
    // 新增步骤:过滤null值、校验值为表类型,拦截所有非表项
    #"Filtrar tablas válidas" = Table.SelectRows(Personalizado1, each [Value] <> null and Value.Is([Value], type table)),
    Personalizado2 = Table.Combine(#"Filtrar tablas válidas"[Value])
in
    Personalizado2

方案2:源端动态读取工作表(稳定性更高,推荐)

通过#sections抓取查询的逻辑本身依赖查询命名规则、评估顺序,长期维护容易出现兼容性问题。更规范的实现方式是直接从Excel源文件层面枚举所有工作表,自动筛选匹配名称的工作表完成合并,不需要为每个工作表单独创建查询,后续新增符合命名规则的年份工作表时会自动纳入合并范围,参考代码如下:

let
    // 替换为你实际的Excel源配置,和现有单个工作表查询的源参数保持一致即可
    OrigenExcel = Excel.Workbook(File.Contents("你的Excel文件完整路径"), null, true),
    // 筛选名称匹配前缀、类型为工作表的条目
    HojasFiltradas = Table.SelectRows(OrigenExcel, each Text.StartsWith([Name], "COMPRAS Y GASTOS") and [Kind] = "Sheet"),
    // 批量合并所有工作表数据
    DatosCombinados = Table.Combine(HojasFiltradas[Data])
in
    DatosCombinados

如果你已经为每个同前缀工作表配置了单独的差异化清洗步骤,选择方案1即可;如果所有同前缀工作表结构一致、不需要单独做差异化处理,优先选方案2,完全规避查询评估顺序带来的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:45:44