How to Format Currency in Power BI

Cody Schneider7 min read

Displaying numbers as currency in Power BI seems simple enough, but getting it right can often be surprisingly tricky. This tutorial breaks down everything you need to know, from applying a basic currency format in a few clicks to building dynamic reports that handle multiple currencies like an expert.

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

Start with the Basics: The Formatting Pane

The quickest way to apply currency formatting is directly on the data column itself. This method is perfect when your entire dataset uses a single currency. By setting the format at the column level, Power BI will automatically apply it to any new visual you create with this data.

There are two primary places you can do this: Data view and Model view. The process is nearly identical in both.

Step-by-Step Instructions:

  1. Navigate to either the Data view or Model view by clicking the corresponding icon on the left-hand pane of Power BI Desktop.
  2. In the Data pane on the right, find and select the table and the specific numeric column you want to format (e.g., 'SalesAmount').
  3. With the column selected, a new contextual tab will appear in the top ribbon called Column tools. Click on it.

Within the ribbon, you’ll see a Formatting section. Here's what you can do:

  • Apply General Currency Format: Click the dollar sign ($) icon. This is the fastest way to apply your default system currency format.
  • Choose a Specific Currency: Click the dropdown arrow next to the dollar sign to search for and select other currency symbols like the Euro (€), British Pound (£), or hundreds of others.
  • Adjust Decimal Places: In the text box right above 'General,' you can manually set the number of decimal places you want to display. For currency, '2' is the common standard.

This method is great because it's a "set it and forget it" approach for single-currency reports. Your column is now correctly formatted throughout your entire report, including in tables, charts, and cards.

Example: You select your 'Revenue' column, click the dollar sign dropdown, search for 'EUR,' and type '2' in the decimal place box. Now, every visual using the 'Revenue' field will display numbers like €1,234.56.

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.

The Challenge: Dealing with Multiple Currencies

So what happens when your data isn't that simple? Many businesses operate globally, with sales recorded in different currencies - USD in the United States, EUR in France, and JPY in Japan. Trying to apply a single format from the ribbon to a column like this is incorrect and misleading. A 'Sales' value of 500 could mean $500, €500, or ¥500.

This is where you need a more dynamic solution using Data Analysis Expressions (DAX).

Dynamic Currency Formatting with DAX

DAX gives you row-by-row control over how your data is displayed. To use dynamic formatting, your dataset needs two key columns:

  1. Your numeric value column (e.g., 'Order Total').
  2. A column indicating the currency for that value (e.g., a 'Country' column or, ideally, an ISO 'CurrencyCode' column like "USD," "EUR," "GBP").

We'll create a new calculated column that combines the currency symbol and the formatted number using the powerful FORMAT() function.

Method 1: Using the SWITCH Function in a Calculated Column

This approach uses the SWITCH() function to check the currency associated with each row and apply the appropriate formatting string. It's like an advanced version of an IF statement.

Steps:

  1. Go to the Data view and select the table containing your sales data.
  2. From the Table tools ribbon, select New column.
  3. Enter the following DAX formula into the formula bar. Let's assume your columns are named 'Sales Amount' and 'Currency Code' within a table called 'Sales'.
Formatted Sales = 
SWITCH(
    TRUE(),
    'Sales'[Currency Code] = "USD", FORMAT('Sales'[Sales Amount], "$#,##0.00"),
    'Sales'[Currency Code] = "EUR", FORMAT('Sales'[Sales Amount], "€#,##0.00"),
    'Sales'[Currency Code] = "GBP", FORMAT('Sales'[Sales Amount], "£#,##0.00"),
    'Sales'[Currency Code] = "JPY", FORMAT('Sales'[Sales Amount], "¥#,##0"),
    // Add more currencies as needed
    FORMAT('Sales'[Sales Amount], "$#,##0.00") // A default format is always good practice
)
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

