How to Calculate Percentage Change in Power BI
Calculating percentage change is one of the most common and powerful ways to measure business performance. Whether you're tracking revenue growth, campaign performance, or website traffic, understanding how your metrics change over time is essential. This article walks you through exactly how to calculate period-over-period percentage changes in Power BI using DAX.
Why Percentage Change is a Go-To Metric
Before jumping into the formulas, it’s helpful to understand why percentage change is such a universal metric. Raw numbers can be misleading. Knowing you made $110,000 this month is nice, but knowing it's a 10% increase from the $100,000 you made last month is a far more powerful insight. It provides context and direction.
Percentage change helps you answer crucial business questions like:
- Is our monthly revenue growing or declining?
- How effective was our latest marketing campaign compared to the previous one?
- Are support tickets increasing at a faster rate this quarter compared to last quarter?
By normalizing the data, percentage change allows you to compare performance across different time periods, products, or campaigns on an equal footing. In Power BI, you'll use Data Analysis Expressions (DAX) to build these calculations yourself.
The Essential First Step: Your Date Table
The secret to any time-based calculation in Power BI isn't just a clever formula - it's a properly configured data model. The most important piece of that model is a dedicated Date Table.
A Date Table is a separate table in your model that contains a continuous list of dates and additional columns for things like year, quarter, month, and day of the week. Time intelligence functions in DAX, which you'll use for percentage change, are specifically designed to work with a well-structured Date Table.
How to Create a Basic Date Table
If your data source doesn't already have one, you can create a Date Table directly in Power BI with a simple DAX expression. Navigate to the Data view tab on the left, then click New table from the ribbon.
In the formula bar, you can use the CALENDARAUTO() function, which automatically scans your entire model for the earliest and latest dates and creates a table spanning that range.
Date Table = CALENDARAUTO()
For more control, you can use the CALENDAR() function, where you specify a start and end date.
Date Table = CALENDAR ( DATE ( 2022, 1, 1 ), DATE ( 2024, 12, 31 ) )
Once you've created the table, you can add useful columns to it, like the year, month name, and month number. To do this, while your Date Table is selected, click New column from the ribbon.
- For the Year:
Year = YEAR ( 'Date Table'[Date] )
- For the Month Number:
Month Number = MONTH ( 'Date Table'[Date] )
- For the Month Name:
Month Name = FORMAT ( 'Date Table'[Date], "mmmm" )
Connect and Mark Your Date Table
After creating your Date Table, you need to do two final things:
- Create a Relationship: Go to the Model view and drag the date column from your main data table (e.g.,
Sales[OrderDate]) onto the date column in your newDate Table. This creates a one-to-many relationship. - Mark as Date Table: Right-click your new
Date Tableand select Mark as date table. In the dialog box that appears, choose your primary date column (Date). This tells Power BI which column to use for its internal time intelligence calculations.
With a proper Date Table in place, you’re ready to write your DAX measures.
Calculating Percentage Change with DAX: A Step-by-Step Guide
The generic formula for percentage change is * (Current Period Value - Previous Period Value) / Previous Period Value*. We'll translate this into DAX by creating three separate measures: one for the current value, one for the previous value, and a final one for the percentage change itself. This makes the logic cleaner and easier to debug.
Let's assume our data table is called Sales and the column we want to analyze is Revenue.
Step 1: Create a Measure for the Current Period's Value
First, we need a base measure that simply calculates the total value for whatever time period is currently being viewed in a visual. This is often just a simple SUM.
Go to the Report view, click on your main data table (e.g., Sales), and select New Measure from the ribbon.
Total Revenue = SUM(Sales[Revenue])
Step 2: Create a Measure for the Previous Period's Value
Next, we need to calculate the value for the previous period. This is where DAX time intelligence functions shine. The CALCULATE function is your primary tool here, as it lets you modify the "filter context" in which another measure is evaluated.
For Month-over-Month (MoM) Growth
To get the revenue from the previous month, we use CALCULATE along with the PREVIOUSMONTH function.
Previous Month Revenue = CALCULATE( [Total Revenue], PREVIOUSMONTH('Date Table'[Date]) )
How this works: PREVIOUSMONTH effectively tells CALCULATE to ignore the current month in the filter context and instead evaluate the [Total Revenue] measure for the prior month's dates.
For Year-over-Year (YoY) Growth
The concept is identical for year-over-year calculations, but we use the SAMEPERIODLASTYEAR function instead.
Last Year Revenue = CALCULATE( [Total Revenue], SAMEPERIODLASTYEAR('Date Table'[Date]) )
This measure will calculate the [Total Revenue] for the exact same date range, but one year prior. For example, if you're looking at data for July 2024, this measure returns the revenue from July 2023.
Step 3: Combine Measures to Calculate Percentage Change
Now that you have both the current and previous period values, you can combine them into your final percentage change measure. Instead of using the standard division operator (/), it's best practice in DAX to use the DIVIDE function. This is because DIVIDE has built-in error handling for "divide by zero" situations, which can happen if a previous period had no sales.
Create a new measure for your percentage change:
Month-over-Month % Change Formula
MoM Revenue % Change = DIVIDE( [Total Revenue] - [Previous Month Revenue], [Previous Month Revenue] )
Year-over-Year % Change Formula
YoY Revenue % Change = DIVIDE( [Total Revenue] - [Last Year Revenue], [Last Year Revenue] )
After creating this measure, be sure to select it and go to the Measure tools tab in the ribbon. In the formatting section, change the format from "General" to "Percentage". This ensures your results are displayed correctly in visuals.
Visualizing Your Percentage Change
With your DAX measures ready, you can now add them to your visuals to bring the insights to life. Here are a few common ways to do it:
Use a Table or Matrix
The simplest way to check your work is to build a Matrix visual. Set the rows to Date Table[Year] and Date Table[Month Name]. Then, add [Total Revenue], [Previous Month Revenue], and [MoM Revenue % Change] to the values. This lets you see all the calculations side-by-side and validate the results.
Use a KPI Card
A KPI visual is perfect for highlighting a single, important metric. Here’s how to set it up:
- Indicator: Place your
[Total Revenue]measure here. - Trend axis: Use your
Date Table[Date]field. - Target goal: Use your
[Previous Month Revenue]or[Last Year Revenue]measure. The visual will automatically calculate and display the percentage change for you.
Use a Combo Chart
A Line and Clustered Column Chart is a great choice for showing trends over time.
- Put your
Date Table[Month Name]on the shared axis. - Use
[Total Revenue]for the Column values. - Use
[MoM Revenue % Change]for the Line values.
This gives your audience a view of both the absolute revenue each month (the columns) and the growth rate between months (the line).
Final Thoughts
Mastering percentage change calculations unlocks a deeper level of analysis in Power BI, turning your raw data into actionable insights about business momentum. By starting with a proper Date Table and using DAX time intelligence functions like PREVIOUSMONTH and SAMEPERIODLASTYEAR, you can build robust and reusable reports that track key performance indicators over time.
Creating these analyses from scratch can be time-consuming, especially when you’re pulling data from multiple places like Shopify, Google Ads, and Salesforce. That's why we built Graphed . It connects to all your data sources and allows you to create these kinds of dashboards and reports just by asking a question in plain English. Instead of writing DAX, you can simply ask, "Show me a chart of our Shopify revenue growth month-over-month this year," and get a real-time visualization in seconds, freeing you up to focus on strategy instead of report-building.
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?