How to Create a Measure vs a Calculated Column in Power BI

By Vivek Dhumal • 2026-10-26 • 12 min read
How to Create a Measure vs a Calculated Column in Power BI

Key Takeaways

  • A calculated column adds a new field to an existing Power BI table and produces one value for every row, normally during data refresh.
  • A measure calculates an aggregated result on demand and changes according to the filters, slicers, rows, and columns in a report visual.
  • Use a calculated column when you need a row-level attribute for filtering, grouping, sorting, or slicing.
  • Use a measure for business results such as revenue, margin, counts, averages, ratios, and percentages.
  • Calculated columns are stored in the model, so they can increase model size and refresh time; measures are evaluated when a visual needs them.
  • The simplest decision rule is: filter or group with a column; calculate a value with a measure.

Introduction

Power BI gives you several ways to add calculations to a semantic model, but two of the most commonly confused options are the calculated column and the measure. Both are written in DAX, both can appear in the Fields pane, and both can be used in report visuals. Despite those similarities, they solve different problems.

A calculated column creates a new column inside a table. Power BI evaluates its formula once for each row and stores the result with the table. If you create a calculated column called Line Revenue on a sales table, every sales row receives its own revenue value. That value becomes part of the model, just like a column imported from a database.

A measure is different. It does not add a column of stored values to a table. Instead, it defines a calculation that Power BI evaluates when a visual asks for it. If you create a measure called Total Revenue, its result depends on what the user has selected. A card visual with no filters might show total company revenue, while a matrix visual filtered to one product shows revenue for that product only.

That distinction matters because it affects what you can build, how your report behaves, and how your model performs. A calculated column is useful when you need a new field for slicing, filtering, grouping, or sorting. A measure is useful when you need a result that responds to the report context.

This guide explains how to create both, when to use each one, how they behave in real reports, and where beginners most often go wrong. It also includes worked examples using a small sales dataset so you can see exactly what each calculation produces.

Power BI report showing measures and calculated columns in a sales semantic model
Figure 1: Measure vs Calculated Column evaluation in Power BI Desktop semantic models

Sample model

The examples use a simple Sales table containing six order lines. The table has no relationships to other tables, which keeps the focus on the difference between row-level calculations and aggregate calculations.

OrderID Date Product Quantity UnitPrice Cost
1001 2026-01-05 Laptop 2 1,200 900
1002 2026-01-18 Laptop 1 1,200 900
1003 2026-02-03 Monitor 3 320 240
1004 2026-02-21 Monitor 2 320 240
1005 2026-03-08 Keyboard 5 45 30
1006 2026-03-27 Keyboard 4 45 30

From this data, the total revenue across all six rows is 5,605. Total cost is 4,170, and total margin is 1,435. That produces a margin percentage of 25.6%.

The product-level revenue is:

Product Total Revenue
Laptop 3,600
Monitor 1,600
Keyboard 405
Total 5,605

These numbers will be used throughout the post to show how a measure changes depending on the filters applied in a visual.

What is a calculated column?

A calculated column is a new column added to a table in the Power BI semantic model. You define it with a DAX formula, and Power BI evaluates that formula for every row in the table.

For example, if you want to calculate revenue for each sales line, you can create a calculated column that multiplies quantity by unit price. Each row receives its own result. The first row might produce 2,400, the second 1,200, the third 960, and so on.

The important point is that the result belongs to the row. Order 1001 has a revenue value. Order 1002 has a different revenue value. The column stores those individual values in the model.

Calculated columns are most useful when the value is an attribute of the row rather than an aggregate across many rows. Examples include:

  • Revenue for each transaction line
  • Profit for each transaction line
  • Customer age group
  • Product price band
  • Weekday or weekend label
  • Month name
  • Sort order for month names
  • A flag identifying late shipments
  • A category derived from another column

Microsoft describes calculated columns as DAX formulas that add new data to a table already in the model, with values evaluated row by row. [web:35] In Power BI’s calculation options, calculated columns are computed at data refresh and stored in the model. [web:32]

