当从关系数据库(如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查询?以及怎么解决这个问题。