Power BI for Data Analytics & Business Intelligence
Back to The DAX Evaluation Engine & Business Logic

Evaluation Context in DAX: Filter Context vs Row Context

Visualizing how the DAX Formula Engine parses formulas: coordinate restriction, iterator cursors, and context independence.

16 minutesVideo LessonPDF notes
🎯 Free Guest Mode: You are learning for free. Sign in to save your completion progress and quiz answers.
Loading progress...

Key moments

  1. Evaluation Context Foundations — Establishes the distinction between row context iteration and filter context data filtering using the Contoso model.
  2. Visual Filters and Iterators — Demonstrates how SUMX iterates strictly over the rows visible within the active filter context of a matrix.
  3. Multi-Dimensional Filter Intersections — Shows how row and column visual headers intersect to form composite filter coordinates per cell.
  4. Matrix Rows vs Row Context — Clarifies that visual matrix rows generate filter contexts rather than DAX row contexts.
  5. Engine Query Inspection — Captures and analyzes the SUMMARIZECOLUMNS query generated by Power BI using DAX Studio.
  6. Filter Modification via CALCULATE — Modifies the active evaluation context by injecting new column predicates using the CALCULATE function.
  7. Filter Context Propagation — Traces how filter context travels across one-to-many relationship arrows from dimensions to facts.
PDF notes

Frequently asked questions

Does placing a field on a visual matrix row create a row context?

No, it creates a filter context that filters the underlying data model to that specific field value for aggregation.

Why does SUMX not iterate over the entire physical table?

Iterators only iterate over the subset of rows visible after all active visual and formula filter contexts have been applied.

How can I see the exact DAX query generated by a visual matrix?

Use Performance Analyzer in Power BI Desktop to copy the query, then paste it into DAX Studio to inspect SUMMARIZECOLUMNS.

Can filter context travel backward from the many-side to the one-side?

Not by default; filters flow from the one-side (dimension) to the many-side (fact) unless bidirectional cross-filtering is configured.

How was this lesson?

Your feedback helps us refine explanations and catch bugs.