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

在Excel的Odbc.Query()中传递Power Query变量/参数

实现Excel Power Query中ODBC查询的动态日期筛选

直接给你修正后的可运行代码,核心是把Excel单元格里的日期转换成ODBC要求的格式,再通过字符串拼接到SQL语句中,让数据库端完成筛选:

let
    // 读取Excel中命名为DATE_FROM的单元格日期
    D_FROM1 = Excel.CurrentWorkbook(){[Name="DATE_FROM"]}[Content],
    D_FROM2 = Table.TransformColumnTypes(D_FROM1,{{"Column1", type date}}),
    D_FROM3 = D_FROM2{0}[Column1],
    // 转换为ODBC兼容的日期格式字符串
    D_ODBC_DATE = "{d '" & Date.ToText(D_FROM3, "yyyy-MM-dd") & "'}",
    
    // 构建带动态日期的ODBC查询
    Source = Odbc.Query(
        "dsn=My Server",
        "SELECT 
            POPOINLineItem.documentDate,
            POPOINLineItem.postingDate,
            POPOINLineItem.reference,
            POStatusDefinition.name AS ""PO Status""
        FROM 
            POPOINLineItem POPOINLineItem,
            POStatusDefinition POStatusDefinition
        WHERE 
            POPOINLineItem.myStatus = POStatusDefinition.oid
            AND ""PO Status"" = 'Entered'
            AND POPOINLineItem.postingDate >= " & D_ODBC_DATE & ""
    )
in
    Source

关键说明:

  1. 动态日期拼接:用&把生成的ODBC格式日期({d 'YYYY-MM-DD'})直接拼接到SQL语句中,查询发送到数据库时会生成带实际日期的完整SQL,确保在数据库端完成筛选,不会拉取全量数据。
  2. SQL语法修正:
    • 去掉了SELECT列末尾、FROM表列表末尾的多余逗号(这些会导致SQL执行报错)
    • 带空格的别名PO Status在WHERE子句中用双引号包裹(如果你的数据库是SQL Server,可换成[PO Status];MySQL用PO Status)
  3. Excel单元格要求:确保存日期的单元格命名为DATE_FROM,且是单个单元格、格式为日期类型,Power Query能正常读取。

这样用户只需要修改DATE_FROM单元格的日期,刷新查询就能自动应用新的筛选条件,不需要改动Power Query代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:22:53