WMA Hub

Tools / DAX library

Month-over-month change %

Compare each month with the month before it.

Time intelligence · Beginner · Not yet reviewed

Sales MoM % =
VAR CurrentMonth = [Total Sales]
VAR PriorMonth =
    CALCULATE([Total Sales], DATEADD('Date'[Date], -1, MONTH))
RETURN
    DIVIDE(CurrentMonth - PriorMonth, PriorMonth)

How it works

DATEADD moves every date in the current context back by one month, then [Total Sales] is calculated for that earlier period. The change is expressed relative to the earlier month.

Because DATEADD works on whole periods, the measure behaves correctly at month level and above. At day level the previous month's matching day is used.

What your model needs

- A date table named 'Date' with one row per day and no gaps, marked as the date table in Power BI (Table tools > Mark as date table). - A one-to-many relationship from 'Date'[Date] to the date column of the Sales table (for example Sales[OrderDate]). - Total Sales = SUM(Sales[Amount]) (called [Total Sales]).

Small example

Input data

Month | Total Sales
Jan 2024 | 80,000
Feb 2024 | 92,000

Expected result

Month | Sales MoM %
Jan 2024 | (blank)
Feb 2024 | 15.0%

Common mistakes and limitations

- Using the measure on a visual that mixes months with other date levels (for example weeks) gives confusing comparisons. Keep the axis at month level. - DATEADD needs a contiguous date column: use the Date table, not a column from a fact table.

Tags: month-over-month, DATEADD, time intelligence, growth