How to Calculate NPS in Power BI

Cody Schneider••7 min read

Calculating your Net Promoter Score (NPS) is a fantastic way to measure customer loyalty, but manually updating it in a spreadsheet is a chore. If you're using Power BI, you can automate this entire process by transforming your raw survey data into a dynamic, insightful dashboard. This guide will walk you through calculating and visualizing your NPS score in Power BI from scratch.

GraphedGraphed

Build AI Agents for Marketing

Build virtual employees that run your go to market. Connect your data sources, deploy autonomous agents, and grow your company.

Watch Graphed demo video

What is Net Promoter Score (NPS)?

Before jumping into Power BI, let's quickly recap what NPS is. It's a metric that measures customer loyalty based on a single, powerful question: "On a scale of 0 to 10, how likely are you to recommend our product/service to a friend or colleague?"

Based on their responses, customers are grouped into three categories:

  • Promoters: Those who respond with a 9 or 10. These are your most enthusiastic and loyal customers who will likely act as brand ambassadors.
  • Passives: Those who respond with a 7 or 8. They are satisfied but not enthusiastic enough to actively promote your brand. They are also vulnerable to competitive offers.
  • Detractors: Those who respond with a score between 0 and 6. These are unhappy customers who can damage your brand through negative word-of-mouth.

The final NPS score is calculated with a simple formula, which gives you a score ranging from -100 to +100:

NPS = Percentage of Promoters - Percentage of Detractors

A positive score is generally considered good, a score above 50 is excellent, and a score over 70 is world-class.

Step 1: Preparing and Loading Your Data

First things first, you need your survey response data. Usually, this comes from a survey tool and can be exported as an Excel file or CSV. A typical dataset is simple, containing a unique ID for each response, the date of the response, and the score given by the customer. It might look something like this:

