Following on from my last blog (found here), I wanted to share a new Query Folding feature in Power Query. The View Native Query functionality was actually released in the June 2016 Power BI update but it was hardly advertised/promoted by Microsoft.
What is View Native Query?
In a nutshell, it enables you to check if each of your step by step transformations in Power Query are being folded back to the source. I have shown techniques of using external monitoring tools, as well as an in-built M function. However, the View Native Query feature makes our lives so much easier. I will demonstrate how easy it is to use.
I loaded up an old Query Folding Power BI workbook in Power Query, which was connecting to the AdventureWorksDW2014 SQL Server database. If you want a copy of it, feel free to comment below and I’ll get back to you. However, you can do this with any workbook and need to follow the simple instructions below:
1. Right click on the last step of your transformation and a new option called View Native Query should be available. Left click to open the SQL query.
2. Whilst the above SQL written at source is not the most efficient, query folding still means the data is brought back into Power Query far quicker than it would if done within the Power BI application.
3. Now copy and paste the code into SSMS, This is exactly the same code that SQL Server Profiler would produce. Execute the query.
4. In effect, this is replicating the transformation steps in Power Query. The below screenshot is taken from Power Query and note the top 10 results from this and the above output.
The coolest thing about the View Native Query feature is the fact you can check every step in the Power Query transformation. I only demonstrated the final step, but you can go back to each one and find the underlying query folding logic that has been applied.
Why is View Native Query not available?
If you get the below screenshot, the answer is simple – your transformation step doesn’t support Query Folding!
NOTE: View Native Query is ‘greyed’ out.
If possible, move any steps that aren’t supported to the end. Power Query will attempt to query fold, until there is a step it cannot. All steps after this (even if query folding is possible) will not be supported and could drastically slow down the remaining transformations.
This feature is something that should have been made available a long time ago. Whilst the power of query folding is undeniable, the methods of testing it were long and arduous. With View Native Query, we can easily check where, when and more importantly, when folding is NOT happening. Debugging slow performing transformations is so much easier now and you can in fact, swap steps around and folding will still persist where possible.
I would advise every Power Query developer to make use of this simple feature. If there are any other Query Folding techniques, tips or tricks out there, please contact me. Look out for future blogs, where I will be looking at the performance of query folding on very large data volumes (100 million + records) and whether the automated SQL Server code eventually becomes too unwieldy and poorly performing.