How to Show Month Over Month Change in Power BI
Calculating month-over-month change is one of the most common and valuable ways to measure business performance, but getting it right in Power BI can feel intimidating at first. If you’ve ever found yourself stuck trying to write the right DAX formula or uncertain how to set up your data, you’re in the right place. This guide will walk you through the entire process step-by-step, from quickly preparing your data to writing the necessary formulas and creating clear, insightful visualizations.
What is Month-over-Month (MoM) Growth?
Month-over-month (MoM) growth measures the percentage change in a specific metric from one month to the next. For example, if your e-commerce store generated $10,000 in revenue in January and $12,000 in February, your MoM revenue growth for February would be 20%.
It's calculated with a simple formula:
- ((Current Month's Value - Previous Month's Value) / Previous Month's Value) * 100
Tracking MoM growth helps you understand short-term trends, assess the immediate impact of your marketing campaigns or sales initiatives, and spot potential issues before they become major problems. It answers the fundamental question: "Are we doing better than we were last month?"
Preparing Your Data: The All-Important Date Table
Before writing a single DAX formula for time intelligence, you need a proper date table. This is non-negotiable for reliable time-based calculations in Power BI. A date table is a separate table in your data model that contains a continuous list of dates and associated time periods (like year, quarter, month, and day of the week).
Why You Absolutely Need a Date Table
- It guarantees continuous dates: Your data might have gaps. For instance, you might not have sales recorded on a holiday. Time intelligence functions like
DATEADDneed an unbroken sequence of dates to work correctly. A date table provides that sequence. - It centralizes time calculations: It becomes the single source of truth for all things date-related in your reports, ensuring consistency across all your visuals.
- It makes your DAX formulas simpler and more powerful: It allows functions like
PREVIOUSMONTH,DATESYTD, and many others to function as intended.
Finally, you need to connect your date table to your fact table (e.g., your sales data table) with a one-to-many relationship, linking the date column from your date table to the date column in your fact table.
How to Create a Date Table with DAX
The easiest way to create a date table is by using DAX. From the report view in Power BI, navigate to the “Data” view on the left, then click "New Table" from the "Table tools" ribbon.
You can use the CALENDARAUTO() function if you want Power BI to automatically scan your model and find the earliest and latest dates:
Date Table = CALENDARAUTO()A more controlled approach is to use the CALENDAR() function, where you specify the start and end dates. This gives you more precise control. You can use the MIN() and MAX() functions to dynamically set the start and end dates based on your sales data table (we'll call it 'SalesData' in this example).
Date Table =
ADDCOLUMNS (
CALENDAR ( MIN ( SalesData[OrderDate] ), MAX ( SalesData[OrderDate] ) ),
"Year", YEAR ( [Date] ),
"MonthNumber", MONTH ( [Date] ),
"MonthName", FORMAT ( [Date], "mmmm" ),
"MonthYear", FORMAT ( [Date], "mmm yyyy" ),
"Quarter", "Q" & FORMAT ( [Date], "q" )
)This code not only creates a list of dates but also uses ADDCOLUMNS to add useful columns like year, month number, and month name that you can use for slicing and dicing your data. After creating your table, right-click on it in the Fields pane and select "Mark as date table" to tell Power BI to use it for all time-based calculations.
Calculating MoM Change with DAX Measures
With our date table ready and connected, we can now create the three DAX measures needed to calculate month-over-month growth. A "measure" is a formula that performs a calculation on your data.
To create a new measure, go to the report view, right-click on your primary data table in the Fields pane, and select "New measure."
Step 1: Your Base Measure (e.g., Total Sales)
First, we need a base measure that simply adds up the metric we want to analyze. If you already have one, you can skip this step. If not, create a simple measure to sum your key metric. For example, if you want to track sales revenue:
Total Sales = SUM(SalesData[Revenue])Using an explicit measure like this is always better than relying on Power BI's implicit measures (when it automatically sums a column you drop into a visual). It gives you more control and makes your formulas easier to read and manage.
Step 2: Calculating the Previous Month's Value
Next, we need a measure that calculates the total sales for the previous month. This is where our date table starts to shine. We'll use the powerful CALCULATE function together with DATEADD.
Sales Last Month =
CALCULATE(
[Total Sales],
DATEADD('Date Table'[Date], -1, MONTH)
)Let's break that down:
- `CALCULATE([Total Sales], ...) tells Power BI that we want to perform the [Total Sales] measure, but we want to modify the context in which it's calculated.
DATEADD('Date Table'[Date], -1, MONTH)is the filter that modifies the context. It takes the current period's dates (for example, all the days in February 2024) and shifts them back by the specified interval. Here, we're shifting them back by -1 MONTH to get all the dates for January 2024.
So, for any given month, this measure returns the total sales from the month immediately preceding it.
Step 3: Bringing it Together - The MoM Percentage Change Formula
Now we have our two building blocks: [Total Sales] and [Sales Last Month]. We can combine them into a final measure that calculates the percentage change.
MoM % Change =
DIVIDE(
[Total Sales] - [Sales Last Month],
[Sales Last Month]
)Here’s the logic:
[Total Sales] - [Sales Last Month]calculates the absolute change in sales between the two months.DIVIDE(..., [Sales Last Month])safely divides that change by the previous month's sales number.
Using the DIVIDE() function is a best practice because it automatically handles division-by-zero errors. If [Sales Last Month] is blank or zero (for instance, on the very first month of your data where there is no previous month), DIVIDE() will simply return a blank instead of an error that would break your visual. Finally, select this new measure in your Fields pane and use the Measure tools in the ribbon to format it as a percentage.
Visualizing MoM Growth in Your Power BI Report
Now for the fun part! Creating the DAX measures is half the battle, the other half is presenting the information in a way that's easy to understand. Here are a few effective ways to visualize your new MoM % Change measure.
Method 1: The Classic Table or Matrix
The simplest way to see your data is often in a table or matrix visual. It’s a straightforward, no-frills view of performance.
- Add a Matrix visual to your canvas.
- Drag your "MonthYear" column from your Date Table into the "Rows" field.
- Drag your [Total Sales], [Sales Last Month], and [MoM % Change] measures into the "Values" field.
This will give you a clear, row-by-row breakdown of your sales performance and its month-over-month change.
Method 2: A Line and Clustered Column Chart
This combination visual is perfect for showing the overall trend of your metric alongside the fluctuations of its MoM change.
- Select the "Line and clustered column chart" visual.
- Drag "MonthYear" from your Date Table to the "Shared axis" field.
- Drag [Total Sales] into the "Column values" field.
- Drag [MoM % Change] into the "Line values" field.
This instantly shows you how the percentage change relates to your actual sales volume. You can see, for example, if a small percentage drop corresponds to a significant actual revenue decline or vice versa.
Method 3: KPI Cards for a Quick Snapshot
KPI cards are excellent for dashboard summaries, showing the most recent month's performance at a glance.
- Add a "Card" visual to your canvas.
- Drag the [MoM % Change] measure into the "Fields" area.
- Use a slicer or filter on your page, set to your Date Table's "MonthYear", to show the specific month you're interested in.
For more context, use the "KPI" visual. A KPI visual shows a value, a trend axis, and a target goal. You could place [Total Sales] as the indicator and [Sales Last Month] as the target goal to easily see if this month is better or worse than the last.
A Quick Tip: Use Conditional Formatting to Make Your Data Pop
Add instant clarity to your tables and matrices with conditional formatting. Select your matrix visual, go to the "Format your visual" pane, find "Cell elements," and select your [MoM % Change] measure to apply formatting.
- Data Bars: Provide a quick visual representation of the magnitude of the change.
- Icons: Use red down arrows for negative growth, green up arrows for positive growth, and yellow dashes for no change. It’s an incredibly effective way to make your report scannable.
Final Thoughts
Breaking down month-over-month analysis in Power BI is a process of three main parts: establishing a solid data foundation with a date table, building your logic piece-by-piece with DAX measures, and choosing the right visuals to tell your story. Once you get the hang of these steps, you'll be able to apply the same logic to analyze week-over-week, quarter-over-quarter, or year-over-year performance.
While learning DAX is a valuable skill, sometimes you just need a quick answer without becoming a BI developer. For those moments, running your analysis can be as simple as asking a question. All the work we covered on connecting data, writing formulas, and configuring charts is what we've automated at Graphed. We connect directly to your sources like Google Analytics, Shopify, or Salesforce, handle the data modeling, and let you create entire dashboards just by describing what you want to see - "show me a line chart of Shopify revenue with month-over-month percentage change" - so you get the insights in seconds, not hours.
Related Articles
How to Connect Facebook to Google Data Studio: The Complete Guide for 2026
Connecting Facebook Ads to Google Data Studio (now called Looker Studio) has become essential for digital marketers who want to create comprehensive, visually appealing reports that go beyond the basic analytics provided by Facebook's native Ads Manager. If you're struggling with fragmented reporting across multiple platforms or spending too much time manually exporting data, this guide will show you exactly how to streamline your Facebook advertising analytics.
Appsflyer vs Mixpanel: Complete 2026 Comparison Guide
The difference between AppsFlyer and Mixpanel isn't just about features—it's about understanding two fundamentally different approaches to data that can make or break your growth strategy. One tracks how users find you, the other reveals what they do once they arrive. Most companies need insights from both worlds, but knowing where to start can save you months of implementation headaches and thousands in wasted budget.
DashThis vs AgencyAnalytics: The Ultimate Comparison Guide for Marketing Agencies
When it comes to choosing the right marketing reporting platform, agencies often find themselves torn between two industry leaders: DashThis and AgencyAnalytics. Both platforms promise to streamline reporting, save time, and impress clients with stunning visualizations. But which one truly delivers on these promises?