Power Query • Data Modelling • DAX • Security & Performance • 2026

Power BI Interview Questions

30 questions What each one tests, an answer frame, a spoken answer 37 min read

This page is for anyone facing a Power BI round, from a first analyst job to a senior BI developer role. Most interviews start with the parts of Power BI and Power Query, move to data modelling and relationships, then spend the longest on DAX: measures, CALCULATE, filter context and time intelligence. Later questions cover import versus DirectQuery, row-level security, performance and publishing, and often end with a dashboard case. Each question shows what the interviewer is really checking, the shape of a strong answer and a short answer you can say out loud. Practise saying them, then swap in your own projects.

Search all questions by round, difficulty and level, or save the ones you want to practise.

Components & Service 2 questions

Easy Technical round Fresher Practice question

1. What are the main parts of Power BI, and where does each one fit in a normal project?

What the interviewer is really testing:
Whether you know the path a report takes from a data source to a business user, not just a list of product names.
Answer frame:

Desktop: the free Windows app where you connect to data, shape it in Power Query, model it and build reports.

Service: the cloud side where reports are published, shared through workspaces and apps, and refreshed on a schedule.

Gateway: the bridge that lets the Service refresh from data sitting inside the company network.

Others: mobile apps for viewing, Report Server for on-premises hosting, paginated reports for print-ready layouts.

Sample spoken answer:

"In a normal project I start in Power BI Desktop. That's the free Windows app where I connect to the sources, clean the data in Power Query, build the model and relationships, write DAX measures and design the report pages. When it's ready I publish to the Power BI Service, the cloud side. There I put it in a workspace, share it with users, usually through an app, and set a scheduled refresh. If the data lives on a server inside the company network, the Service can't reach it directly, so we install an on-premises data gateway to handle the refresh. Users then view the reports in the browser, in Teams or on the mobile app. Companies that can't use the cloud can run Power BI Report Server instead, and for invoice-style printable reports there are paginated reports."

Red flag to avoid:

Describing Desktop and the Service as the same thing, or not knowing why a gateway exists.

They may ask next:
  • What is a semantic model, and why is it kept separate from the reports that use it?
  • When would you choose a paginated report over a normal Power BI report?
  • Which of these parts need a paid licence before you can share content with colleagues?
Say it in 60 seconds
Easy Technical round Fresher Practice question

2. What is the difference between a Power BI report and a Power BI dashboard?

What the interviewer is really testing:
A classic screening check: whether you have used the Service, not just Desktop, and know which one a business user actually needs.
Answer frame:

Report: one or more pages built on one semantic model, fully interactive with slicers, filters and drill-down.

Dashboard: a single canvas created only in the Service, made of tiles pinned from one or more reports.

Use: reports for exploring, dashboards for a one-screen summary with alerts on key numbers.

Sample spoken answer:

"A report is what I build in Desktop. It can have many pages, it sits on top of one semantic model, and it's fully interactive: slicers, cross-filtering, drill-down, tooltips. A dashboard only exists in the Power BI Service. It's a single page of tiles, and I make it by pinning visuals from reports, which can come from different reports and different semantic models. That's its strength: a manager can see sales, stock and support numbers on one screen. But a dashboard has no slicers of its own, and clicking a tile opens the report it came from. You can also set data alerts on card, KPI or gauge tiles, so someone is notified when a number crosses a line. So reports are for analysis and dashboards are for monitoring. In practice many teams now share an app with a strong summary page instead."

Red flag to avoid:

Using the two words as synonyms, or claiming you can build a dashboard in Power BI Desktop.

They may ask next:
  • How does pinning a whole report page as a live tile behave differently from pinning single visuals?
  • Where would a busy sales director look first, the report or the dashboard, and why?
Say it in 60 seconds

Power Query 4 questions

Easy Technical round Fresher Practice question

3. What is Power Query used for, and what happens to the applied steps when the data refreshes?

What the interviewer is really testing:
Whether you understand that Power Query is a repeatable recipe, not a one-time manual clean-up.
Answer frame:

Purpose: connect to sources and clean, reshape and combine data before it is loaded into the model.

Steps: every action is recorded as an applied step, written in the M language, in order.

Refresh: each refresh replays the whole recipe against the new data, so the clean-up is automatic.

Sample spoken answer:

"Power Query is the data preparation layer in Power BI. I use it to connect to sources like a SQL database, Excel files or SharePoint, then fix the data before it reaches the model: remove columns I don't need, set data types, split columns, filter out bad rows, replace values and combine tables. Every click becomes an applied step, and behind the scenes each step is written in a language called M. The key point is that it's a recipe, not a one-off edit. When the report refreshes tomorrow, Power Query replays every step, in the same order, on the new data. So if a step depends on something fragile, like a column name the source team later renames, the refresh fails. That's why I name my steps clearly, remove unneeded columns early and keep hard-coded values to a minimum."

Red flag to avoid:

Treating Power Query like a sheet you edit by hand, or not knowing the steps rerun on every refresh.

They may ask next:
  • Where would you do a transformation: in Power Query, in DAX or back in the source database, and why?
  • What does the Advanced Editor show you, and when have you edited M by hand?
Say it in 60 seconds
Easy Technical round Fresher, Mid-level Practice question

4. In Power Query, when would you use Merge Queries and when would you use Append Queries?

What the interviewer is really testing:
Whether you can tell a join from a union, which is the most common data preparation decision you make.
Answer frame:

Merge: a join; brings in columns from a second table by matching a key, with join kinds such as left outer, inner or anti.

Append: a union; stacks the rows of tables that share the same columns.

Watch: duplicate keys multiply rows in a merge; mismatched column names leave nulls in an append.

Sample spoken answer:

"Merge is a join and append is a stack. If I have an orders table and a customers table and I want the customer's region next to each order, I merge on customer ID, pick a join kind, usually left outer so I keep every order, then expand the region column. Anti joins are handy too, for example a left anti join to find orders whose customer doesn't exist. Append is for when the same shape of data is split across tables, like one sales file per region or per year, and I want one table with all the rows. Append matches columns by name, so if one file says 'Qty' and another says 'Quantity', I get two half-empty columns. In a merge the trap is duplicate keys on the right-hand table, which quietly multiplies my rows, so I always check row counts afterwards."

Red flag to avoid:

Mixing up the two, or never checking row counts after a merge.

They may ask next:
  • How would you combine every file dropped into a folder each month without editing the query?
  • After a merge your row count went up. What happened, and how do you prove it?
Say it in 60 seconds
Hard Technical round Mid-level, Senior Practice question

5. What is query folding in Power Query, and how do you check whether your steps are folding?

What the interviewer is really testing:
Whether you know why a refresh against a large database is fast or painfully slow, which marks people who have worked with real volumes.
Answer frame:

Meaning: Power Query turns your steps into one native query, such as SQL, so the source does the work.

Check: right-click a step to see if View Native Query is available; Power Query Online also shows step folding indicators.

Breakers: steps the source can't express, like adding an index column or mixing sources, stop folding from there on.

Order: filter rows and remove columns early, so the heavy lifting folds before anything breaks it.

Sample spoken answer:

"Query folding means Power Query translates my applied steps into the source's own language. Against a SQL database, my filter, column removal and group-by become one SELECT statement with a WHERE and a GROUP BY. The database does the work and only the result comes over the network. If folding breaks, Power Query pulls the rows into its own engine and does the work there, which is much slower on big tables. To check, I right-click a step: if View Native Query is available, that step folds. A greyed-out option is only a hint, since some connectors never show it, and in Power Query Online there are folding indicators next to each step. Some steps can't fold, like adding an index column or merging a SQL table with an Excel file, and once one step breaks folding, the later steps usually don't fold either. So I filter and remove columns first. It also matters for incremental refresh, which relies on the date filter folding back to the source."

Red flag to avoid:

Never having heard of folding, or assuming every transformation runs inside the database.

They may ask next:
  • If you type your own SQL statement in the source step, what usually happens to folding for the steps after it?
  • Why does incremental refresh care so much about folding?
  • Can a query against a CSV file fold? Why or why not?
Say it in 60 seconds
Easy Technical round Fresher, Mid-level Practice question

6. Finance sends a sheet with one column per month. How would you reshape it for Power BI, and why?

What the interviewer is really testing:
Whether you know that a model wants long, narrow tables, and whether your fix survives next month's new column.
Answer frame:

Problem: months as columns can't be filtered by a date table, and every new month breaks visuals and measures.

Fix: select the columns that describe each row and use Unpivot Other Columns to get Month and Amount rows.

Finish: rename, set types and turn the month text into a real date so it can relate to the date table.

Sample spoken answer:

"A sheet with Jan, Feb and Mar as columns is easy for people to read but bad for a model. I can't connect it to a date table, I can't write one measure across all months, and next month a new column appears that my visuals don't know about. So in Power Query I select the columns that describe the row, like product and region, and choose Unpivot Other Columns. That turns every month column into rows with two columns: an attribute holding the month name and a value holding the amount. I rename them to Month and Amount, set the types, and convert the month into a proper date so it joins to my date table. I pick Unpivot Other Columns rather than unpivoting only the selected month columns because when finance adds a new month, it gets picked up automatically on the next refresh."

Red flag to avoid:

Writing twelve measures, one per month column, instead of reshaping the data.

They may ask next:
  • The sheet also has a total column on the right and a total row at the bottom. How do you deal with them?
  • When would you pivot data instead of unpivoting it?
Say it in 60 seconds

Data Modelling 4 questions

Medium Technical round Fresher, Mid-level Practice question

7. Why is a star schema recommended in Power BI instead of one big flat table?

What the interviewer is really testing:
Whether you design models on purpose, since the model decides how simple the DAX is and how fast the report runs.
Answer frame:

Shape: fact tables hold events and numbers; dimension tables hold descriptions, linked one-to-many.

Engine: descriptive text stored once compresses well, and filters flow one clear way.

Growth: measures stay simple, and a second fact table can share the same dimensions.

Sample spoken answer:

"In a star schema I keep a fact table in the middle, like sales, with one row per transaction, the numbers I'll add up, and keys to the dimensions. Around it sit dimension tables like date, product, customer and store, holding the descriptive columns people slice by. Each dimension links to the fact one-to-many, filtering in one direction. Power BI's engine is built for this. Descriptive text lives once in a small table instead of being repeated on millions of rows, so the model compresses better. Filters travel one clear way, from dimension to fact, so results are predictable and the DAX stays simple. The big win comes with a second fact, like budgets or returns: both share the same date and product dimensions, and one slicer filters both. That's awkward with one flat table, and a snowflake of chained lookup tables just makes the filter paths longer for no real gain."

Red flag to avoid:

Saying a flat table is always simpler and faster, or not being able to say which table is the fact.

They may ask next:
  • Where would you put a column like order status that has only a few distinct values?
  • Budgets are set per month and per category, while sales are per day and per product. How do you model both?
Say it in 60 seconds
Medium Technical round Mid-level Practice question

8. Explain the relationship cardinality options in Power BI. When do you end up with many-to-many, and how do you handle it?

What the interviewer is really testing:
Whether you understand what a relationship promises about the data, and whether you reach for a proper design instead of a risky shortcut.
Answer frame:

Options: one-to-many (the normal case), one-to-one, and many-to-many.

One side: the key on the one side must be unique, and Power BI checks it.

Many-to-many: appears when neither side is unique, such as targets per category against a product table.

Handling: a small dimension of unique keys or a bridge table, or the many-to-many option with tested totals.

Sample spoken answer:

