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

Power Query动态获取按日期命名SQL表触发Expression.Error密钥不匹配问题

Power Query动态拼接每日SQL表名报错解决方案

这个报错的本质是Power Query在数据库的dbo schema下找不到你拼接出来的对应日期的表,下面是具体原因和修复方案:

报错原因

  • 最常见场景:执行代码的当天,dbo schema下还没有生成对应日期的MICRINFO开头的表,跨天凌晨表同步延迟、节假日不生成当日表都会触发这个报错
  • 时区不匹配:DateTime.LocalNow()取的是本地机器的时间,如果数据库服务器时区和本地不一致,会导致拼接的日期和实际数据库内的表日期差1天
  • 表名规则不匹配:确认数据库内的表名前缀是否完全为全大写的MICRINFO,没有下划线、空格等隐藏字符

修复方案

可以直接使用下方兼容容错的优化代码,会自动查找近3天内存在的最新对应表,避免单天表不存在的报错:

let
    Source = Sql.Database("TEST", "TEST"),
    // 若数据库表按UTC时间生成,将下方DateTime.LocalNow()改为DateTime.UtcNow()
    currentDate = DateTime.Date(DateTime.LocalNow()),
    // 生成近3天的日期候选,兼容表延迟、节假日不生成表的场景
    dateCandidates = List.Dates(Date.AddDays(currentDate, -2), 3, #duration(1,0,0,0)),
    // 转换为符合规则的表名候选
    tableNameCandidates = List.Transform(dateCandidates, (d) => "MICRINFO" & Date.ToText(d, "yyMMdd")),
    // 筛选出第一个真实存在的表
    targetTableName = List.First(List.Select(tableNameCandidates, (name) => try Source{[Schema="dbo", Item=name]}[Data] otherwise null <> null)),
    // 提取目标表数据
    result = Source{[Schema="dbo", Item=targetTableName]}[Data]
in
    result

注意事项

  • 如果不需要自动 fallback 到历史表,只需要校验当日表是否存在,可以自行调整dateCandidates的日期范围
  • 若表的命名规则有调整,修改tableNameCandidates的拼接逻辑即可匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 09:06:09