Power BI Desktop定义ODBC数据源时如何在SQL语句中使用Firebird参数
Firebird ODBC在Power BI自定义SQL中配置参数的正确方案
报错原因说明
你之前尝试的几种参数写法都不符合Firebird ODBC驱动的要求:
- 用
:from_date格式:Firebird会将其识别为查询列名,找不到对应列就返回错误码-206 列未知 - 用
@from_date格式:Firebird原生SQL语法不支持@作为参数前缀,直接返回错误码-104 未知Token - 用
?from_date格式:Firebird ODBC仅支持无名称的位置参数,不支持带参数名的问号写法,同样返回Token错误
操作步骤
步骤1:在Power BI中创建查询参数
- 打开Power BI Desktop,点击顶部「主页」选项卡 >「管理参数」>「新建参数」
- 新建第一个参数:名称填
from_date,类型选择「日期/时间」,填写你常用的默认起始查询日期 - 再新建第二个参数:名称填
to_date,类型选择「日期/时间」,填写默认结束查询日期 - 点击「确定」保存两个参数
步骤2:编写符合要求的自定义SQL
Firebird ODBC仅支持用纯?作为参数占位符,参数的顺序要和后续传参的顺序严格对应,正确SQL如下:
select s.sale_id, s.sale_date, sl.good_id, sl.price, sl.amount from sale_lines sl left join sales s on (sl.sale_id=s.sale_id) where s.sale_date >= ? and s.sale_date <= ?
上述SQL中第一个?对应起始日期from_date,第二个?对应结束日期to_date。
步骤3:修改M查询绑定参数
- 按正常流程用ODBC连接,填入上述SQL后进入Power Query编辑器
- 点击顶部「主页」>「高级编辑器」,找到当前ODBC连接的M代码,参考下方示例修改:
原代码示例:
let Source = Odbc.Query("dsn=你自己的Firebird DSN名称", "上述的自定义SQL语句") in Source
修改后代码:
let // 按占位符顺序排列参数 ParamList = {from_date, to_date}, Source = Odbc.Query("dsn=你自己的Firebird DSN名称", "上述的自定义SQL语句", ParamList) in Source
- 将代码中的
你自己的Firebird DSN名称替换为你在ODBC数据源管理器中配置的DSN名称,点击「确定」保存即可。
步骤4:验证与使用
修改完成后Power Query会自动按顺序将参数值代入SQL占位符执行查询,后续如果需要修改查询日期,直接点击「主页」>「编辑参数」修改对应参数值,刷新数据即可生效,无需重新修改SQL语句。
该方案兼容Firebird 2.1、3.0、4.0全版本。
内容的提问来源于stack exchange,提问作者TomR
相关产品推荐
相关产品推荐

