4 Critical DAX Anti-Patterns Undermining Power BI Performance
Good DAX performance usually comes down to avoiding just a few common mistakes. These patterns show up constantly in customer Power BI models—even from experienced teams—and they can turn fast reports into painfully slow dashboards while breaking your numbers. Here are the four most common ones we see, with straightforward fixes that actually work.
Anti-Pattern 1: Filtering Bloated Fact Tables Directly
Fact tables from your data warehouse typically carry 50+ columns. When you filter them directly, DAX propagates that filter across every single column, even the ones you don't need.
What goes wrong: Memory usage spikes dramatically during evaluation. Simple slicer interactions suddenly take much longer than expected.
Before we get to the fix: Remember that relying on a Dimension table for filtering is always Plan A. If that's not an option, here is how to handle the Fact table:
The fix:
-- Don't do this - filters the whole bloated table
East Sales =
CALCULATE(
SUM(Sales[Amount]),
FILTER(Sales, Sales[Region] = "East")
)
-- Do this - project first, then filter
East Sales =
CALCULATE(
SUM(Sales[Amount]),
FILTER(
SUMMARIZE(Sales, Sales[Region]),
Sales[Region] = "East"
)
)
Real world result: 8-10x faster visuals.
Anti-Pattern 2: CALCULATE Context Transition Without Unique Keys
CALCULATE flips row context to filter context, but without a primary key or unique grouping, you get duplicate rows processed multiple times.
What goes wrong: Your totals look wrong in cards but right in tables. Plus it's unnecessarily slow.
The fix:
-- Wrong and slow - triggers bad transition
Line Total = CALCULATE(SUM(Sales[Amount]), Sales)
-- Right and fast - just iterate
Line Total = SUMX(Sales, Sales[Amount])
Real world result: Correct numbers, 3-5x faster.
Anti-Pattern 3: Adding Calculations Inside SUMMARIZE
SUMMARIZE groups data efficiently. When you add calculated columns inside it, DAX has to evaluate those expressions for every row during grouping.
What goes wrong: Monthly summaries jump from quick calculations to much longer processing times.
The fix:
-- Don't mix grouping and calculations
Monthly Summary =
SUMMARIZE(
Sales, Sales[Month],
"Margin", SUM(Sales[Amount]) * 0.9
)
-- Keep them separate
Monthly Summary =
ADDCOLUMNS(
SUMMARIZE(Sales, Sales[Month]),
"Margin", CALCULATE(SUM(Sales[Amount])) * 0.9
)
Real world result: Back to seconds, not minutes.
Anti-Pattern 4: Using SUMMARIZECOLUMNS in Measures
SUMMARIZECOLUMNS works great for static table expressions. Put it in a measure and it completely ignores your slicers and page filters.
What goes wrong: Change the Region slicer. Nothing happens. Your visual doesn't respond.
The fix:
-- Breaks all your slicers
Top Products =
SUMMARIZECOLUMNS(
Sales[Product],
"Sales", SUM(Sales[Amount])
)
-- Slicers actually work
Top Products =
SUMX(
VALUES(Sales[Product]),
CALCULATE(SUM(Sales[Amount]))
)
Real world result: Full interactivity restored.
Quick Diagnostic Table
|
Pattern |
Main Problem |
Fix Difficulty |
Do This First? |
|
FILTER(entire table) |
Memory explosion |
Easy |
Yes |
|
CALCULATE(..., table) |
Wrong numbers |
Easy |
Yes |
|
SUMMARIZE with calculations |
Slow grouping |
Medium |
Soon |
|
SUMMARIZECOLUMNS in measures |
Dead slicers |
Easy |
Yes |
How We Verify These Fixes Work
We don't guess—we measure:
- DAX Studio for query plans and timings
- Performance Analyzer for DAX waterfalls (before/after)
- VertiPaq Analyzer for memory compression
- Real datasets (10M+ rows, proper star schemas)
Pattern: Write bad code → measure → fix → measure → compare.
Your Next Steps
- Open Performance Analyzer in Power BI Desktop today
- Find your slowest DAX call (it's 80% of your problem)
- Match it against this list
- Fix one pattern, retest, repeat
These four fixes solve the majority of DAX performance problems we see in production models.
Further Reading
- The Definitive Guide to DAX (3rd Edition) - Marco Russo, Alberto Ferrari
- SQLBI.com iterator optimization articles
- Power BI Performance Analyzer documentation
Share this
Share this
More resources
Learn more about Pythian by reading the following blogs and articles.

Top 10 Power BI DAX Functions for Efficient Data Analysis

How to Install SQL Server Reporting Services 2019
An Introduction to Chaos Engineering: Trying to Break Stuff
Ready to unlock value from your data?
With Pythian, you can accomplish your data transformation goals and more.