"Cardinality says how many rows on each side can match. One-to-many is the normal case: one product row, many sales rows, and the product key must be unique on the one side. One-to-one is rare and usually means the two tables should just be merged. Many-to-many happens when neither column is unique. A common example is targets set per category joined to a product table, where each category appears many times. Another is customers and bank accounts, where one customer holds several accounts and an account can have joint holders. For targets I'd build a small category dimension with unique values and relate both tables to it. For joint accounts I'd use a bridge table between customer and account. What I avoid is choosing many-to-many just because Power BI refused a one-to-many over a duplicate key I didn't expect. That's usually dirty data, and it needs fixing."

Red flag to avoid:

Using many-to-many to silence a duplicate-key error without finding out why the keys are duplicated.

They may ask next:
  • Power BI says it can't create a one-to-many relationship because of duplicate values. What do you check first?
  • Which way does the filter need to flow through a bridge table, and how do you make it do that?
Say it in 60 seconds
Medium Technical round Mid-level Practice question

9. What does the cross-filter direction on a relationship do, and why is setting it to both risky?

What the interviewer is really testing:
Whether you know how filters flow through a model, and the ambiguity and speed costs of letting them flow both ways.
Answer frame:

Single: filters flow from the one side to the many side, from dimension to fact.

Both: filters also flow back, so a fact table can filter a dimension.

Risk: ambiguous paths, numbers that are hard to explain and slower queries as the model grows.

Alternative: keep single, and use CROSSFILTER inside the one measure that needs the reverse flow.

Sample spoken answer:

"Cross-filter direction decides which way a filter travels along a relationship. With single, the default for one-to-many, a filter on product flows down to sales, which is what we want. With both, it also flows back up, so filtering sales can filter product. That's sometimes useful, for example so a product slicer only lists products that actually sold. The risk is that once a few relationships go both ways, there can be more than one path between two tables, and Power BI either won't let a relationship be active or gives numbers that are hard to explain. It also makes queries heavier. So I keep everything single by default. When one measure needs the reverse flow, I use CROSSFILTER inside CALCULATE for just that measure. For the slicer case, a visual-level filter on the slicer where sales is not blank does the job without touching the model."

Red flag to avoid:

Setting every relationship to both so the numbers seem to work, without being able to explain the filter path.

They may ask next:
  • How does bi-directional filtering interact with row-level security?
  • How would you show only customers who bought in the selected period without changing any relationship?
Say it in 60 seconds
Medium Coding round Mid-level Practice question

10. Your sales table has an order date and a ship date, and both need to link to the date table. How do you model that?

What the interviewer is really testing:
Whether you know that only one relationship between two tables can be active, and the two standard ways around it.
Answer frame:

Limit: only one active relationship between two tables; any others are inactive and drawn dashed.

Option one: keep order date active and switch to ship date inside a measure with USERELATIONSHIP.

Option two: a second date table for ship date, when users must slice by both dates at once.

Sample spoken answer:

"Power BI allows only one active relationship between two tables, so I'd make order date to the date table the active one, since most measures use it, and create ship date to the date table as an inactive relationship, which shows as a dashed line. For measures that need ship date, I write CALCULATE with USERELATIONSHIP, which switches on the inactive relationship just for that calculation. That keeps one date table and one set of slicers. The other option is a role-playing copy: a second date table just for ship dates, with its own active relationship. I'd choose that when users want to filter by order month and ship month at the same time on one page, or when lots of measures would all need USERELATIONSHIP. The cost is one more table and slicers that users have to tell apart."

Code:
Total Sales = SUM ( Sales[Amount] )

Sales by Ship Date =
CALCULATE (
    [Total Sales],
    USERELATIONSHIP ( Sales[ShipDate], 'Date'[Date] )
)
Red flag to avoid:

Duplicating the whole sales table just to get a second link to the date table.

They may ask next:
  • Why not simply make both relationships active?
  • How would you count orders placed in one month but shipped in the next?
Say it in 60 seconds

DAX 7 questions

Easy Technical round Fresher, Mid-level Practice question

11. What is the difference between a calculated column and a measure in Power BI, and how do you choose?

What the interviewer is really testing:
The most common DAX opener. It checks whether you know when a value is computed and stored, which affects both correctness and model size.
Answer frame:

Calculated column: computed row by row at refresh, stored in the model, works in row context.

Measure: computed at query time for whatever filters the visual applies, stores nothing.

Choose: a column when you slice, filter or group by the result; a measure for any number you aggregate.

Sample spoken answer:

"A calculated column is evaluated once per row when the data refreshes, and the result is stored in the table like any other column. So it uses memory, and it only knows about its own row. A measure isn't stored at all. It's calculated the moment a visual asks for it, using whatever filters are active: the slicer, the row in the matrix, the bar in the chart. My rule is simple. If I need the result on an axis, in a slicer, or to group rows, like an age band or a price tier, it's a column, and ideally I create it in Power Query or the source rather than in DAX. If it's a number people add up, average or compare, like sales or margin, it's a measure. A common mistake is a margin column worked out row by row and then summed, which gives a wrong total. A measure dividing total profit by total sales gets it right."

Red flag to avoid:

Saying they are interchangeable, or building every number as a calculated column.

They may ask next:
  • Why is it usually better to create a column in Power Query than as a DAX calculated column?
  • Can you put a measure in a slicer? What would you do instead?
Say it in 60 seconds
Hard Technical round Mid-level, Senior Practice question

12. Explain row context, filter context and context transition in DAX.

What the interviewer is really testing:
Whether you understand how DAX actually evaluates, which is what lets you debug a measure instead of guessing.
Answer frame:

Row context: the current row, present in calculated columns and iterators like SUMX; it filters nothing by itself.

Filter context: the filters from slicers, visuals and CALCULATE that decide which rows a measure sees.

Transition: CALCULATE turns the current row into an equal filter, and every measure reference carries an implicit CALCULATE.

Sample spoken answer:

