Bird
Raised Fist0
Power BIbi_tool~20 mins

Optimizing DAX queries in Power BI - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
DAX Optimization Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ dax_lod_result
intermediate
2:00remaining
Calculate Total Sales Using SUMX with FILTER
Given a Sales table with columns [Product], [Quantity], and [Price], which DAX measure correctly calculates the total sales only for products with Quantity greater than 10?
ATotal Sales = SUMX(FILTER(Sales, Sales[Quantity] > 10), Sales[Quantity] * Sales[Price])
BTotal Sales = SUMX(Sales, IF(Sales[Quantity] > 10, Sales[Quantity] * Sales[Price], 0))
CTotal Sales = CALCULATE(SUMX(Sales, Sales[Quantity] * Sales[Price]), Sales[Quantity] > 10)
DTotal Sales = SUMX(Sales, Sales[Quantity] * Sales[Price])
Attempts:
2 left
💡 Hint
Use FILTER to limit rows before calculation.
❓ visualization
intermediate
1:30remaining
Best Visualization for Showing Sales Trend Over Time
You want to show how total sales change month by month over the last year. Which visualization type is best to clearly show this trend?
AStacked Bar Chart
BLine Chart
CPie Chart
DScatter Plot
Attempts:
2 left
💡 Hint
Think about how to show changes over time clearly.
❓ data_modeling
advanced
2:30remaining
Optimizing Relationships for Faster DAX Queries
You have two large tables: Customers and Sales. You want to optimize DAX queries that calculate sales by customer region. Which relationship setup improves performance the most?
ACreate no relationship and use LOOKUPVALUE in measures
BCreate a many-to-many relationship between Customers and Sales on CustomerID with both directions filtering
CCreate a one-to-one relationship between Customers and Sales on CustomerID with single direction filtering
DCreate a one-to-many relationship from Customers to Sales on CustomerID with single direction filtering
Attempts:
2 left
💡 Hint
Think about how relationships filter data efficiently.
🔧 Formula Fix
advanced
2:00remaining
Identify the Error in This DAX Measure
What error will this DAX measure cause?

Average Sales = AVERAGE(Sales[Quantity] * Sales[Price])
Power BI
Average Sales = AVERAGE(Sales[Quantity] * Sales[Price])
ATypeError: AVERAGE expects a single column, not an expression
BSyntaxError: Cannot multiply columns inside AVERAGE
CNo error, returns average sales amount
DRuntimeError: Division by zero
Attempts:
2 left
💡 Hint
Check what AVERAGE function accepts as input.
🧠 Conceptual
expert
1:30remaining
Why Use Variables in Complex DAX Measures?
What is the main benefit of using variables (VAR) inside complex DAX measures?
AVariables automatically create new columns in the data model
BVariables allow storing data outside the model for faster access
CVariables improve readability and avoid repeated calculations, boosting performance
DVariables replace the need for relationships between tables
Attempts:
2 left
💡 Hint
Think about how variables help inside a formula.

Practice

(1/5)
1.

What is a simple way to improve the performance of a DAX query in Power BI?

SUM(Sales[Amount]) is slow. What should you do?

easy
A. Avoid using filters in the query
B. Add more columns to the table
C. Use complex nested IF statements
D. Use variables to store intermediate results

Solution

  1. Step 1: Understand the role of variables in DAX

    Variables store intermediate results to avoid repeated calculations, making queries faster.
  2. Step 2: Apply variables to the example

    Using variables in SUM(Sales[Amount]) can reduce repeated scans and improve speed.
  3. Final Answer:

    Use variables to store intermediate results -> Option D
  4. Quick Check:

    Variables improve performance [OK]
Hint: Use variables to avoid repeated calculations [OK]
Common Mistakes:
  • Adding unnecessary columns slows down queries
  • Using complex nested IFs increases calculation time
  • Ignoring filters can cause large data scans
2.

Which of the following is the correct syntax to define a variable in a DAX measure?

Measure = ?
easy
A. Measure = DEFINE Total = SUM(Sales[Amount]) USE Total
B. Measure = VAR Total = SUM(Sales[Amount]) RETURN Total
C. Measure = LET Total = SUM(Sales[Amount]) THEN Total
D. Measure = SET Total = SUM(Sales[Amount]) OUTPUT Total