Example Survey Data Table (we'll call it 'SurveyResponses')

To get this into Power BI:

  1. Open Power BI Desktop.
  2. On the Home ribbon, click Get Data.
  3. Choose the appropriate source (e.g., Excel workbook or Text/CSV).
  4. Navigate to your file, select it, and click Open.
  5. In the Navigator window, select the table containing your data and click Load. If your data needs cleaning (like removing blank rows or changing data types), click Transform Data to open the Power Query Editor first.

Once loaded, you’ll see your table in the 'Fields' pane on the right side of the screen.

Free PDF · the crash course

AI Agents for Marketing Crash Course

Learn how to deploy AI marketing agents across your go-to-market — the best tools, prompts, and workflows to turn your data into autonomous execution without writing code.

Step 2: Creating Base Measures with DAX

Now for the fun part. We'll use DAX (Data Analysis Expressions) to create "measures," which are dynamic calculations that update as you interact with your report. This is where Power BI's real power comes to life. Measures are generally more efficient than calculated columns because they are calculated on the fly, depending on the context of your visualization.

To create a new measure, right-click on your table in the 'Fields' pane and select New measure.

1. Count Total Respondents

First, we need a simple measure to count the total number of survey responses we've received. This will be the base for our percentage calculations.

Total Respondents = 
COUNT('SurveyResponses'[Score])

2. Count Promoters, Passives, and Detractors

Next, we need to count the number of responses that fall into each category (Promoters, Passives, Detractors).

For Promoters (score 9-10), we'll use the CALCULATE function which changes the context in which data is evaluated. Here, we're asking it to count the total respondents, but only for rows where the score is 9 or 10.

Total Promoters = 
CALCULATE(
    [Total Respondents],
    'SurveyResponses'[Score] >= 9
)

For Passives (score 7-8), the logic is similar. We filter for scores that are greater than 6 and less than 9.

Total Passives = 
CALCULATE(
    [Total Respondents],
    'SurveyResponses'[Score] > 6 && 'SurveyResponses'[Score] < 9
)

Finally, for Detractors (score 0-6), we filter for scores less than or equal to 6.

Total Detractors = 
CALCULATE(
    [Total Respondents],
    'SurveyResponses'[Score] <= 6
)
GraphedGraphed

Build AI Agents for Marketing

Build virtual employees that run your go to market. Connect your data sources, deploy autonomous agents, and grow your company.

Watch Graphed demo video

3. Calculate the Percentage of Promoters and Detractors

The NPS formula relies on the percentage of promoters and detractors. To calculate these, we'll divide the count for each category by the total number of respondents. We’ll use the DIVIDE function, which is safer than using a simple slash (/) because it gracefully handles any "division by zero" errors if there are no responses.

Percentage of Promoters:

% Promoters = 
DIVIDE([Total Promoters], [Total Respondents])

Percentage of Detractors:

% Detractors = 
DIVIDE([Total Detractors], [Total Respondents])

Pro Tip: Once you create these measures, select them one by one in the 'Fields' pane, go to the Measure tools ribbon at the top, and change the format to Percentage.

4. Calculate the Final NPS Score

With our percentages ready, we can now create the final NPS measure. Remember, the formula is % Promoters - % Detractors. The result is a number score (from -100 to 100), not a percentage.

NPS Score = 
([% Promoters] - [% Detractors]) * 100

Note: We multiply by 100 to convert the decimal result into the standard -100 to 100 format. After creating this measure, make sure to format it as a Whole Number in the Measure tools ribbon.

Step 3: Visualizing Your NPS Results

Now that your calculations are done, you can build a clean and interactive dashboard. Here are a few essential visuals for any NPS report:

1. Gauge Chart for the NPS Score: Gauges are perfect for showing a single, key metric against a target.

  • Add a Gauge visual to your canvas.
  • Drag the NPS Score measure into the 'Value' field.
  • In the 'Format visual' options for the gauge axis, set Min to -100 and Max to 100. You can also set a Target value, such as 50.

2. Card Visuals for Key Counts: Use crisp card visuals to display important numbers at a glance.

  • Add a Card visual.
  • Drag NPS Score into the 'Fields' well.
  • Create separate cards for Total Respondents, Total Promoters, Total Passives, and Total Detractors.

3. Stacked Column Chart for the Breakdown: This shows the composition of your respondents over time or across different segments (like products or regions).

  • Add a Stacked Column Chart.
  • Drag your date field (e.g., ResponseDate) to the X-axis. You can drill down by Year, Quarter, or Month.
  • Drag [Total Promoters], [Total Passives], and [Total Detractors] into the Y-axis.
  • This visual will clearly show how the distribution of customer sentiment is changing over time.

4. Line Chart to Track NPS Over Time: A simple line chart is a great way to see if your customer loyalty is improving.

  • Add a Line Chart.
  • Drag your date field (e.g., ResponseDate) to the X-axis.
  • Drag the NPS Score measure to the Y-axis.

Free PDF · the crash course

AI Agents for Marketing Crash Course

Learn how to deploy AI marketing agents across your go-to-market — the best tools, prompts, and workflows to turn your data into autonomous execution without writing code.

Alternative: Using a Calculated Column

While measures are often preferred for performance, a calculated column can also work well, especially for smaller datasets or if you want to use the Promoter/Passive/Detractor categories directly as a filter or slicer.

To create a calculated column, select your table, go to the Table tools ribbon, and click New column.

You can create a column called Respondent Category using the SWITCH function:

Respondent Category = 
SWITCH(
    TRUE(),
    'SurveyResponses'[Score] >= 9, "Promoter",
    'SurveyResponses'[Score] >= 7, "Passive",
    "Detractor"
)

With this column in place, you could then create your count measures more simply:

Total Promoters (Column) = 
CALCULATE(
    COUNTROWS('SurveyResponses'),
    'SurveyResponses'[Respondent Category] = "Promoter"
)

The main trade-off is that a calculated column is computed during data refresh and stored in your model, taking up memory. Measures are calculated at query time and don't consume memory in the same way. For NPS, both methods are viable, but starting with measures is a great habit to build.

Final Thoughts

By using a few DAX measures in Power BI, you can transform a static spreadsheet of survey scores into a dynamic, automated NPS dashboard. This allows you to track customer loyalty over time, slice your data by different segments, and uncover insights without the repetitive work of manual calculations.

We know that for many marketing, sales, and business leaders, the goal is to get straight to these kinds of insights without getting bogged down in DAX formulas or complicated BI tools. At Graphed , we handle all the heavy lifting for you by connecting directly to your data sources - from survey tools to CRMs and ad platforms. Instead of writing formulas, you can simply use natural language to ask questions, create real-time dashboards, and get the answers you need in seconds, making data-driven decisions faster than ever.

Related Articles