"Row context means DAX knows which row it's on. You get it in a calculated column and inside iterators like SUMX or FILTER, so I can multiply quantity by price and it uses that row's values. But row context doesn't filter anything. Filter context is the set of filters in play when a measure runs: slicers, the row and column of a matrix, filters added by CALCULATE. It decides which rows are visible. Context transition is the bridge. When CALCULATE runs inside a row context, it turns the current row into an equivalent filter. The classic demo is a calculated column on the customer table. SUM of sales amount gives the grand total on every row, because nothing filters sales. Wrap it in CALCULATE and each customer gets their own sales. And because every measure is implicitly wrapped in CALCULATE, calling a measure inside SUMX triggers context transition too, which is powerful but can be slow on big tables."

Code:
// Two calculated columns on the Customer table
All Sales = SUM ( Sales[Amount] )                    -- grand total on every row
Customer Sales = CALCULATE ( SUM ( Sales[Amount] ) ) -- that customer's own sales
Red flag to avoid:

Saying row context filters the table, or not being able to explain why the column shows the same number on every row.

They may ask next:
  • What does context transition do if the table you iterate has duplicate rows?
  • Why can calling a measure inside SUMX over a large fact table be slow?
Say it in 60 seconds
Medium Coding round Mid-level Practice question

13. What does CALCULATE do, and what happens to an existing slicer filter when you pass a filter to it?

What the interviewer is really testing:
Whether you know CALCULATE changes the filter context, and the difference between replacing a filter and adding to it.
Answer frame:

Job: evaluates an expression under a changed filter context.

Replace: a filter on a column overrides any existing filter on that same column; other filters stay.

Keep: KEEPFILTERS intersects with the existing filter instead of replacing it.

Remove: REMOVEFILTERS or ALL clears filters, which is how totals and shares are built.

Sample spoken answer:

"CALCULATE takes an expression, usually a measure, and evaluates it under a filter context that I change with its filter arguments. If I write CALCULATE of total sales where product colour is red, that filter replaces any filter already on colour. So if the slicer says blue, the measure still shows red sales, which surprises people. Filters on other columns, like year, stay in place. If I want to respect the slicer and only narrow it, I wrap the condition in KEEPFILTERS, and then with blue selected the result is blank, because nothing is both blue and red. To go the other way and drop a filter, I use REMOVEFILTERS or ALL on that column or table. Replace, keep and remove cover most of what people do with CALCULATE, and knowing which one you're doing is the difference between a measure that's right and one that's right by accident."

Code:
Red Sales =
CALCULATE ( [Total Sales], Product[Color] = "Red" )

Red Sales in Selection =
CALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] = "Red" ) )
Red flag to avoid:

Describing CALCULATE as a kind of SUMIF, with no idea that it overrides the slicer on the same column.

They may ask next:
  • What is a simple condition like Product[Color] = "Red" shorthand for inside CALCULATE?
  • When would you pass FILTER over a whole table instead of a column condition, and what does it cost?
Say it in 60 seconds
Easy Coding round Fresher, Mid-level Practice question

14. What is the difference between SUM and SUMX in DAX? Give an example where you need SUMX.

What the interviewer is really testing:
Whether you understand iterators, the first step to writing anything beyond a plain total.
Answer frame:

SUM: adds up one column for the rows in the current filter context.

SUMX: walks a table row by row, evaluates an expression on each row, then adds the results.

Need: whenever the value must be worked out per row first, like quantity times price.

Sample spoken answer:

"SUM takes one column and adds it up for whatever rows the filter context lets through. SUMX is an iterator. I give it a table and an expression, it goes row by row, works out the expression for each row, then sums the results. The classic case is revenue when the table has quantity and unit price but no amount column. SUM of quantity times SUM of price would be wrong, because it multiplies two totals. SUMX over sales of quantity times price does the multiplication per row and then adds, which is correct. Under the hood SUM of a column is shorthand for SUMX over that column, so plain SUM isn't magically faster. What I watch with SUMX is iterating a huge table while calling a measure in the expression, because that triggers context transition on every row. The same pattern exists as AVERAGEX, MAXX, COUNTX and others."

Code:
Revenue = SUMX ( Sales, Sales[Quantity] * Sales[UnitPrice] )
Red flag to avoid:

Multiplying two SUMs together to get revenue.

They may ask next:
  • How would you calculate the average sales per customer rather than per transaction?
  • Would you rather add an amount column in Power Query instead? Why or why not?
Say it in 60 seconds
Medium Coding round Mid-level Practice question

15. Write a measure that shows each product category's share of total sales, and keeps working when the user filters by region.

What the interviewer is really testing:
Whether you can remove exactly the filter you mean and keep the rest, which is the everyday use of ALL and REMOVEFILTERS.
Answer frame:

Numerator: the normal sales measure in the current context.

Denominator: the same measure with the category filter removed but the region filter kept.

Divide: DIVIDE returns blank instead of an error when the denominator is empty.

Variant: ALLSELECTED when the share should be of what the user selected, not of everything.

Sample spoken answer:

"I'd write it with two variables. The current value is just total sales. The denominator is total sales inside CALCULATE with REMOVEFILTERS on the category column, which drops the category filter coming from the matrix row but leaves region, date and everything else alone. So when the user picks a region, each category shows its share of that region's sales, which is what they expect. Then I return DIVIDE of the two, which handles a zero or blank denominator safely, and format the measure as a percentage. If I'd removed filters from the whole sales table instead, the region filter would disappear too, and the shares would no longer add up to a hundred percent within a region. And if the business wants the share among only the categories ticked in a slicer, I'd swap to ALLSELECTED on the category column."

Code:
Category Share =
VAR CurrentSales = [Total Sales]
VAR AllCategories =
    CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) )
RETURN
    DIVIDE ( CurrentSales, AllCategories )
Red flag to avoid:

Clearing every filter with ALL on the fact table and not noticing the region slicer stopped working.

They may ask next:
  • Why is DIVIDE safer than the slash operator here?
  • How would the measure change if category were a column in the sales table instead of a product dimension?
Say it in 60 seconds
Medium Coding round Fresher, Mid-level Practice question