Row context in calculated columns

A calculated column operates in row context. That means DAX knows which row it is evaluating and can refer to values from that row.

In this formula:

dax
Line Revenue =
Sales[Quantity] * Sales[UnitPrice]

DAX reads Quantity and UnitPrice from the current row. It does not add them across the table. It simply performs the multiplication separately for every row.

For order 1001, the calculation is:

text
2 * 1,200 = 2,400

For order 1003, the calculation is:

text
3 * 320 = 960

For order 1005, the calculation is:

text
5 * 45 = 225

This row-by-row behavior is why calculated columns are ideal for creating descriptive fields, labels, categories, and row-level numeric values.

How to create a calculated column

Creating a calculated column in Power BI Desktop takes only a few steps. The important part is understanding that you are adding a field to the model, not creating a dynamic report calculation.

Step 1: Open Table view

Open your Power BI Desktop file and select Table view from the left-hand navigation bar. Table view shows the actual rows and columns in your semantic model.

Select the table where you want to add the new column. In this example, select the Sales table.

You can also create a calculated column from Model view or by right-clicking a table in the Data pane. Table view is usually the easiest place to start because you can immediately see the new column appear beside the existing data.

Step 2: Select New column

With the Sales table selected, go to the Table tools ribbon and choose New column.

Power BI places the cursor in the formula bar and adds a default formula:

dax
Column = 

You can now replace Column with a meaningful name.

Naming matters. A name such as Column tells report users nothing. A name such as Line Revenue, Customer Age Band, or High Value Order immediately communicates what the field contains.

Step 3: Write the DAX formula

Enter this formula:

dax
Line Revenue =
Sales[Quantity] * Sales[UnitPrice]

Press Enter or click the check mark beside the formula bar.

Power BI evaluates the expression for every row in the Sales table and creates a new column called Line Revenue.

The result is:

OrderID Quantity UnitPrice Line Revenue
1001 2 1,200 2,400
1002 1 1,200 1,200
1003 3 320 960
1004 2 320 640
1005 5 45 225
1006 4 45 180

The calculated column now behaves like any other column in the model. You can drag it into a table visual, use it in a slicer, sort by it, or apply a filter to it.

Step 4: Format the column

Select the new Line Revenue column in the Data pane. In the Column tools ribbon, choose a suitable format.

For currency values, select Currency or Fixed decimal. Set the number of decimal places based on your reporting needs. For most sales and finance reports, two decimal places is a sensible default.

Formatting does not change the underlying value. It only changes how Power BI displays the number in visuals.

Step 5: Create a classification column

Calculated columns are especially useful for creating categories. Suppose you want to identify high-value orders.

Enter this formula:

dax
High Value Order =
IF(
    Sales[Quantity] * Sales[UnitPrice] > 1000,
    "High Value",
    "Standard"
)

This formula checks the revenue of each row. If revenue is greater than 1,000, it returns High Value. Otherwise, it returns Standard.

The result is:

OrderID Line Revenue High Value Order
1001 2,400 High Value
1002 1,200 High Value
1003 960 Standard
1004 640 Standard
1005 225 Standard
1006 180 Standard

You can now place High Value Order in a slicer. When a report user selects High Value, Power BI filters the report to orders 1001 and 1002.

This is a good use of a calculated column because the label is a property of the individual order. It does not need to change when the user filters the report.

What is a measure?

A measure is a named DAX calculation that Power BI evaluates in the context of a visual. Unlike a calculated column, a measure does not store a value for every row.

Instead, Power BI calculates the measure whenever a visual needs it. If a card visual displays Total Revenue, Power BI evaluates the measure once for that card. If a matrix visual shows revenue by product, Power BI evaluates the measure separately for each product row.

This is why measures are dynamic. The same measure can return different results in different parts of a report.

