DAX Functions
Written By: Sajagan Thirugnanam and Austin Levine
Last Updated on February 17, 2026
Introduction
If you’ve ever written a DAX formula in Power BI and thought: “Why is this measure not working the way I expect?” then you’ve already experienced the most confusing part of Power BI: context.
To truly master DAX, you must understand one concept deeply:
Row Context vs Filter Context in Power BI
Most Power BI beginners struggle here because the terms sound abstract. But once you understand them, DAX becomes predictable, logical, and much easier to debug.
In this guide, we will break down row context and filter context using simple explanations and real examples, including why CALCULATE() behaves like magic.
What Is Context in Power BI?
In Power BI, context means the set of rules that determines which rows of data are being used when a DAX formula is evaluated.
Power BI evaluates DAX differently depending on where your formula is used:
inside a calculated column
inside a measure
inside a visual (table, matrix, chart)
The two most important types of context are:
Row Context
Filter Context
Let’s break them down.
What Is Row Context in Power BI?
Row context means Power BI evaluates an expression row by row.
In row context, Power BI knows the “current row” and can access column values directly.
Row context is most common in:
Calculated columns
Iterator functions like SUMX, AVERAGEX, FILTER, etc.
Example of Row Context
Imagine a table called Sales:
Product | Quantity | Unit Price |
A | 2 | 50 |
B | 3 | 30 |
Now you create a calculated column:
What happens?
Power BI calculates the result for each row individually:
Row 1 → 2 * 50 = 100
Row 2 → 3 * 30 = 90
That is row context.
Row Context in Iterator Functions (SUMX Example)
Row context also exists when using iterators like SUMX():
Here, SUMX() loops through each row of the Sales table and calculates the expression row by row.
What Is Filter Context in Power BI?
Filter context means Power BI evaluates a formula based on filters applied to the data.
These filters can come from:
slicers
page filters
report filters
visual filters
relationships between tables
row/column selections in a matrix
Filter context is mainly used in:
Measures
Visual-level calculations
Example of Filter Context
Let’s say you create this measure:
Now you put it in a visual by Product.
Power BI automatically applies a filter context:
Product = A
Product = B
So the same measure returns different results depending on the filter context.
This is why measures are dynamic.
Row Context vs Filter Context: The Core Difference
Here’s the simplest way to understand it:
Feature | Row Context | Filter Context |
Works on | Current row | Subset of data based on filters |
Used in | Calculated Columns, Iterators | Measures, Visuals |
Behavior | Evaluates row-by-row | Evaluates filtered data |
Example | Sales[Qty] * Sales[Price] | SUM(Sales[Revenue]) |
Why Row Context vs Filter Context Confuses People
The confusion happens because row context does not automatically filter the entire table.
In other words:
Row context knows the row
But it doesn’t automatically create a filter on the model
This becomes a huge issue when you try to use aggregation functions inside calculated columns.
Example: SUM Doesn’t Work the Way You Expect (Row Context Problem)
Suppose you create a calculated column:
What would you expect? Maybe you expect Power BI to sum revenue for each product.
But what happens? Power BI returns the same grand total for every row.
Why?
SUM() does not automatically respect row context. Without filter context, it returns the same grand total for every row.
Row context alone doesn’t tell Power BI which rows to include in the sum.
What Is Context Transition in Power BI?
This brings us to the most important concept.
Context transition
Context transition effectively converts row context into filter context. This happens mainly using:
CALCULATE() function.
CALCULATE() Explained
CALCULATE() is the most important function in DAX.
It modifies filter context, but it also does something powerful: It turns row context into filter context automatically.
This is why many DAX problems get solved by adding CALCULATE.
Example: Fixing the SUM Issue With CALCULATE
Instead of writing:
You write:
Now Power BI transitions row context into filter context.
Meaning:
For each row, CALCULATE converts the current row context into filter context on the current table.
Then calculates SUM properly
That is context transition.
Row Context vs Filter Context in Power BI With a Real Scenario
Let’s take a common business example:
You have a table Customers and a table Sales.
Goal:
You want a calculated column in the Customers table that shows total sales per customer.
You try:
Customer Total Sales = SUM(Sales[Revenue])
This will not work correctly because the Customers table has row context, but SUM() needs filter context.
Correct approach:
Now Power BI uses context transition and calculates sales per customer.
Quick Rule to Remember
Here’s a simple cheat code:
Calculated Column → Row Context
Measure → Filter Context
But note:
Iterators like SUMX() create row context even inside measures.
Iterator Functions: When Row Context Appears in Measures
Even inside measures, row context can be created using iterator functions.
Example:
Inside this measure:
SUMX() creates row context
Then it sums the results
So measures can have both row context and filter context.
Determining and Managing Context in Formulas
In real Power BI reports, context does not come from just one place. Your DAX result depends on the combination of:
the visual (table, matrix, chart)
slicers and filters
relationships between tables
DAX functions like CALCULATE, FILTER, and SUMX
A simple way to debug any DAX formula is to ask:
1) What is the visual filtering?
2) What relationships are applying hidden filters?
3) Does the formula create row context using iterators like SUMX?
Relationships and Referential Integrity Issues
Filter context heavily depends on your model relationships. If relationships are missing or incorrect, your measures may return unexpected totals.
Also, if your fact table contains IDs that do not exist in the dimension table (broken referential integrity), some rows may not filter properly, causing missing or incorrect results.
Handling Blank Values in Context
Filter context can reduce your dataset so much that measures return blanks. Using DIVIDE() and blank-handling logic is important:
This prevents errors and keeps visuals consistent.
Multiple and Query Contexts in Power BI
As you move into advanced DAX, you’ll encounter two additional context concepts:
Multiple Row Context
Multiple row context happens when you use nested iterators (like SUMX inside another SUMX). This creates multiple “current rows” at once, which can confuse calculations.
Modern DAX usually solves this using VAR instead of older functions like EARLIER().
Query Context
Query context is the “question” Power BI asks when rendering a visual.
For example, in a matrix by Product and Year, Power BI evaluates your measure separately for each cell. This is why the same measure returns different results depending on the visual.
In short:
Query context generates filter context, which then determines the final output.
Common Mistakes When Learning Row Context vs Filter Context
Mistake 1: Using Measures Like Calculated Columns
People try to use measures expecting row-level results.
Measures don’t store values row-by-row. They are calculated dynamically.
Mistake 2: Expecting SUM() to Respect Row Context
Row context doesn’t filter tables automatically.
Mistake 3: Overusing CALCULATE Without Understanding It
CALCULATE is powerful, but misusing it can lead to incorrect results.
Always ask: What filter context am I creating or changing?
Best Way to Master Row Context vs Filter Context
If you want to become strong in DAX, follow this process:
Step 1: Identify where your formula is being written
Measure?
Calculated Column?
Step 2: Ask what context exists by default
Row context exists in calculated columns
Filter context exists in visuals and measures
Step 3: Ask if your function needs filter context
Aggregation functions like:
SUM
COUNT
AVERAGE
depend heavily on filter context.
Step 4: Use CALCULATE to create context transition if needed
Final Thoughts
Understanding row context vs filter context in Power BI is the turning point where DAX stops feeling random and starts feeling logical. If you remember only one thing from this article, let it be this:Row context works row-by-row. Filter context works based on filters and CALCULATE is the bridge between them.
Once you master this concept, you can confidently write advanced measures like time intelligence, customer segmentation, and dynamic KPIs. Keep an eye out on our CaseWhen blog page for further advanced DAX related topics in the coming days to learn more about time intelligence, Dax Variables and many more.
FAQs
What is row context in Power BI?
Row context is when Power BI evaluates an expression for each row individually. It is common in calculated columns and iterator functions like SUMX.
What is filter context in Power BI?
Filter context is the set of filters applied to the data when a DAX calculation is evaluated. It comes from slicers, visuals, page filters, and relationships.
What is the main difference between row context and filter context?
Row context evaluates data row-by-row, while filter context evaluates data based on filters applied to a dataset.
Do measures use row context?
Measures mainly use filter context, but they can also create row context using iterator functions like SUMX, FILTER, and AVERAGEX.
Related to DAX Functions