Please note javascript is required for full website functionality.


Power Query: Custom Built Functions

13 September 2017

Welcome to our Power Query blog.  Today I create a simple function and show how to access it when building a query.

Last week, I looked at how to access and test the built-in Power Query functions.  There are occasions, however, when I am repeatedly using the same logic, and I want to store it in a custom function of my own.  Let’s take a look.

Back in Uniting Different Types, I used some M code to combine two of my columns in the screenshot below:

If I often need to combine my columns in this way I can take my M code

= [expense code] & " " & Text.From([Expense Category])


and put it into a function of my own.

I begin by creating a blank query from my Excel worksheet:

Then, I need to access the Advanced Editor:

At the beginning of my function, I need to give it a name – I choose ‘FormatExpenseType’.  I need to define what parameters my function accepts (I’ve called them ‘InText’ and ‘InNumber’).  Next, I apply my logic to combine the parameters and finish my function syntax by defining the output (‘result’).  I can specify a value for my function should I wish (I have chosen not to, but I still need the final line):

let FormatExpenseType =(InText as text, InNumber as number)=>

let result =  InText & " " & Text.From(InNumber)

In result 

In FormatExpenseType

Once I have created my query, I can name it ‘FormatExpenseType’, ready to use in other queries. I can test it first by clicking ‘Invoke’, or choose to ‘Close and Load’ from the ‘Home’ or ‘File’ tabs to store the function in my workbook.

Choosing to invoke creates a new query rather than adding an unnecessary step to my function:

My query is now shown as a function in my workbook, and hovering over it shows me the details behind it.

I can also choose to invoke from here, which would create a new query in exactly the same way as invoking from the Query Editor.

I am ready to call this function from my ‘Table1’ query. First, I double click on ‘Table1’. In the ‘Add Column’ tab in the Query Editor, I can ‘Invoke Custom Function’:

I am prompted to enter a new column name and select a function – in this case I can only see the one I have created.

This time, instead of values, I choose columns as my parameters:

I select the expense code and Expense Category columns.

I have deliberately used a query where I already have my original Expense Type column for comparison, so now I test my function:

The function works perfectly – and because it will work on any text and number column combination I could rename it to be more generic (e.g. FormatTextPlusNumber) and use it for other columns.

Want to read more about Power Query? A complete list of all our Power Query blogs can be found here. Come back next time for more ways to use Power Query!