当从关系数据库(如Power BI中的SQL Server)导入数据时,可以选择SQL查询来获取数据,先在数据库中查看结果:
将SQL语句放到查询中:
输入连接信息后查看预览:
这是该查询所用到M代码:
对应该查询,它具有禁用Power Query查询中的查询折叠的副作用,因此,如果添加任何其他转换,它们将始终是在Power Query引擎内部执行-效率可能比在数据源中执行效率低。
还有一个缺点:在Power BI Desktop中刷新数据集(尽管不在Power BI Service中)时,你会看到SQL查询运行了两次。这是SQL Server Profiler提供的证据,显示了在Power BI Desktop中刷新上述查询时会发生什么:
如果查询速度慢,或者每次查询执行都要花时间,那么你就应该避免这种情况。
为什么会这样呢?Power BI希望在查询实际运行之前知道表的结构,因此要求Power Query返回前0行。不幸的是,在这种情况下,无法进行查询折叠,因此整个查询需要运行一次来获取结构,一次来获取数据。
解决方案是:使用Table.View M函数对查询返回的结构进行硬编码,并手动实现查询折叠。这是新查询的改编版本:
一般来说,创建视图要比用SQL嵌入Power BI数据集要好得多,因为它使维护和调整变得更加容易。当然,如果你可以直接连接到视图,就无需在Power BI中编写任何SQL,查询折叠同样将起作用,并且Power BI Desktop在刷新时仅查询一次视图。
好了,现在你应该知道为什么Power BI运行两次你的SQL查询?以及怎么解决这个问题。
活动报名
推荐阅读
【玩转数据,智启未来 ◆ 深圳】 Power BI Workshop 8月培训线下来袭!
All 必须码住的系列 | Power BI最佳实践的十大秘密武器(第3部分)
技术交流
1.Power BI免费下载:http://www.yeacer.com/
Microsoft Power BI Desktop中文最新版:下载地址
2.欢迎加入的Power BI技术群,目前正在学习阶段,有兴趣的朋友可以一起学习讨论。
Power Data技术交流群:702966126 (验证注明:博客园Power BI)
更多精彩内容请关注微信公众号:悦策PowerBI
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载。