Microsoft defines measures as dynamic calculation formulas whose results change depending on context, and notes that they are used in reporting scenarios involving filtering and combining data. [web:31] In Power BI Desktop, measures are calculated on demand rather than during data refresh. [web:32]

Filter context in measures

Measures operate in filter context. Filter context is the set of filters applied to a calculation by the report page, slicers, visual filters, and the structure of the visual itself.

For example, imagine a matrix with Product on the rows and Total Revenue in the values area.

For the Laptop row, the filter context is:

text
Product = Laptop

Power BI evaluates Total Revenue using only laptop rows. The result is 3,600.

For the Monitor row, the filter context is:

text
Product = Monitor

Power BI evaluates the same measure using only monitor rows. The result is 1,600.

For the Keyboard row, the result is 405.

For the total row, there is no product filter, so Power BI evaluates the measure across all six rows. The result is 5,605.

The measure did not change. The filter context changed.

How to create a measure

Creating a measure is similar to creating a calculated column, but the result behaves very differently in a report.

Step 1: Select New measure

In Power BI Desktop, go to Table view, Report view, or Model view. Right-click the Sales table in the Data pane and choose New measure.

You can also select New measure from the Home ribbon.

Power BI adds a placeholder formula:

dax
Measure = 

Replace Measure with a descriptive name.

Measures created manually appear in the Data pane with a calculator icon. [web:39] That icon is a useful visual reminder that the field is an aggregation, not a stored column.

Step 2: Create a revenue measure

Enter this formula:

dax
Total Revenue =
SUMX(
    Sales,
    Sales[Quantity] * Sales[UnitPrice]
)

SUMX iterates through the rows visible in the current filter context. For each row, it calculates quantity multiplied by unit price. It then adds those row-level results together.

With no filters applied, the measure returns 5,605.

If you place the measure in a matrix with Product on rows, you get:

Product Total Revenue
Laptop 3,600
Monitor 1,600
Keyboard 405
Total 5,605

This is the core value of a measure. One formula produces the correct result at every level of the visual.

Step 3: Create a margin measure

You can create a margin measure using the same pattern:

dax
Total Margin =
SUMX(
    Sales,
    Sales[Quantity] * (Sales[UnitPrice] - Sales[Cost])
)

For each row, this formula calculates revenue minus cost, then multiplies the result by quantity. SUMX adds the margin from every visible row.

With no filters, the measure returns 1,435.

By product, the result is:

Product Total Margin
Laptop 900
Monitor 400
Keyboard 135
Total 1,435

Again, the measure adapts to the visual. It does not require a separate formula for each product.

Step 4: Create a margin percentage measure

A margin percentage is a ratio, so it should almost always be a measure.

dax
Margin % =
DIVIDE(
    [Total Margin],
    [Total Revenue]
)

DIVIDE performs division safely. If the denominator is zero or blank, it returns BLANK() rather than producing a divide-by-zero error.

For the full sample dataset, margin percentage is:

text
1,435 / 5,605 = 25.6%

Format the measure as a percentage in the Measure tools ribbon. The result should display as 25.6%.

Calculated column vs measure

The fastest way to understand the difference is to compare how each calculation behaves in a report.

Aspect Calculated column Measure
Main purpose Adds a row-level field to a table Calculates an aggregated result
DAX evaluation Once per row Once per visual cell or calculation
Evaluation context Row context Filter context
When calculated During model processing or refresh On demand, when a visual needs it
Stored values Yes, for Import-mode tables No; results are not stored as rows
Changes with slicers No Yes
Typical use Categories, flags, labels, sort keys, row-level values Revenue, cost, margin, ratios, counts, averages
Model impact Can increase model size and refresh duration Generally lighter for stored-model size
Visual placement Rows, columns, legends, slicers, filters Values and visual-level filters
Best default choice When you need a new field When you need a KPI or aggregate

Microsoft’s own calculation comparison makes the same distinction: calculated columns are computed at refresh and saved, while measures are calculated as needed and respond to report interaction. [web:32]

When to use a calculated column

