Greg_Deckler's avatar
Greg_Deckler
Community Champion
3 years ago

Better Year Over Year Change

Continuing with exploring alternatives to Power BI's default quick measures that don't involve the CALCULATE function, such as Better Running TotalBetter Average per Category, Better Weighted Average per Category, Better Filtered ValueBetter Sales from New Customers, and Year to Date Total. This one tackle Year Over Year Change.

 

Power BI's Year Over Year Change quick measure returns something like this:

 

Value YoY% = 
  VAR __PREV_YEAR = CALCULATE(SUM('Table'[Value]), DATEADD('Dates'[Date], -1, YEAR))
RETURN
  DIVIDE(SUM('Table'[Value]) - __PREV_YEAR, __PREV_YEAR)

 

or this:

 

Value YoY% 2 = 
IF(
  ISFILTERED('Dates'[Date]),
  ERROR("Time intelligence quick measures can only be grouped or filtered by the Power BI-provided date hierarchy or primary date column."),
  VAR __PREV_YEAR = CALCULATE(SUM('Table'[Value]), DATEADD('Dates'[Date].[Date], -1, YEAR))
RETURN
  DIVIDE(SUM('Table'[Value]) - __PREV_YEAR, __PREV_YEAR)
)

 

Which may seem great until you try to use it with fiscal calendars and such. A better way:

 

Better Year Over Year Change = 
    VAR __Year = MAX('Table'[Year])
    VAR __Curr = SUMX(FILTER(ALL('Table'),[Year] = __Year),[Value])
    VAR __Prev = SUMX(FILTER(ALL('Table'),[Year] = __Year - 1),[Value])
RETURN
    DIVIDE(__Curr - __Prev, __Prev, 0)

 

Watch the video!

 

1 Reply

  • This is great, and I believe related to an issue I am currently having. I am trying to build this matrix 

    Current Month:Mar-23     
           
     2022Prev MonthActualBudget 1Budget 2Budget 3
    Total Sales115024502600250023002800
    Total Expense175180175175175200
    Year over Year Growth1504501450135011501650
    Growth %13%23%126%117%100%143%
    Margin %85%93%93%93%92%93%

     

    Using this Data

    Date VersionTotal SalesTotal Expense
    2/1/2021Product AActual1000100
    2/1/2022Product AActual2000150
    3/1/2021Product AActual1000100
    3/1/2022Product AActual1150175
    2/1/2023Product ABudget 12100175
    2/1/2023Product ABudget 22200175
    2/1/2023Product ABudget 32400200
    3/1/2023Product ABudget 12500175
    3/1/2023Product ABudget 22300175
    3/1/2023Product ABudget 32800200
    2/1/2023Product AActual2450180
    3/1/2023Product AActual2600175
    2/1/2021Product BActual30060
    2/1/2022Product BActual50090
    3/1/2021Product BActual31060
    3/1/2022Product BActual530105
    2/1/2023Product BBudget 1800105
    2/1/2023Product BBudget 2850105
    2/1/2023Product BBudget 3950120
    3/1/2023Product BBudget 1950105
    3/1/2023Product BBudget 2925105
    3/1/2023Product BBudget 3975120
    2/1/2023Product BActual980108
    3/1/2023Product BActual1000105

     

    The issue I am having is with year over year growth. I am currently using this measurement to try and calculate Previous year sales, but it only populates for the 'Actual' column.

     

    PY Sales = CALCULATE(ROUND(SUM('DataTable'[Total Sales]),2),FILTER(ALL('Versions'[Version]),'Versions'[Version] = "Actual"),DATEADD('Date Table'[Date],-1,Year))

     

    I have tried using different filter methods, but nothing I have tried has worked. This is probably easier than I am making it out to be, so I figured I would ask!

    Thank you in advance for assistance!

    JC