DAX interview questions you will actually be asked

Team InterviewPlan · October 22, 2026 · Updated October 22, 2026

Scrapbook illustration of a laptop with dashboard charts, formula cards and coffee

The DAX interview questions you will most likely be asked cover measures versus calculated columns, row context versus filter context, how CALCULATE changes filters, SUM versus SUMX, ALL and REMOVEFILTERS, time intelligence with a proper date table, USERELATIONSHIP, and how you would find and fix a slow measure.

Most DAX question lists online read like a function glossary: 'What is SUM? What is COUNT?'. Real Power BI interviews rarely go there. Interviewers want to know whether you understand how DAX evaluates, because that is what separates someone who copies formulas from someone who can debug a wrong number in a board report at 9 PM.

This post covers the questions that come up again and again for Power BI developer and data analyst roles, grouped by concept. For each one you get a short answer you can say out loud, and where useful, a formula you can write on a shared screen. For the wider Power BI round, including modelling and Power Query, see our Power BI developer interview questions.

What is the difference between a measure and a calculated column?

This is nearly always the first DAX question, and interviewers use it to judge whether the rest of the round will be easy or hard. A good answer covers when each is computed, where it is stored and when to use which.

Calculated column

Measure

When it is computed

At data refresh, row by row

At query time, for each visual cell

Storage

Stored in the model, uses memory

Not stored, computed on demand

Context

Row context of its table

Filter context from the visual and slicers

Good for

Slicing, grouping, relationships

Aggregations like totals, ratios, YoY

Example

Age band from a birth date

Total Sales, Margin %

If I need to put something on an axis or a slicer, I use a column, ideally created in Power Query or the source. If it is a number that should respond to filters, like sales or margin, it is a measure. I avoid calculated columns for aggregations because they bloat the model and do not react to slicers.

How do row context and filter context differ?

Row context means 'the current row'. It exists in calculated columns and inside iterator functions such as SUMX or FILTER. It lets you refer to a column value in that row, but it does not filter anything by itself.

Filter context is the set of filters active when a measure is evaluated: from slicers, visual rows and columns, page filters and CALCULATE. It decides which rows of the model are visible. A strong answer adds one sentence: row context does not automatically become filter context, which is exactly what context transition solves.

What does CALCULATE do, and what is context transition?

CALCULATE evaluates an expression in a modified filter context. You pass it an expression plus filter arguments, and it adds, replaces or removes filters before computing. Nearly every non-trivial measure uses it.

Example: Sales West = CALCULATE([Total Sales], Region[Region] = "West"). The boolean filter replaces any existing filter on Region[Region] with West, while filters on other columns stay in place.

Context transition happens when CALCULATE runs inside a row context, such as inside a calculated column or an iterator. It converts the current row into an equivalent filter context. Also remember that every measure reference is implicitly wrapped in CALCULATE, so calling a measure inside SUMX triggers context transition for each row.

In one project, a calculated column using SUM gave the grand total on every customer row. Wrapping it in CALCULATE fixed it, because context transition turned each customer row into a filter. That is when context transition finally clicked for me.

When would you use SUMX instead of SUM?

SUM aggregates a single column. SUMX is an iterator: it goes row by row over a table, evaluates an expression for each row, then adds the results. Use SUMX when the value you need does not exist as a column, for example quantity multiplied by unit price.

Revenue = SUMX(Sales, Sales[Quantity] * Sales[Unit Price])

Interviewers sometimes follow up with: 'Is SUMX slower?' A fair answer is that simple iterators over a single table are usually well optimised by the engine, but iterating a large table with a complex expression, or calling measures inside an iterator over many rows, can be expensive. Measure it rather than guess.

How do ALL, ALLEXCEPT, ALLSELECTED and REMOVEFILTERS differ?

These remove filters, and they power almost every 'percentage of total' question. Know them well enough to choose the right one quickly.

  • ALL removes filters from a table or columns. Used as a CALCULATE modifier, it ignores slicers on those columns. It can also return a table.

  • REMOVEFILTERS does the same as ALL when used as a CALCULATE modifier, but it cannot return a table. Many developers prefer it because the intent is clearer.

  • ALLEXCEPT removes all filters from a table except those on the columns you list.

  • ALLSELECTED removes filters coming from inside the visual but keeps filters from outside it, such as slicers. It is useful for 'percent of what the user selected'.

A classic scenario: show each region's share of total sales. Region Share = DIVIDE([Total Sales], CALCULATE([Total Sales], REMOVEFILTERS(Region)))

What time intelligence questions should you expect?

Time intelligence comes up in almost every Power BI round because it appears in almost every business report. Interviewers typically ask you to write a year-to-date, a previous year comparison and a year-over-year percentage.

  1. First, mention the date table. Time intelligence functions need a proper date table with one row per day, no gaps, covering full years, related to your fact table and marked as a date table.

  2. Year to date: Sales YTD = TOTALYTD([Total Sales], 'Date'[Date]), or CALCULATE([Total Sales], DATESYTD('Date'[Date])).

  3. Previous year: Sales PY = CALCULATE([Total Sales], SAMEPERIODLASTYEAR('Date'[Date])). DATEADD with minus one year also works and handles other intervals.

  4. Year over year percentage, using variables and DIVIDE to avoid divide-by-zero errors.