16. Why do you need a proper date table in Power BI, and how would you write year-to-date and last-year sales?

What the interviewer is really testing:
Whether you can build the most common business comparison, and know the date table rules that make time functions work.
Answer frame:

Date table: one row per day, no gaps, whole years, marked as the date table and related to the facts.

Why: time functions shift and extend ranges of dates, which needs every day to exist.

Measures: DATESYTD for year to date, SAMEPERIODLASTYEAR for last year, then growth with DIVIDE.

Sample spoken answer:

"Time intelligence functions work by moving date ranges around: every day from the start of the year to now, or the same days one year back. That only works with a date table that has one row for every day, no gaps, whole years, and a unique date column. I build it in Power Query or with CALENDAR in DAX, add year, quarter and month columns, mark it as the date table and relate it to the fact tables. I also turn off auto date/time, so Power BI stops making hidden date tables for every date column. Then year to date is CALCULATE of total sales over DATESYTD on the date column, and last year is CALCULATE over SAMEPERIODLASTYEAR. Growth is the difference divided by last year, using DIVIDE so a new product with no history shows blank rather than an error. For a fiscal year, DATESYTD accepts a year-end date as a second argument."

Code:
Sales YTD = CALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) )

Sales LY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )

Sales YoY Growth =
VAR Curr = [Total Sales]
VAR Prev = [Sales LY]
RETURN
    DIVIDE ( Curr - Prev, Prev )
Red flag to avoid:

Running time intelligence on the date column of the sales table, which has gaps on days with no sales.

They may ask next:
  • The current year is only half over. How do you stop the comparison from counting last year's full months that haven't happened yet this year?
  • How is DATEADD different from SAMEPERIODLASTYEAR?
Say it in 60 seconds
Hard Coding round Mid-level, Senior Practice question

17. A measure looks right on every row of a table visual but the total row is wrong. Why does that happen, and how do you fix it?

What the interviewer is really testing:
Whether you know a total is a fresh evaluation, not a sum of the visible rows, which sits behind many 'Power BI is wrong' complaints.
Answer frame:

Cause: the total row runs the measure again with fewer filters; it does not add up the rows above.

Typical: IF logic, thresholds, MAX or distinct counts give a different answer at total level.

Fix: iterate the rows yourself with SUMX over VALUES of the grouping column.

Check: agree with the business what the total should mean before changing anything.

Sample spoken answer:

"The total row doesn't add up the numbers above it. It evaluates the measure again in the total's own filter context, where the row filter is gone. For a simple sum that gives the same answer, but for anything non-additive it doesn't. Say I have a bonus measure: if a salesperson's sales pass a target, pay a fixed bonus. Per row it works. At the total, the measure checks whether everyone's sales combined pass the target, and pays one bonus. The fix is to make the total iterate: SUMX over VALUES of the salesperson key, calling the bonus measure. Each salesperson is evaluated on their own through context transition, and the results are added. Before fixing anything, though, I ask what the total should mean, because for a distinct count of customers, a total below the sum of the rows is correct. A customer who bought in two regions is still one customer."

Code:
Bonus Total =
SUMX (
    VALUES ( Employee[EmployeeKey] ),
    [Bonus]
)
Red flag to avoid:

Calling it a Power BI bug, or switching totals off without understanding the cause.

They may ask next:
  • How would you hide the total for a measure where a total makes no sense?
  • Why does context transition matter inside that SUMX?
Say it in 60 seconds

Storage & Refresh 2 questions

Medium Technical round Mid-level, Senior Practice question

18. Import mode or DirectQuery: how do you decide, and what do you give up with each?

What the interviewer is really testing:
Whether you match the storage mode to the real need for freshness, speed and data size, instead of defaulting either way.
Answer frame:

Import: data is compressed into the model; fastest visuals and full DAX, but only as fresh as the last refresh.

DirectQuery: every visual sends queries to the source; fresher data, but slower and limited by the source.

Middle: composite models mix the two, with dual mode and aggregation tables for big facts.

Decide: on freshness need, data size, source strength and data policy.

Sample spoken answer:

"My default is import. The data is loaded into the in-memory engine, compressed, and visuals come back fast, with all of DAX and Power Query available. The cost is freshness: users see data as of the last refresh, and scheduled refreshes are limited per day depending on the licence, as is model size. DirectQuery leaves the data at the source. Every interaction sends queries to the database, so numbers are close to real time and huge tables don't have to fit in memory. But each visual is only as fast as the source, a busy page can fire many queries at the database, and some Power Query and DAX features are restricted. I'd pick DirectQuery when users truly need very fresh data or policy says the data can't be copied. Often the best answer is a composite model: import the dimensions and a summary table, and keep the large detail table in DirectQuery."

Red flag to avoid:

Choosing DirectQuery because someone said 'real time' without asking how fresh the data really needs to be.

They may ask next:
  • What is dual storage mode, and why does it matter in a composite model?
  • How is a live connection to a published semantic model different from DirectQuery?
  • A DirectQuery report is slow. Where do you look first?
Say it in 60 seconds
Medium Technical round Fresher, Mid-level Practice question

19. How does scheduled refresh work in the Power BI Service when the data sits on a server inside the company network?

What the interviewer is really testing:
Whether you have actually published a report and kept it alive, not only built one on your laptop.
Answer frame:

Gateway: the on-premises data gateway runs on a machine inside the network and relays requests from the Service.

Setup: register the gateway, add the data source with credentials, and map the semantic model to it.

Schedule: set refresh times, time zone and failure emails in the semantic model settings.

Cloud sources: sources already in the cloud usually need no gateway.

Sample spoken answer:

