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

Power Query数据源错误处理:遇错生成空表并跳过后续步骤

解决Power Query中SQL表不存在时的错误处理问题

可以通过M语言的try...otherwise结构实现需求,当目标表不存在时返回空表(或null),并跳过后续转换步骤。以下是具体实现方式:

核心代码修改

假设你原来的查询代码类似这样:

let
    Source = Sql.Database("tcp:sqlsvr-prod.public.12345.database.windows.net, 3342", "sqldb-reporting-prod"),
    TargetTable = Source{[Schema="123_outcomes", Item="1234_outcome"]}[Data]
in
    TargetTable

修改为带有错误处理的版本:

let
    Source = Sql.Database("tcp:sqlsvr-prod.public.12345.database.windows.net, 3342", "sqldb-reporting-prod"),
    // 尝试获取目标表,失败则返回与原表结构一致的空表
    TargetTable = try Source{[Schema="123_outcomes", Item="1234_outcome"]}[Data] 
                  otherwise #table(
                      type table [/* 这里填入原表的列名和类型,例如:
                      OutcomeID=number,
                      OutcomeName=text,
                      CreateDate=datetime
                      */], 
                      {}
                  ),
    // 后续转换步骤:仅当表非空时执行原有逻辑
    ProcessedData = if Table.IsEmpty(TargetTable) 
                    then TargetTable 
                    else /* 替换成你原来的转换代码,比如:
                    Table.TransformColumns(TargetTable, {{"CreateDate", Date.From}})
                    */
in
    ProcessedData

关键细节说明

  • try...otherwise的作用:try块尝试执行获取表的操作,若触发"对象不存在"这类错误,会直接执行otherwise后的代码,返回预设的空表。
  • 空表结构的选择:
    • 如果你清楚原表的列结构,最好定义与原表完全一致的空表(如示例中注释的列定义),这样后续依赖列的步骤不会因为列缺失报错。
    • 若不确定结构,可简化为#table({}, {})生成无列的空表,但需确保后续转换步骤能兼容这种情况。
  • 跳过后续转换:通过if Table.IsEmpty(TargetTable)判断,空表时直接返回,非空时才执行原有转换逻辑,避免无效操作和额外报错。

可选:返回null替代空表

如果更倾向返回null而非空表,可修改otherwise部分:

TargetTable = try Source{[Schema="123_outcomes", Item="1234_outcome"]}[Data] otherwise null,
ProcessedData = if TargetTable = null then null else /* 原有转换逻辑 */

注意:返回null时,后续步骤需额外处理null值,否则可能触发新的报错,因此空表通常是更安全的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:25:14