Use a calculated column when the result is an attribute of a single row and you need to use that attribute as a field in the report.

A good test is to ask: “Does this value belong to this row, regardless of what the user filters?”

If the answer is yes, a calculated column is usually appropriate.

Customer age bands

Suppose you have a Customers table with a birth date column. You can create an age band column:

dax
Age Band =
SWITCH(
    TRUE(),
    DATEDIFF(Customers[BirthDate], TODAY(), YEAR) < 26, "18-25",
    DATEDIFF(Customers[BirthDate], TODAY(), YEAR) < 41, "26-40",
    DATEDIFF(Customers[BirthDate], TODAY(), YEAR) < 56, "41-55",
    "56+"
)

This creates a reusable field that can be placed in a slicer, used as a matrix row, or added as a legend.

You would not usually create this as a measure because an age band is not an aggregate. It is a descriptive attribute of each customer.

Product price bands

You can create a price band for products:

dax
Price Band =
SWITCH(
    TRUE(),
    Products[UnitPrice] >= 1000, "Premium",
    Products[UnitPrice] >= 300, "Mid-Range",
    "Budget"
)

This gives report users a simple way to filter products by pricing category.

Date labels

Date tables often benefit from calculated columns such as:

dax
Month Name = FORMAT(Dates[Date], "MMMM")
dax
Month Number = MONTH(Dates[Date])
dax
Year Month =
FORMAT(Dates[Date], "YYYY-MM")

A month number column is particularly useful for sorting month names correctly. Without it, Power BI may sort April, August, December alphabetically rather than chronologically.

Row-level flags

Flags are another strong use case:

dax
Is Weekend =
IF(
    WEEKDAY(Sales[Date], 2) >= 6,
    TRUE(),
    FALSE()
)

This creates a Boolean field that identifies weekend transactions. You can use it in a slicer or as a filter condition.

When to use a measure

Use a measure when the result should respond to filters or when you need an aggregate.

A good test is to ask: “Should this number change when the user selects a different year, region, product, or customer?”

If the answer is yes, use a measure.

Revenue

Revenue is the classic measure:

dax
Total Revenue =
SUMX(
    Sales,
    Sales[Quantity] * Sales[UnitPrice]
)

It should respond to product filters, date filters, region filters, customer filters, and any other slicer in the report.

Cost

dax
Total Cost =
SUMX(
    Sales,
    Sales[Quantity] * Sales[Cost]
)

For the sample dataset, this returns 4,170 with no filters.

Margin

dax
Total Margin =
[Total Revenue] - [Total Cost]

This measure returns 1,435 for the full dataset. It also returns the correct margin for any filtered subset.

Order count

dax
Order Count =
DISTINCTCOUNT(Sales[OrderID])

This counts unique orders rather than individual sales lines. If one order contains several product lines, DISTINCTCOUNT prevents double counting.

Average revenue per order

dax
Average Revenue per Order =
DIVIDE(
    [Total Revenue],
    [Order Count]
)

This is a measure because both the numerator and denominator should change with report filters.

Implicit measures vs explicit measures

Power BI can create an implicit measure automatically when you drag a numeric column into a visual. For example, if you drag Quantity into a card visual, Power BI may sum it by default.

An implicit measure is quick, but it has limitations. You cannot easily control its formatting, reuse it across visuals, or give it a meaningful business name.

An explicit measure is one you create deliberately with DAX. It has a clear name, defined logic, controlled formatting, and can be reused throughout the report.

For professional reports, prefer explicit measures. For example, instead of relying on Power BI to sum Quantity, create:

dax
Total Quantity =
SUM(Sales[Quantity])

This makes the report easier to maintain and gives every calculation a clear owner.

Calculated columns vs Power Query custom columns

A calculated column is not the only way to add a field to a table. Power Query also lets you create a custom column.

The difference is where the calculation happens.

