最近尝试在PowerQuery查询MySQL时使用自定义变量,同样添加变量的SQL语句在Navicat可以正常执行,但在PowerQuery里面就会报错,今天解决了这个问题,方法是给变量加引号(文章末尾有完整案例)。
这个方案百度没搜到(也可能是没注意到),用谷歌搜索才意外发现2个相关的英文链接,在这里记录一下过程。
需求场景:平时使用PowerQuery查询分析比较多,每次分析新问题需要修改Excel模板查询SQL语句的开始时间和截止时间,因为是用union合并两张表的数据,所以得修改4个位置,虽然也不算多,但在SQL语句略长的情况下,查询界面手工修改日期有点不方便,然后就有了添加SQL变量放在前面的想法,这样开始时间和截止时间就只需修改1次了。
经历过程:
起初,直接使用MySQL自定义变量“SET+@变量”的方法没成功:
SET @Time_Start = '2018-09-10';
SET @Time_End = '2018-12-24';
PowerQuery报错的提示如下:DataSource.Error: MySQL: Fatal error encountered during command execution.
详细信息:
DataSourceKind=MySql
DataSourcePath=localhost:3306;data_xx
Message=Fatal error encountered during command execution.
ErrorCode=-2147467259
百度搜索时,发现有人在其它场景遇到过同样的提示,说是需要配置以允许使用自定义变量(参数如下),但添加到PowerQuery的“高级编辑器”里面的连接参数位置,发现并无效果(会提示新的错误,也没有其它合适的位置),一直没有找到针对PowerQuery的解决方案。
Allow User Variables=True
后来,使用谷歌搜索时,跟PowerQuery相关的结果也比较少,意外发现有人在PowerBI官网咨询同样的问题但解决方案参考链接指向了另一个网站,还有一点意外的是答复方案的时间是2017年而发布问题是在2013年。
SQL案例:set @'Time_Start' = '2018-09-10';
set @'Time_End' = '2018-12-24';
select * from data_ax where time_1 >= @'Time_Start' and time_1 < @'Time_End'
union
select * from data_bx where time_2 >= @'Time_Start' and time_2 < @'Time_End'