Breaking Down the Formula:

  • SWITCH(TRUE(), ...) evaluates each condition line by line until one is true.
  • 'Sales'[Currency Code] = "USD" is our first condition. If true, it executes the next part.
  • FORMAT('Sales'[Sales Amount], "$#,##0.00") takes the number and converts it into a text string using the specified format. The $ provides the dollar symbol, the , adds a thousands separator, and 0.00 ensures two decimal places are always visible, even if they are zeros. For Yen, which doesn't use cents, we use ¥#,##0 with no decimal part.

After creating this column, you can drag 'Formatted Sales' into your visuals instead of the original 'Sales Amount' to see the dynamically formatted currency.

A Major Drawback: Numbers Become Text

This calculated column approach has a significant issue you must understand: the FORMAT() function converts your number into a text string.

What does this mean? Power BI can't perform mathematical operations on text. If you use your new 'Formatted Sales' column in a visual, you won't be able to sum, average, or calculate totals on it. It’s strictly for display purposes. This brings us to the proper, most scalable solution: DAX measures.

Best Practice: Dynamic Currency Formatting with a DAX Measure

Using measures solves the "numbers as text" problem. Measures allow you to keep your base numbers as numeric values for calculations while applying formatting at the visual level right before a value is displayed. This gives you the best of both worlds.

The correct strategy is to have two things:

  1. A base measure that performs the aggregation (e.g., SUM). This measure returns a number.
  2. A formatting measure that takes the result of the base measure and applies the dynamic text formatting.

Steps to Create a Formatting Measure:

1. Create Your Base Measure

First, create a simple measure to calculate your total sales. This is crucial as it keeps the numeric logic separate.

Total Sales = SUM('Sales'[Sales Amount])

You can use this measure for any calculations or add it to charts where a purely numeric value is needed.

2. Create Your Formatting Measure

Now, let's create the measure that will handle the formatting. This measure will detect which currency is currently being displayed in the visual (the "filter context") and apply the correct symbol.

Formatted Total Sales = 
VAR CurrentCurrencyCode = 
    SELECTEDVALUE('Sales'[Currency Code], "USD") // Default to USD for totals
RETURN 
    SWITCH(
        TRUE(),
        CurrentCurrencyCode = "USD", FORMAT([Total Sales], "$#,##0.00"),
        CurrentCurrencyCode = "EUR", FORMAT([Total Sales], "€#,##0.00"),
        CurrentCurrencyCode = "GBP", FORMAT([Total Sales], "£#,##0.00"),
        CurrentCurrencyCode = "JPY", FORMAT([Total Sales], "¥#,##0")
    )

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.

How This Measure Works:

  • SELECTEDVALUE('Sales'[Currency Code], "USD"): This is the key part. When used in a table or matrix that has 'Currency Code' along its rows, SELECTEDVALUE() will return the currency code for that specific row. If it's in a context where multiple codes exist (like the "Grand Total" row), it will return the alternate value you provided - in this case, "USD". That's how we get a properly formatted total!
  • RETURN SWITCH(...): The measure then uses a SWITCH() block, just like our calculated column, but this time it operates on the stored variable CurrentCurrencyCode and formats the result of our base measure, [Total Sales].

Now, when you create a table and add 'Currency Code' and 'Formatted Total Sales' as columns, you'll see each row perfectly formatted, including a correctly formatted grand total. You've successfully created a robust, dynamic currency report.

Final Thoughts

Formatting currency correctly is fundamental to building clear, trustworthy reports. The basic formatting pane is excellent for quick, single-currency needs, but embracing DAX measures with functions like SELECTEDVALUE and FORMAT is what separates good reports from great ones when dealing with dynamic, real-world data.

While mastering DAX can be incredibly powerful, it undoubtedly has a learning curve. Sometimes you just need to connect your various data sources and get mission-critical answers quickly. We built Graphed to simplify this entire process. You can connect your marketing and sales data and ask for dashboards like "Show me a funnel comparing Facebook Ads spend vs Shopify revenue by country" in plain English, and Graphed builds the interactive report for you in seconds.

Related Articles