Aspect Power Query custom column DAX calculated column
Language M DAX
Created in Power Query Editor Power BI semantic model
Evaluated During data refresh During model processing or refresh
Best for Data preparation and source-level transformations Model-level attributes and DAX-specific logic
Can use relationships No Yes
Can use model context No Yes

Use Power Query when the logic belongs in data preparation. Examples include cleaning text, splitting values, changing data types, parsing dates, or deriving a field directly from source columns.

Use a DAX calculated column when the logic depends on the model, such as values from related tables or DAX functions that are not available in M.

Microsoft distinguishes these clearly: custom columns use M, calculated columns use DAX, and both are computed at data refresh, while measures are calculated on demand. [web:32]

Calculated columns vs calculated tables

A calculated table is another DAX-based model object. Instead of adding one column to an existing table, it creates an entirely new table.

For example:

dax
Product Summary =
SUMMARIZE(
    Sales,
    Sales[Product],
    "Total Quantity", SUM(Sales[Quantity])
)

This creates a new table with one row per product and a total quantity value.

Use a calculated table when you need a new table for modeling purposes, such as a date table, a segmentation table, or a simplified summary table. Use a calculated column when you only need to add a field to a table that already exists.

Performance considerations

Performance is one of the most practical reasons to choose carefully between calculated columns and measures.

Calculated columns and model size

In an Import-mode model, calculated columns are evaluated and stored. Every row receives a value. If you add several calculated columns to a large fact table, you increase the amount of data Power BI must store and process.

That does not mean calculated columns are bad. They are sometimes necessary. But they should be intentional.

Avoid creating calculated columns for values that could be calculated as measures. For example, do not create a calculated column that stores total company revenue on every sales row. That produces the same repeated value across millions of rows and wastes model space.

Measures and query performance

Measures are evaluated when needed. A simple measure usually performs well, but a complex measure evaluated many times in a large visual can become expensive.

For example, a matrix with many rows, columns, and a complex time-intelligence measure may force Power BI to evaluate the measure repeatedly. If performance becomes a problem, simplify the calculation, reduce visual complexity, or use a more efficient DAX pattern.

DirectQuery considerations

In DirectQuery mode, calculated columns can be more expensive because the DAX expression may need to be translated into a query against the source database. Avoid unnecessary calculated columns in DirectQuery models, especially on large fact tables.

Measures are often preferable in DirectQuery because they can be pushed down to the source as part of the query, depending on the DAX pattern and the data source.

Common mistakes

Using a calculated column for a total

A frequent beginner mistake is writing this as a calculated column:

dax
Total Revenue =
SUM(Sales[Quantity] * Sales[UnitPrice])

This does not create a useful row-level value. It attempts to calculate an aggregate, but the result is repeated on every row of the table.

Use a measure instead:

dax
Total Revenue =
SUMX(
    Sales,
    Sales[Quantity] * Sales[UnitPrice]
)

Using a measure as a slicer

Measures are not designed to be used as slicers, matrix rows, or legends. They are values that respond to filters.

If you need a slicer, create a column. If you need a dynamic KPI, create a measure.

Assuming calculated columns respond to slicers

A calculated column is evaluated and stored at the row level. It does not recalculate when a user selects a different year, product, or region.

For example, this calculated column:

dax
High Value Order =
IF(
    Sales[Quantity] * Sales[UnitPrice] > 1000,
    "High Value",
    "Standard"
)

Will always label order 1001 as High Value. A slicer can filter that row in or out of a visual, but it cannot change the stored label.

Creating too many calculated columns

Each calculated column adds a stored value for every row in an Import-mode table. That can increase model size and refresh time.

Microsoft specifically cautions against excessive calculated columns and recommends considering a measure instead when appropriate. [web:37]

Confusing Power Query custom columns with DAX calculated columns

A Power Query custom column is part of data preparation. A DAX calculated column is part of the semantic model.

If you are cleaning or reshaping source data, use Power Query. If you need a modeling attribute that uses DAX or relationships, use a calculated column.

In Practice

