One of the coolest features added to the April 2016 release of Power BI Desktop is “Query Parameters”. With Query Parameters we can now create parameters in Power BI Desktop and use them in various cases. For instance, we can now define a query referencing a parameter to retrieve different datasets. Or we can reference parameters via Filter Rows. Generally speaking we can reference parameters via:

Data Source

Filter Rows

Keep Rows

Remove Rows

Replace Rows

In addition, parameters can be loaded to the Data Model so that we can reference them from measures, calculated columns, calculated tables and report elements.

In “Power BI Desktop Query Parameters” series of articles I show you how to use Query Parameters in different scenarios.

Scenarios

In this article I’ll show you some use cases of Query Parameters based on some scenarios as below:

Parameterising a Data Source Using Query Parameters in Filter Rows

You’ll learn more about Query Parameters in the next articles “Power BI Desktop Query Parameters, Part 2, SQL Server Dynamic Data Masking Use Case” and “Power BI Query Parameters, Part 3, List Output“

Requirements

You’ll require to meet the following requirements to be able to follow this post:

Note: As Dynamic Data Masking (DDM) is a new feature of SQL Server 2016 and it is not available in the previous versions of SQL Server you need to install the latest version of SQL Server 2016. So you will need SQL Server 2016 and Adventure Works CTP3 only if you want to use Query Parameters on top of Dynamic Data Masking (DDM).

Scenario 1: Parameterising a Data Source

Parameterising a Data Source could be used in many different use cases. From connecting to different data sources defined in Query Parameters to load different combinations of columns. To make it more clear I break down the scenario to some more specific use cases.

Use Case 1: Parameterising Data Source to Connect to Different Servers and Different Databases

Suppose you have different customers using the same database schema. But, the databases hosted in different instances of SQL Server and also the database names are different. With Query Parameters we can easily switch between different data sources then publish the reports to each customers’ Power BI Service.

Open Power BI Desktop

Click Get Data

Select “Blank Query” from “Other” then click “Connect”

In Query Editor window click “Manage Parameters” from the ribbon

1-Click “New”

2-Type a name for the parameter

3-You can also write a description

4-Select Type as Text

5-From “Allowed Values” select “List of Values”. This opens a list that you can type in different values for the parameter. If you don’t want to enter ant predefined values for the parameter select “Any value” for “Allowed Values”

6-Fill the list with some valid values. In our case it would be instance names

7, 8, 9-Select a “Default Value” and “Current Value” then click OK

Now you can see the parameter in the Queries pane

Create another parameter for database names. You can do this by clicking “Manage Parameters” from the ribbon, or you can right click on the “Queries” pane then “New Parameter”

Repeat the above 9 steps again, but, this time for defining a parameter for database names

You should now see both parameters in Queries pane

You can delete “Query1” as we want to use the above parameters in the Data Source dialogues

Click “New Source” from the ribbon

Click “SQL Server Database” then click “Connect”

Select “Parameter” for “Server” then select the appropriate parameter from the list

Do the same for “Database” then click OK

Select “FactInternetSales”

Click “Select Related Tables” then click OK

Click “Close & Apply”

So far we loaded data from “AdventureWorksDW2016CTP3” into the model. Now it’s time to create a simple report then switch the parameters to see how it works.

As you see I added a column chart showing Sales Amount by Calendar Year and also a table showing Products and Sales Amount. (Just keep it simple)

To switch the server/database we just need to change the parameters’ values

Click “Edit Queries” then “Edit Parameters”

As you see you can now simple change the “Instance Name” and the “Database” names to switch to another server and database without touching anything else then click OK

The data source refreshes to load data from the new server/database

Use Case 2: Loading Dynamic Columns from the Data Source

Remember the previous use case. We had different customers having different databases on different servers. Our customers also have different reporting needs. For instance, they need to see their customers’ names in different shapes. The customers data stored in DimCustomer. We should cover the combinations below for “Customer Name” column:

1- Customer Name = LastName from DimCustomer

2- Customer Name = FirstName + LastName from DimCustomer

3- Customer Name = LastName + FirstName from DimCustomer

4- Customer Name = FirstName + MiddleName + LastName from DimCustomer

To support this we can create a parameter containing all combinations above for Customer Name.

Delete DimCustomer from the model we created for the previous use case

Create a new parameter and add all needed combinations in the list of values. You can do this by right clicking on the Queries pane then click “New Parameter” or by clicking on “Manage Parameters” from the ribbon

Note: You should put T-SQL syntax to create different combinations in the values list as the values will be used as a column in the data source query.

Now we need to import DimCustomer into the model again. (Remember, we removed DimCustomer in pervious steps)

Click “New Source” from the ribbon on Query Editor window

Click “SQL Server Database” then “Connect”

Select “Server” and “Database” parameters

Click “Advanced options”

Put the following SQL statement

SELECT customerkey,

geographykey,

customeralternatekey,

title,

–firstname,

–middlename,

lastname,

namestyle,

birthdate,

maritalstatus,

suffix,

gender,

emailaddress,

yearlyincome,

totalchildren,

numberchildrenathome,

englisheducation,

spanisheducation,

frencheducation,

englishoccupation,

spanishoccupation,

frenchoccupation,

houseownerflag,

numbercarsowned,

addressline1,

addressline2,

phone,

datefirstpurchase,

commutedistance

FROM DIMCUSTOMER

Note: I took out “firstname” and “middlename” from the query. The “lastname” column will be replaced with the “CustomerName” parameter in the next steps.

Click OK

Rename “Query1” to DimCustomer

Click “Advanced Editor” from the ribbon

Scroll right to find “lastname” column

Replace “lastname” column with the “CustomerName” parameter. To do so you just need to replace “lastname” with the following: “&CustomerName&” as CustomerName Click Done You’ll get a warning message, click “Edit Permission” Click “Run” You will see the CustomerName after running the query Click “Close & Apply” Add a new Matrix to the report and put “SalesAmount” from FactInternetSales and “CustomerName” from DimCustomer Now we want to switch the “CustomerName” parameter value to see what happens Click “Edit Queries” from the ribbon then click “Edit Parameters” Change just the value of “CustomerName” then click OK We modified the query by modifying the columns, so we need to confirm running the query, so click Run As you see we now have a new combination in Customer Name column If we want to switch between the server/database and also the customer name we just need to switch the parameters’ values The above cases might not be the best examples of using the parameters on a data source, but, you probably got the idea how powerful this new feature could be. Scenario 2: Using Query Parameters in Filter Rows As stated before, in addition to data sources, we currently can reference parameters via Filter Rows, Keep Rows, Remove Rows and Replace Values. In this section I explain how to use parameters in Filter Rows. In the model we created in previous sections click “Edit Queries” from the ribbon In Query Editor window create a new Query Parameter Select DimSalesTerritory from Queries pane Add a row filter on “SalesTerritoryCountry” column Select “Parameter” for filter type then select “Countries” parameter from the drop down list then click OK As you see DimSalesTerritory is filtered for the rows that their SalesTerritoryCountry is equal to “United States” Now switching the parameter value will change the “Filter Row” Click the “Countries” parameter from the Queries pane then change Current Value to Canada Select DimSalesTerritory again and you’ll see that the is changed Parameterising Filter Rows is done!



Like this: Like Loading...