Solution

  1. Step 1: Recall DAX variable syntax

    DAX uses VAR to declare variables and RETURN to output the result.
  2. Step 2: Match syntax with options

    Measure = VAR Total = SUM(Sales[Amount]) RETURN Total correctly uses VAR Total = SUM(Sales[Amount]) RETURN Total.
  3. Final Answer:

    Measure = VAR Total = SUM(Sales[Amount]) RETURN Total -> Option B
  4. Quick Check:

    VAR and RETURN are correct DAX keywords [OK]
Hint: Remember: VAR ... RETURN in DAX for variables [OK]
Common Mistakes:
  • Using LET or DEFINE instead of VAR
  • Forgetting RETURN keyword
  • Using SET or OUTPUT which are not DAX keywords
3.

Consider this DAX measure:

Measure =
VAR FilteredSales = FILTER(Sales, Sales[Region] = "West")
RETURN SUMX(FilteredSales, Sales[Amount])

What is the main performance issue with this measure?

medium
A. FILTER creates a filtered table and SUMX iterates over it, which can be slow if Sales is large
B. FILTER is applied before SUMX, which is efficient
C. FILTER creates a filtered table but SUMX uses the original table, causing repeated scans
D. FILTER creates a table but SUMX iterates over original Sales table

Solution

  1. Step 1: Analyze FILTER and SUMX behavior

    FILTER creates a filtered table of Sales where Region is "West". SUMX iterates over this filtered table.
  2. Step 2: Understand performance impact

    If Sales is large, creating and iterating over a filtered table can be slow. Better to filter early or use CALCULATE with SUM.
  3. Final Answer:

    FILTER creates a filtered table and SUMX iterates over it, which can be slow if Sales is large -> Option A
  4. Quick Check:

    FILTER + SUMX on large tables can slow queries [OK]
Hint: Avoid FILTER + SUMX on big tables; use CALCULATE [OK]
Common Mistakes:
  • Thinking SUMX iterates original table, not filtered
  • Assuming FILTER before SUMX is always fast
  • Ignoring table size impact on performance
4.

Identify the error in this DAX measure that aims to optimize performance:

Measure =
VAR TotalSales = SUM(Sales[Amount])
RETURN
CALCULATE(TotalSales, FILTER(Sales, Sales[Region] = "East"))
medium
A. Using FILTER inside CALCULATE is always slow
B. TotalSales should be inside FILTER function
C. TotalSales is a scalar evaluated outside CALCULATE, so the filter does not apply
D. No error; measure is optimized

Solution

  1. Step 1: Check variable type and usage

    TotalSales = SUM(Sales[Amount]) is a scalar value computed in the original filter context.
  2. Step 2: Analyze CALCULATE arguments

    CALCULATE(TotalSales, FILTER(Sales, Sales[Region]="East")) is syntactically valid, but since TotalSales is a pre-computed scalar, the modified filter context does not re-evaluate it. It returns the unfiltered total instead of East sales, defeating the performance optimization goal for filtered calculation.
  3. Final Answer:

    TotalSales is a scalar evaluated outside CALCULATE, so the filter does not apply -> Option C
  4. Quick Check:

    Scalar variable used incorrectly with CALCULATE filter [OK]
Hint: Scalar variables computed outside aren't affected by CALCULATE filters [OK]
Common Mistakes:
  • Thinking CALCULATE re-evaluates scalar variables in new context
  • Thinking FILTER inside CALCULATE is always slow
  • Not distinguishing scalar vs table types
5.

You want to optimize a DAX measure that calculates total sales for the current year only. Which approach is best for performance?

Option 1:
Measure = CALCULATE(SUM(Sales[Amount]), FILTER(Sales, YEAR(Sales[Date]) = YEAR(TODAY())))

Option 2:
Measure = CALCULATE(SUM(Sales[Amount]), Sales[Date].[Year] = YEAR(TODAY()))
hard
A. Option 2 is better because it uses column filter, not row filter
B. Option 1 is better because FILTER is more flexible
C. Both options have same performance
D. Neither option works; use SUMX instead

Solution

  1. Step 1: Compare FILTER vs direct column filter

    Option 1 uses FILTER which scans row by row, applying YEAR function, which is slow.
  2. Step 2: Understand column filter advantage

    Option 2 uses a direct filter on the date column's Year attribute, which is faster because it uses existing column indexing and avoids row-by-row evaluation.
  3. Final Answer:

    Option 2 is better because it uses column filter, not row filter -> Option A
  4. Quick Check:

    Use column filters over FILTER for better speed [OK]
Hint: Filter on columns, not rows, for faster DAX queries [OK]
Common Mistakes:
  • Using FILTER with row context unnecessarily
  • Assuming FILTER is always faster
  • Ignoring built-in column filters
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard