问题:
Excel中使用Mircosoft Query检索外部数据时, 遇到一个奇怪的问题。使用一个视图从SQL Server 中读取数据,使用一个文本字段作为过滤条件。当随机改变过滤值时,刷新数据会导致Excel一直没有响应而死掉。环境是Excel 365 和 SQL Server 2017。
分析:
这个查询并不复杂,SQL Server 返回数据耗时几秒以内。Mircosoft Query 已经使用十多年了。和Excel 配合使用,是查询统计数据的一个利器。有以下特点:
1、可以作为数据透视表的数据源。
2、通过ODBC可以连接Excel、Access、Sql Server等常见格式的数据源。
3、支持过滤条件参数动态设置,而且可以关联到单元格,甚至自动跟踪单元值的变化来刷新数据。
虽然这么多年了用着很挺顺手,但随着Office和SQL Server的不断升级,现在却遇到了新问题。
有两个细节:SQL Server 收到了执行查询的部分SQL语句,但还在执行中。Excel状态栏尚未出现提示:正在读取后台数据……
一时也没有找到相关问题的解决办法。该查询语句在SQL Server 和 Power Query 下执行没有任何问题。
解决:
时不我待,下决心用新的Power Query取而代之。不用不知道,确实比Microsoft Query更强大,花一点功夫,就可以很方便地实现绝大部分原有功能。
例如:
1、可以作为数据透视表的数据源。
2、ODBC退居二线,在Power Query 编辑器中可以连接当下主流文件、数据库等更多数据源。
3、支持命令参数,同样可以关联到命名的单元格,但还没有找到自动跟踪单元值的变化来刷新数据。
补充:
1、对基于Microsoft Query使用方式的改进。
首先,之前,对用于查询参数的单元格,使用了数据验证之序列,并联到其他单元格区域。序列的值是静态的,需要手工维护。现在,为实现自动更新序列,直接关联一个包含序列的外部连接(测试发现数据验证不能直接引用外部连接的命名,必须先生成表,再对表进行命名,最后引用这个表的命名)。
其次,之前,先将外部数据读取表格,再根据表格创建透视。这样需要全部刷新两次。现在,改为直接从外部 数据创建透视,全部刷新一次就好。
2、忽略安全性提示信息。例如:Excel获取外部数据时,总是弹出数据隐私选项,连接SQLServer时修改一次就会提示本机运行权限。
为了避免出现这些提示,可以在Excel中,选择 数据>获取数据>查询选项,在安全性设置中取消勾选“新本机数据库查询需要用户批准”,在隐私设置中选择“始终忽略隐私级别设置”(请您了解可能的风险)。