We're excited to announce that from 14th April we'll be running live online training courses too!
From 14th April we'll be running live online training courses too!
Dynamic comparison calculations in DAX
This blogs shows a clever way in which you can use a slicer to choose which values to compare in a measure.

Posted by Sam Lowrie on 11 November 2019

You need a minimum screen resolution of about 700 pixels width to see our blogs. This is because they contain diagrams and tables which would not be viewable easily on a mobile phone or small laptop. Please use a larger tablet, notebook or desktop computer, or change your screen resolution settings.

Interactive visual calculations in Power BI

Comparing performance across any dimension can be messy, as if you're not careful you'll require multiple visuals (one for each element of the dimension table whose values you're comparing). In this blog we will let our end user decide for which year to compare sales:

Power BI DAX Dynamic calculation

Check if this is the effect you want by clicking here to try the report.

The first thing to do is create a table with a unique list of the values you are interested in. This can be a static table (for which you type in data) or a live connection:

Power BI Dynamic measures

This example is using a query to the same source as my data, but with the duplicates and extra columns removed. I've called the table Live Slicer table.

 

If you try to use the same model table or column for the slicer as for the data in the visual then the visual will be filtered (which we don't want)! Your data model should thus include a disconnected slicer table, like this:

DAX dynamic calculations

The Purchase table contains all of the sales data, while the Calendar table splits the dates into Year, Month etc.  Notice that the slicer table is separate: it doesn't directly filter anything.

Now to create a slicer with the column from the Live slicer table table (and a visual with the same column from the data table):

DAX Measure Dynamic VALUES

The results aren't very exciting without a measure to tie the visuals together!

Now create a measure to calculate the total sales for the column year, but subtracting the selected year's sales:

Comparison to selected =

VAR SelectedValue =

-- Returns the year chosen in the slicer table

VALUES('Live slicer table'[YearNumber])

VAR OriginalColumnValue =

-- Total sales for each year for the filter context

SUM(Purchase[Quantity])

VAR TheSlicerCalculation =

-- Replace the row/column filter with the year chosen by the user

CALCULATE(

SUM(Purchase[Quantity]),

'Calendar'[YearNumber] = SelectedValue

)

-- Take the sales of the year chosen by the user away

-- from the current column/row sales

Return OriginalColumnValue - TheSlicerCalculation

Adding this measure to the visual gives the desired effect:

Power BI DAX Dynamic Measures Calculations

All that is left to do is change the titles - and perhaps add some conditional formatting.

The title measure works using the same idea as the calculation above. Use VALUES to return the only year that is left:

Chart Title =

-- The "" indicate literal text to be joined

-- on to the remaining year

"Year sales less " &

VALUES('Live slicer table'[YearNumber]) & " sales."

This can be applied by turning the Title property to ON and then hovering to the right of the text box and clicking the dots that appear.

Power BI DAX Dynamic Title

Choose the measure Chart Title as the Title text field.

This trick also works for creating slicers to change the aggregate being used: swap between SUM, AVERAGE, MIN or MAX to get truly dynamic visuals!

This blog has 0 threads Add post