当从关系数据库(如Power BI中的SQL Server)导入数据时,可以选择SQL查询来获取数据,先在数据库中查看结果:       

           

                    

mysql查询两次group by怎么写_Power

 

将SQL语句放到查询中:

mysql查询两次group by怎么写_Desktop_02

输入连接信息后查看预览:

mysql查询两次group by怎么写_Power_03

这是该查询所用到M代码:

mysql查询两次group by怎么写_Desktop_04

对应该查询,它具有禁用Power Query查询中的查询折叠的副作用,因此,如果添加任何其他转换,它们将始终是在Power Query引擎内部执行-效率可能比在数据源中执行效率低。

还有一个缺点:在Power BI Desktop中刷新数据集(尽管不在Power BI Service中)时,你会看到SQL查询运行了两次。这是SQL Server Profiler提供的证据,显示了在Power BI Desktop中刷新上述查询时会发生什么:

 

mysql查询两次group by怎么写_Power_05

 

如果查询速度慢,或者每次查询执行都要花时间,那么你就应该避免这种情况。

为什么会这样呢?Power BI希望在查询实际运行之前知道表的结构,因此要求Power Query返回前0行。不幸的是,在这种情况下,无法进行查询折叠,因此整个查询需要运行一次来获取结构,一次来获取数据。

解决方案是:使用Table.View M函数对查询返回的结构进行硬编码,并手动实现查询折叠。这是新查询的改编版本:

mysql查询两次group by怎么写_SQL_06

mysql查询两次group by怎么写_Power_07

一般来说,创建视图要比用SQL嵌入Power BI数据集要好得多,因为它使维护和调整变得更加容易。当然,如果你可以直接连接到视图,就无需在Power BI中编写任何SQL,查询折叠同样将起作用,并且Power BI Desktop在刷新时仅查询一次视图。

好了,现在你应该知道为什么Power BI运行两次你的SQL查询?以及怎么解决这个问题。