"The Service lives in the cloud, so it can't reach a database server inside our network on its own. The bridge is the on-premises data gateway. It's installed on an always-on machine inside the network, not someone's laptop, and it only makes outbound connections to the Service, so no inbound firewall ports need opening. I register it, then on the gateway I add the data source with the same server and database names I used in Desktop, plus a service account's credentials. In the semantic model settings I map the model to that gateway connection, set the refresh schedule and time zone, and turn on failure emails. There's also a personal mode gateway, but it's tied to one user, so for anything shared I use standard mode, ideally clustered on two machines so one reboot doesn't stop refresh. Purely cloud sources usually don't need a gateway at all."

Red flag to avoid:

Installing the gateway on a personal laptop, or not knowing a gateway is needed at all.

They may ask next:
  • Refresh worked last week and fails today with a credentials error. What do you check?
  • What happens to a DirectQuery report if the gateway machine goes down?
Say it in 60 seconds

Security 2 questions

Medium Coding round Mid-level Practice question

20. How would you set up row-level security so each regional manager sees only their own region, without one role per region?

What the interviewer is really testing:
Whether you can build dynamic RLS that scales, test it properly, and know who it does not apply to.
Answer frame:

Mapping table: a security table of user email and allowed region, maintained by the business.

Role: one role whose DAX filter on the region table keeps regions listed for USERPRINCIPALNAME().

Assign: add users or a security group to the role on the semantic model in the Service.

Test: View as in Desktop and the Service; remember workspace editors are not restricted.

Sample spoken answer:

"I'd use dynamic RLS. First a security table with two columns: the user's sign-in email and a region they may see. A manager covering two regions just gets two rows. Then I create one role in Desktop with a DAX filter on the region dimension: keep a region only if it appears in the security table for the email that USERPRINCIPALNAME returns, which is the signed-in user. Because the region table filters the sales facts, each manager sees only their numbers. After publishing, I add the managers, ideally as a security group, to that role on the semantic model. A new manager then means a new row, not a new role. I test with View as, choosing the role and typing another user's email, in Desktop and in the Service. One thing people miss: RLS only restricts people with viewer access. Workspace admins, members and contributors see everything, so managers get an app or viewer access, never edit rights."

Code:
-- Role filter on the Region table (UserRegion has no relationships)
Region[Region]
    IN CALCULATETABLE (
        VALUES ( UserRegion[Region] ),
        UserRegion[UserEmail] = USERPRINCIPALNAME ()
    )
Red flag to avoid:

Creating one static role per region, or testing RLS only while signed in as the report author.

They may ask next:
  • A manager says they see nothing at all after publishing. What are the usual causes?
  • How would you hide a sensitive column entirely, not just rows?
  • What does the option to apply the security filter in both directions do?
Say it in 60 seconds
Medium Situational round Mid-level, Senior Practice question

21. A senior manager wants a report shared with a large mailing list today, but the model holds salary data and RLS isn't tested yet. What do you do?

What the interviewer is really testing:
Whether you protect sensitive data under deadline pressure while still helping the person get what they need.
Answer frame:

Pause: don't share a model with salary data before its security is tested, whatever the deadline.

Offer: a safe version today, such as a report built without the sensitive columns or with totals only.

Fix properly: test roles as real users, share through an app with viewer access, check edit rights.

Tell: explain the risk in one sentence and give a clear time for the full version.

Sample spoken answer:

"I'd say yes to the goal and no to sharing it today as it is. Once salary data reaches a large list it can't be taken back, and untested RLS is exactly how that happens. So I'd explain that in one sentence and offer something for today: a version of the report on a model without the salary columns, or with only totals, which is usually what a wide audience needs anyway. Then I'd do the proper job. I'd test the roles with View as for a few real users from different teams, check that nobody on the list has edit rights in the workspace, since RLS doesn't restrict them, and share through an app with viewer access. If individual salaries shouldn't be visible to that audience at all, I'd take them out of the shared model or use object-level security. And I'd give the manager a specific time for the full version, so it doesn't feel like a brush-off."

Red flag to avoid:

Sharing it anyway because a senior person asked, or refusing without offering any way forward.

They may ask next:
  • The manager says their director has already promised it to the list. What now?
  • How would you check afterwards exactly who has access to the semantic model?
Say it in 60 seconds

Performance 3 questions

Medium Technical round Mid-level, Senior Practice question

22. Users say one report page takes a long time to load. Walk me through how you would find the cause.

What the interviewer is really testing:
Whether you measure before changing things, and know the tools that split the time between query, visual and model.
Answer frame:

Measure: Performance Analyzer in Desktop shows each visual's time split into DAX query, visual display and other.

Dig: copy a slow query into DAX Studio and use server timings to see where the engine spends time.

Model: check column sizes and cardinality with VertiPaq Analyzer.

Page: count visuals, big table visuals and slicers on high-cardinality columns.

Sample spoken answer:

"I don't guess, I measure. I open the report in Desktop, start Performance Analyzer and refresh the visuals. It shows each visual's time split into the DAX query, the visual display, and other, which is mostly waiting for other visuals to finish. If one visual's DAX query is slow, I copy it into DAX Studio, turn on server timings and see whether the time is in the storage engine, which scans the data, or the formula engine, which usually points at an iterator or a complex measure. If lots of visuals are each a bit slow, the problem is often the page itself: twenty visuals querying at once, a table visual with thousands of rows, or slicers on columns with huge numbers of values. Then I check the model with VertiPaq Analyzer for oversized columns and bi-directional relationships. And I confirm the storage mode, because in DirectQuery the slow part may be the source database."

Red flag to avoid:

Jumping straight to buying more capacity, or rewriting measures without measuring first.

They may ask next:
  • Most of the time is in 'Other'. What does that tell you?
  • How would you rewrite a measure that uses FILTER over the whole fact table?
Say it in 60 seconds
Hard Technical round Mid-level, Senior Practice question

23. Your import model has grown to several gigabytes and refresh keeps failing. How would you make it smaller?

What the interviewer is really testing:
Whether you know what the storage engine actually pays for, which is mostly columns and their number of distinct values, not rows.
Answer frame:

Columns first: remove every column no report uses, especially unique IDs and free text.

Cardinality: split datetime into date and time, round decimals, use integer keys.