Sales YoY % = VAR CurrentSales = [Total Sales] VAR PriorSales = [Sales PY] RETURN DIVIDE(CurrentSales - PriorSales, PriorSales)

Mention why you used variables: they make the formula readable, and each variable is evaluated once, which can help performance. Mention DIVIDE too: it returns blank, or an alternate result you specify, instead of an error when the denominator is zero.

The running total question

A frequent follow-up is a running total that is not reset by year. Running Total = CALCULATE([Total Sales], FILTER(ALL('Date'[Date]), 'Date'[Date] <= MAX('Date'[Date]))). Explain that ALL removes the date filter from the visual, and FILTER keeps every date up to the latest date in the current context.

How do you handle multiple date relationships?

Say your Sales table has Order Date and Ship Date, both related to the Date table. Power BI allows only one active relationship between two tables, so one becomes inactive. To use the inactive one in a measure, use USERELATIONSHIP inside CALCULATE.

Sales by Ship Date = CALCULATE([Total Sales], USERELATIONSHIP(Sales[Ship Date], 'Date'[Date]))

Interviewers like this question because it reveals whether you have built real models. If you also mention role-playing dimensions as an alternative, where you load a separate Ship Date table, you show you know the trade-off between model size and simplicity.

How would you troubleshoot a slow DAX measure?

Senior roles almost always include a performance question. Give a process, not a list of tips. Here is a structure that works well in interviews.

  1. Reproduce it with Performance Analyzer in Power BI Desktop to find which visual and which query is slow.

  2. Copy the query into DAX Studio and check server timings to see how much time is spent in the formula engine versus the storage engine.

  3. Look for common causes: FILTER over an entire large table where a simple column filter would do, heavy iterators calling measures over many rows, bidirectional relationships, and high-cardinality columns.

  4. Rewrite with variables, simpler filter arguments and, where possible, push logic to Power Query or the source.

  5. Test again and compare timings, then check the numbers still match.

On one sales dashboard, a margin measure used FILTER on the whole Sales table with several conditions. I replaced it with column filters inside CALCULATE and stored an intermediate result in a variable. The visual went from noticeably slow to almost instant, and the totals stayed identical.

How should you prepare for a live DAX round?

Many Power BI interviews now include a shared-screen task where you open a sample model and write measures live. Practise writing measures without autocomplete, explain your thinking as you type, and always check totals as well as individual rows. Wrong totals are the most common trap.

  • Build a small practice model with Sales, Product, Customer and Date tables and write ten measures from scratch.

  • Practise explaining filter context out loud, as if to a non-technical manager.

  • Review our general technical interview tips for how to think aloud under time pressure.

  • Run a timed mock interview focused on Power BI so the live format feels familiar.

If you land the role and inherit a complex model, Power BI job support gives you AI plus expert help with real tickets in your first 90 days.

Ready to practise? Sign up free for InterviewPlan AI and get 5 live Copilot minutes and 100 AI credits, no card needed.

Frequently asked questions

What DAX functions should I know for an interview?

Focus on CALCULATE, FILTER, ALL, REMOVEFILTERS, ALLEXCEPT, ALLSELECTED, SUMX and other iterators, RELATED, DIVIDE, USERELATIONSHIP, RANKX and time intelligence functions like TOTALYTD, DATESYTD, SAMEPERIODLASTYEAR and DATEADD. More important than the list is explaining how each one affects filter context.

Why do time intelligence functions need a date table?

Time intelligence functions work on a continuous range of dates. A proper date table has one row per day with no gaps, covers complete years, is related to your fact table, and is marked as a date table. Without it, functions like SAMEPERIODLASTYEAR can return wrong or blank results.

What is context transition in simple words?

Context transition is what happens when CALCULATE runs inside a row context. It turns the current row into a filter, so the calculation only sees data related to that row. It also happens whenever you reference a measure inside an iterator like SUMX, because measures are implicitly wrapped in CALCULATE.

Is ALL the same as REMOVEFILTERS?

When used as a filter modifier inside CALCULATE, they behave the same way: both remove filters from the specified table or columns. The difference is that ALL can also be used as a table function that returns rows, while REMOVEFILTERS cannot. Many developers use REMOVEFILTERS in CALCULATE because the intent is clearer.

How do I practise DAX for interviews?

Build a small model with sales, product, customer and date tables, then write common measures from scratch: totals, percentage of total, year to date, previous year, year over year, running totals and rankings. Check both row values and totals, and practise explaining your formulas out loud.

P.S.

Reading helps. Practising out loud helps more.

Start free with 5 live minutes and 100 AI credits for Resume AI, Job Search, Auto-Apply, mock interviews and Behavioral Coach.