Imagine you are building a sales report for a retail team. The team needs to analyze revenue, margin, and order value by product and month.

Start by creating two calculated columns.

First, create a revenue column:

dax
Line Revenue =
Sales[Quantity] * Sales[UnitPrice]

Second, create an order-size classification:

dax
Order Size =
IF(
    Sales[Quantity] * Sales[UnitPrice] > 1000,
    "High Value",
    "Standard"
)

Then create three measures:

dax
Total Revenue =
SUMX(
    Sales,
    Sales[Quantity] * Sales[UnitPrice]
)
dax
Total Margin =
SUMX(
    Sales,
    Sales[Quantity] * (Sales[UnitPrice] - Sales[Cost])
)
dax
Margin % =
DIVIDE(
    [Total Margin],
    [Total Revenue]
)

Build a matrix visual with Product on rows. Add Total Revenue and Margin % to values. Add Order Size as a slicer.

Without any slicer selection, the report shows:

Product Total Revenue Margin %
Laptop 3,600 25.0%
Monitor 1,600 25.0%
Keyboard 405 33.3%
Total 5,605 25.6%

When the user selects High Value in the slicer, only laptop orders remain visible. Total revenue becomes 3,600, and the margin calculation updates for that filtered subset.

The calculated column determines which rows qualify as High Value. The measures calculate the results for whichever rows remain visible.

That is the practical division of labor: the calculated column defines a row-level attribute, while the measures calculate dynamic business results.

Decision framework

Use this simple framework when deciding which calculation to create.

Question Best choice
Do I need a slicer, filter, row, column, or legend? Calculated column
Does the value belong to one row? Calculated column
Am I creating a category, label, flag, or sort key? Calculated column
Should the result change with slicers? Measure
Am I calculating a total, average, count, or percentage? Measure
Am I building a KPI? Measure
Am I cleaning or reshaping source data? Power Query custom column
Am I creating a new table for modeling? Calculated table

When in doubt, start with a measure. Most reporting calculations should be measures. Add a calculated column only when you genuinely need a new field in the model.

Frequently Asked Questions

How do I create a measure in Power BI?

Right-click a table in the Data pane, choose New measure, and enter a DAX formula in the formula bar. For example: Total Revenue = SUMX(Sales, Sales[Quantity] * Sales[UnitPrice]).

How do I create a calculated column in Power BI?

Select your table in Table view, choose New column, and write a DAX formula that returns one value per row. For example: Line Revenue = Sales[Quantity] * Sales[UnitPrice].

Should I use a measure or calculated column for profit?

Use a measure. Profit depends on aggregation and report filters. A measure such as SUMX(Sales, Sales[Quantity] * (Sales[UnitPrice] - Sales[Cost])) responds correctly to slicers and visuals.

Should I use a measure or calculated column for customer age groups?

Use a calculated column if you need a reusable slicer or grouping field. It assigns an age band to each customer row, such as 18–25 or 26–40.

Do calculated columns slow down Power BI?

They can. In Import-mode models, calculated columns are evaluated and stored, so they can increase model size and refresh time, especially when there are many columns or complex formulas.

Do measures store data in the Power BI model?

No. Measures are evaluated when a report visual requests them; their results are not stored as rows in the model.

Can a calculated column use data from another table?

Yes. A calculated column can refer to related tables through model relationships, often using DAX functions such as RELATED.

Can a measure be used in a slicer?

No. Measures are designed for values and visual-level filters, not slicers, matrix rows, or legends. Use a calculated column when you need a slicer field.

Which should beginners learn first?

Learn measures first. Most reporting calculations—totals, averages, counts, percentages, and KPIs—should be measures. Learn calculated columns when you need a new field for filtering, grouping, or sorting.

Vivek Dhumal

Vivek Dhumal

Senior Power BI & Fabric Architect

Senior Power BI & Fabric Architect

Enterprise Power BI Architect with 10+ years of experience designing scalable semantic models, DAX calculations, and executive analytics solutions.