Habits: turn off auto date/time, move calculated columns to Power Query or the source.

Grain and history: summarise if detail is never used, keep only needed history, then incremental refresh.

Sample spoken answer:

"Size in the import engine is driven mostly by columns and how many distinct values each holds, so that's where I start. I run VertiPaq Analyzer to list the biggest columns. The top offenders are usually things nobody reports on: transaction GUIDs, free-text comments, a datetime with seconds. I remove what isn't used. For the rest I cut cardinality: split datetime into a date column and a time column, or drop the time if nobody needs it, round amounts to the precision people use, and make relationship keys integers. I turn off auto date/time, which builds a hidden date table for every date column. Calculated columns move to Power Query or the source. Then I question grain and history. If people only look at daily totals per store, a daily summary can replace millions of receipt rows, and if nobody looks past three years, I don't load ten. Finally, incremental refresh so each refresh only reloads recent data."

Red flag to avoid:

Removing rows at random or moving to bigger capacity without first finding which columns are big.

They may ask next:
  • Why does a column of unique transaction IDs cost far more than a column of store names?
  • How does incremental refresh decide which rows to reload, and what does it need from the query?
Say it in 60 seconds
Hard Behavioral round Mid-level, Senior Practice question

24. Describe a Power BI model you inherited or built that became slow or hard to maintain. What did you change?

What the interviewer is really testing:
Whether you have handled a model at real scale and can explain the trade-offs you made, not just recite best practices.
Answer frame:

Before: what the model looked like and how the pain showed up for users.

Diagnosis: what you measured and what it pointed to.

Changes: the two or three changes that mattered most, and why in that order.

After: the result in load time, refresh time or upkeep, and what you'd still improve.

Sample spoken answer:

"I inherited a finance model that took about an hour to refresh, and some pages took well over ten seconds to load. It was one giant flat table joined in Power Query from five sources, plus dozens of calculated columns and several bi-directional relationships added to make slicers behave. I ran VertiPaq Analyzer and Performance Analyzer first. Most of the size was two columns: a transaction ID nobody reported on and a datetime with seconds. The slow visuals were measures using FILTER over the whole table. I rebuilt it as a star schema, moved the calculated columns into the SQL views, dropped the unused columns, made every relationship single direction, and rewrote the slowest measures to filter columns instead of tables. Refresh fell to a few minutes and the worst page loaded in about two seconds. I also wrote a short model guide, because the real problem was five people each adding their own fix."

Red flag to avoid:

A story with no measurement, or a list of best practices with no clear account of what changed and why.

They may ask next:
  • How did you prove the rebuilt model gave the same numbers as the old one?
  • What would you have done differently with only one week?
Say it in 60 seconds

Visuals & Design 4 questions

Easy Technical round Fresher, Mid-level Practice question

25. How do you decide which visual to use, say between a line chart, a bar chart, a pie chart and a table?

What the interviewer is really testing:
Whether you pick visuals for the question the reader is asking, not for decoration.
Answer frame:

Question first: trend, comparison, part of a whole, relationship or exact detail.

Match: line for change over time, bar for categories, card for one key number, scatter for relationships, matrix for detail.

Avoid: pies with many slices, 3D effects, gauges with no clear target.

Sample spoken answer:

"I start with the question the reader is trying to answer, not the visual. If they want to know how something changed over time, it's a line chart with dates along the bottom. If they're comparing categories, like sales by region, it's a bar chart, sorted so the biggest is on top. For one number that matters, like this month's sales against target, a card or KPI visual. A scatter chart for relationships, like discount against margin by product. Tables and matrices when people need exact figures or want to look up a specific item. Pie and donut charts I only use for two or three parts of a whole, because people can't compare angles well once there are more slices. I avoid 3D and heavy colour, and I use colour to highlight, like the one region below target in red, rather than giving every bar its own colour."

Red flag to avoid:

Choosing a visual because it looks impressive, or having no reason beyond habit.

They may ask next:
  • A manager insists on a pie chart with twelve slices. What do you do?
  • When is a map visual a good choice, and when is it a poor one?
Say it in 60 seconds
Hard Case round Mid-level, Senior Practice question

26. A sales director asks for a dashboard to run the weekly sales meeting. Walk me through how you'd go from that request to a published report.

What the interviewer is really testing:
Whether you can run a small BI project end to end, from questions and definitions to model, design, security and adoption, not just build nice visuals.
Answer frame:

Questions: what the meeting decides, which few numbers drive it, and written definitions.

Data and model: sources, a star schema with a date table, a small set of tested measures reconciled to finance.

Design: a summary page with key numbers against target and last year, then drill-through pages.

Ship: RLS if regions differ, refresh before the meeting, an app, and a review after a few meetings.

Sample spoken answer:

"I'd start by sitting in on the meeting, or asking what gets decided there. Usually it's: are we on target this week, which regions or products are behind, and why. That gives me a short list of measures, like sales, target, gap to target, last year and open pipeline, and I'd get each one defined in writing, including what counts as a sale and which date we use. Then I check the sources, build a star schema with a proper date table, and reconcile my totals with finance before any design work. The first page answers the headline question in five seconds: a few cards against target, a trend line with last year, and a bar chart of regions sorted by gap. Drill-through pages give detail per region or product. If regional managers use it too, I add RLS. I publish through an app, schedule refresh before the meeting, and after a few meetings I ask what they actually looked at and cut the rest."

Red flag to avoid:

Opening Desktop and building visuals before asking what decisions the dashboard supports or how the numbers are defined.

They may ask next:
  • Two regional heads want the same page to show different targets. How do you handle it?
  • A month later, how would you know whether the dashboard is actually being used?
Say it in 60 seconds
Medium Behavioral round Mid-level Practice question

27. Tell me about a Power BI report you built that people didn't use at first. What did you do about it?

What the interviewer is really testing:
Whether you care that the report gets used and can learn from users, rather than shipping and moving on.
Answer frame:

