Currently I am working with a project where we extract data from a SQL server – some of the business logic is built into scalar value functions (documentation).
Now the magic of PowerQuery enables us to reuse these functions within PowerQuery and Query Folding is supported – more about this at the end of this post.
Let’s step through how to do this
I will use the famous AdventureWorksDW2014 database.
In my database I have added a function called IsoweekwithYear
This function uses a date a parameter and returns an Integer representing the year and the week. In this example it returns 202018 as 28 april 2020 is in iso week 18 of 2020.
In the Power BI Desktop we can now connect to the SQL server
And in this example I pick the DimDate table from the database
And if we scroll down you will also see the functions, we have in the database
Notice that the data preview pane will show the function and the parameters it can take.
Then I click Transform Data and the Power Query Editor will appear
By default it will Invoke the function and in this case it will return Null
Notice the Applied Steps in the Query Settings pane
If you remove the last step where the function is invoked
You will see it as a function that has a parameter called @DATE which is optional.
Now let’s use the function
In the Query DimDate we can the call the function – as we now we need to call the function using the column FullDateAlternateKey as the parameter I select this column first and then click Invoke Custom Function via the Add Column section in the ribbon.
We can then choose the Function Query IsoweekWithYear and use the column name as the parameter value
This will add a new column at the end of my query
Containing the ISOWeek – yuppieee 🙂
Is Queryfolding supported ?
It sure is
As we can see as we can select “View Native Query” and see that the SQL statement is added.
This means that the server does the work instead of the M-engine.
I must admit that I wasn’t aware of this possibility before – and I feel like it opens up a lot of scenarios to reuse already built and tested functions that your database developers have built.
Let me know if you find this useful as well by leaving a comment or give the post a like
Happy querying !!!