This post may contain affiliate links. Please read my disclosure for more info.

Power Query – Using Parameters

Power Query - Using Parameters

As Power Query records the transformation steps, it includes many hardcoded values within the M code.  For example, if we filter a column to select all values greater than 50, the 50 will be a hardcoded value.  Or if we import a CSV file, the file path is hardcoded into the query.

What if we want to change these values or file paths?  Obviously, we could edit the query each time, which would be very time-consuming.  Or, we could create parameters.

The term “Parameter” may be a bit confusing.  We use the term variable when writing VBA, or maybe the terms conditions, criteria or arguments when writing Excel formulas, these are all effectively the same thing.  Parameters, variables, conditions, criteria and arguments are all values we can change to get a different output.  Microsoft decided to use the term Parameter when designing  Power Query.

In this post, we will be using cells values as parameters; therefore, by changing the cell value we can change the result of a query.  The parameter could be contained within a CSV file, or as a database setting.  But we’ll focus on the situation you’re most likely to encounter, which is a cell value.

As Power Query develops, new and easier to use features are introduced.  Parameters are one of those developing features.  The method I want to show you I believe is currently the easiest and best to implement.

Download the example files

It may be tempting just to read the text below, but you will retain the information much better if you work along with the examples.

Subscribers can download the files from the Downloads section.

Excel Downloads

All the examples in this post use Example 8 – Using Parameters.xlsx from the downloads.

The Excel workbook contains the source data only.  We will work through all the steps from start to finish.  Open the up the file and let’s get going.

Create the query

The first step is to create a query as normal.  As noted, above, all the steps will be hardcoded.

Select any cell in the source table and click Data -> From Table/Range from the ribbon.

Data From Table Range

The Power Query editor will open.  Make the following transformations

Date column

Click on the Date and Time icon next to the Date header, select Date from the menu.

Change Date Time to Date

Select the Date column header, then click Transform -> Date -> Month -> End Of Month

Change Date to Month End Date

Filter the Date column to only include 31 January 2019.  The date format may appear different depending on your location settings.

Select 31 January Date

Ensure the Date column is still selected, then click Home -> Remove Columns

Home Remove Column

Sold By column

On the Sold By column, click on the filter icon and ensure only David is selected.

With the Sold By column still selected, click Home -> Remove Columns

That’s enough transformations for now.  Click Home -> Close and Load.

The Table should look like this:

Close and Load - Excel Table

From the source data we created a Table which shows the products sold by David in January 2019.  But what if we want the products sold by Sally in March 2019, or Mark in March 2019?  This is where the parameters come in.  In the next section, we will create some parameters to dynamically change the name and date.

Create the parameters

As a simple explanation, a parameter is just a normal query, in which we drill down into the value itself and load as a connection.

In this example, we will be using an Excel Table as the source, but it could equally be in named range, CSV, or any other data source we can get into Power Query.

On the worksheet which contains the query output table, create two tables with single values in them:

Create Parameter Tables on Worksheet

After creating each Table, I have renamed them.

Name a Table

The first Table I have named Date, and the second SoldBy.

Creating a Text parameter

First, we will create the parameter to change the name.

Select the cell in the SoldBy table and create a query, by clicking Data -> From Table/Range.

Pay close attention to the data type.  The Sold By column in the original query above is a text data type, and the data type in this query is also text.  We need these to be identical.

Within Power Query right-click on the value and select Drill Down from the menu.

Right-click drill down

The window will change to a view we have not seen before, the Text Tools window:

Text Tools Window Power Query

Make a note of the query name, which is SoldBy (no space), as shown in the screenshot above.

Click File -> Close and Load To…

File Close and Load To

From the Import Data window select Only Create Connection, then click OK.

Import Data - Connection Only

The Queries & Connection menu will now show two queries, the original data, called Sales Data, and the text parameter called SoldBy.

Queries & Connection Table and Parameter

Creating the Date parameter

OK, let’s go through the same steps again, for the Date parameter.  Compared to the text parameter we created above, there is one additional step we need to make.  In the original query, the Date column had a date type at the point it was filtered, therefore we need a date type for the parameter too.

After changing the Date column to a date type, right-click on the value and click Drill Down.  Rather than Text Tools, it will be the DateTime Tools view.

DateTime Tools Window Power Query

Make a note of the query name, which is Date in this scenario.

As before, click Close & Load To… then select Create Connection Only and click OK.

We should now have two parameters created, SoldBy as a text type and Date as a date type.

Queries & Connection Table and Two Parameters

Insert the parameters into the query

Having created the parameters, let’s use them.  To do this, we are going to make some basic changes to the M code.  We could use the Advanced Editor, or the Formula Bar.  To keep things simple, I’ll use the Formula Bar for this example.

Important information: M code is case sensitive (SoldBy and soldby are not the same).

Open the original query (the SalesData query in our example).

If the Formula Bar is not visible, click View -> Formula Bar.

Find the step where we hardcoded the value David.

Power Query - Change Text Parameter

Replace “David” for the parameter SoldBy.

= Table.SelectRows(#"Removed Columns", each ([Sold By] = "David"))

becomes:

= Table.SelectRows(#"Removed Columns", each ([Sold By] = SoldBy))

Next, we will apply the Date parameter.  Find the step where we hardcoded 31 January 2019 as the date.

Apply Date Parameter

Replace #date(2019, 1, 31) for the parameter Date.

= Table.SelectRows(#"Changed Type1", each ([Date] = #date(2019, 1, 31)))

becomes

= Table.SelectRows(#"Changed Type1", each ([Date] = Date))

That’s all there is, we have now applied the parameters.  Click Home -> Close & Load to load the changes into Excel.

Using the parameter

Now that we are back in Excel, we can change the Date and Sold By cell values, then click Data -> Refresh All.

Change cell values - parameters

Wow! Magic eh?  The query updates to show only the values for the parameters we have selected.

You can now set-up any Power Query hardcoded value as a parameter.  I find the most useful things to set-up as parameters are:

  • File paths to import external data files
  • Period end dates for financial reports
  • Names of business divisions or cost centers to create reports for specific areas only
  • Any settings another user is likely to need to change


Want to Learn VBA & Macros?

If you want to automate Excel and save time, my recommended resouces for learning VBA Macros are:

Leave a Reply

Your email address will not be published. Required fields are marked *