Signal: how you knew, such as low usage numbers or people still asking for spreadsheets.

Find out: watch or ask a few users what they were trying to do.

Change: what you cut, moved or added.

Result: what changed in usage, and the habit you kept.

Sample spoken answer:

"In my last role I built an inventory report for store managers that I was proud of: six pages and lots of slicers. A month later the usage report showed only a handful of views, and managers were still emailing the stock team for spreadsheets. So I sat with two managers and watched them try it. They wanted one thing every morning: what's about to run out in my store. That answer was on page four, behind two slicers. I rebuilt the first page around it: their store applied automatically through RLS, a short table of items below reorder level sorted by days of stock left, and an export button. Everything else moved to detail pages. Within a few weeks most managers opened it before the morning stock call, and the spreadsheet requests stopped. Since then I build the first page around one question and watch someone use it before I call it done."

Red flag to avoid:

Blaming users for not understanding the report.

They may ask next:
  • Where did you find the usage numbers, and what didn't they tell you?
  • How do you decide what goes on the first page and what goes on a detail page?
Say it in 60 seconds
Medium Situational round Mid-level Practice question

28. An executive asks you to fit about twenty-five visuals on one report page so they never have to click. How do you respond?

What the interviewer is really testing:
Whether you can push back on a design request politely, with reasons and an alternative, rather than refuse or silently comply.
Answer frame:

Understand: ask what they need at a glance and what bothers them about clicking.

Explain: a crowded page is hard to read and slow, because each visual runs its own query.

Offer: a focused summary with the key numbers, plus tooltips and drill-through for detail.

Test: build a quick version, let them use it in a real meeting, and adjust.

Sample spoken answer:

"I'd start by asking what they want to see at a glance and what annoys them about clicking. Often the real complaint is that they had to hunt through tabs to find something. Then I'd explain the trade-off plainly: twenty-five visuals on one page means small, hard-to-read charts, and every visual sends its own query, so the page loads slower, which they'd notice too. What I'd offer is a summary page with the handful of numbers they check every time, each against target or last year, with tooltips that show detail on hover, so most answers need no click at all. For the rest, drill-through from any region or product to a detail page. I'd build a quick version, let them use it in their next review, and adjust. If they still want more on the page after that, I'd add what they actually missed, not all twenty-five."

Red flag to avoid:

Building exactly what was asked without a word, or refusing flatly because it's bad practice.

They may ask next:
  • They try it and still want everything on one page. What then?
  • How would report page tooltips help in this situation?
Say it in 60 seconds

Stakeholders 2 questions

Medium Behavioral round Mid-level, Senior Practice question

29. Tell me about a time your Power BI report's numbers didn't match what finance or another system showed. How did you track it down?

What the interviewer is really testing:
Whether you reconcile methodically and communicate while doing it, because trust in the numbers is the whole job.
Answer frame:

Situation: which number, roughly how far off, and who noticed.

Trace: narrow it by date, region or product until the gap sits in one place.

Cause: a definition, a relationship, a filter or a data issue, named precisely.

Result: the fix, how you told people, and the check you added so it doesn't come back.

Sample spoken answer:

"At my last company, the sales director's report showed monthly revenue a little higher than finance's figure, and finance's number was the one the board saw. I didn't argue about which was right. I exported both totals by day for the month and put them side by side, and the whole gap sat on a handful of days. Drilling into those days, it was orders that had been cancelled and re-entered. Finance excluded cancelled orders, and my measure didn't filter on status. So the difference was a definition, not a bug. I agreed with the finance lead that revenue means invoiced and not cancelled, changed the measure, wrote that definition into the measure's description, and added a small reconciliation page showing our total next to the ledger total for each month. After that, when someone questioned a figure, the answer was already on the page."

Red flag to avoid:

A story where the fix was tweaking the measure until it matched, without knowing why it differed.

They may ask next:
  • How did you explain the change to the sales director whose number went down?
  • What would you have done if the cause was bad data in a source system you don't own?
Say it in 60 seconds
Hard Situational round Mid-level, Senior Practice question

30. Sales and finance define revenue differently, and both want your dashboard to use their version. What do you do?

What the interviewer is really testing:
Whether you can handle a metric definition conflict without quietly picking a side or creating two versions of the truth.
Answer frame:

Understand: write both definitions down exactly; often both are valid for different questions.

Name: give each measure a precise name, like booked sales and recognised revenue, with descriptions.

Decide: have the dashboard sponsor or metric owner choose the headline number.

Record: keep the agreed measures in a shared semantic model that other reports reuse.

Sample spoken answer:

"I wouldn't pick one quietly, and I wouldn't let one word mean two things on the same page. First I'd write both definitions down exactly. Usually sales means booked orders on the order date, and finance means invoiced revenue, net of returns, on the invoice date. Both are legitimate; they answer different questions. So I'd build both measures with names that say what they are, like booked sales and recognised revenue, and put the definition in each measure's description. Then I'd take it to whoever sponsors the dashboard, with one concrete example of why the numbers differ, and ask which one is the headline figure. The other can sit beside it or on a detail page. Once it's agreed, I'd keep those measures in a shared semantic model, so the next report reuses them instead of restarting the argument."

Red flag to avoid:

Siding with whoever is more senior without writing the definitions down, or labelling both numbers just 'Revenue'.

They may ask next:
  • The sponsor won't decide and the meeting is tomorrow. What goes on the page?
  • How would you stop other analysts building their own version of revenue in their own files?
Say it in 60 seconds
Were you asked something else? Share it A person checks every question before it goes on the site. No name is shown.
For the call itself

The questions above are the prep. The call has ten more.

ClapAssist is an AI interview assistant for Mac and Windows. It listens to the interview on your computer and shows you what to say, in short lines you can read while you talk. Your resume and notes are never stored on our servers. It stays out of screen share on every plan; only you can see it.

Download ClapAssist with 10 free minutes
Mac and Windows · Stays out of screen share · No card