Top Power BI Interview Questions & Answers (2026)
17 questions Power BI Developer interviewers actually ask, with the strong answer, the weak one, and the follow-up that comes next.
- Power BI DevRole
- $90K-$135KTypical US pay
- 3-4 roundsInterview loop
- Nice to haveCert in hiring
- UsuallyHands-on test

Table of Contents
Power BI roles sit everywhere: finance and operations teams inside ordinary companies, Microsoft partners and consultancies, and central BI or data platform teams that now run on Microsoft Fabric. The title varies (Power BI developer, BI analyst, reporting analyst, analytics engineer) but the interview is remarkably consistent. Expect a recruiter screen, a technical conversation that lives or dies on DAX and modelling, a hands-on build or take-home with a messy dataset, and a stakeholder round where you explain a number to someone who does not care about filter context.
PL-300 helps you clear the keyword filter and signals you know the whole product, from Power Query to RLS and workspace apps. It does not prove you can debug a slow model or push back on a bad requirement. Interviewers in 2026 test exactly that, so treat the cert as the ticket in and your model-building judgement as the actual interview.
What the Power BI Developer interview loop looks like
Most Power BI Developer / Data Analyst hiring runs 4 rounds. Each one is testing something different, so prepare for each separately.
The 17 questions, with answers
Each card shows the question as it is usually asked, what the interviewer is really checking, a strong answer, the weak answer they hear most often, and the follow-up that comes next. Say the strong answers in your own words — a memorised script sounds memorised.
- Basic · 4
- Core · 5
- Advanced · 3
- Scenario · 3
- Behavioural · 2
What is a star schema and why do Power BI developers keep insisting on it?
What they are testing: Whether you model before you visualise, and know why VertiPaq and DAX favour stars
A star schema separates facts, the events you measure like sales lines, from dimensions, the things you slice by like product, customer and date. Facts sit in the middle with one-to-many relationships out to each dimension. Power BI likes it because filters flow cleanly from the one side to the many side, DAX measures stay simple, and the engine compresses narrow fact tables with low-cardinality keys very well. A single flat table seems easier until you need two facts at different grains, or a slicer that should filter both. Then you end up with bidirectional filters and convoluted measures. So I shape data into facts and dimensions in Power Query or upstream before I write any DAX.
Calculated column versus measure: when would you use each?
What they are testing: Row context vs query-time evaluation and the memory cost of columns
A calculated column is computed row by row at refresh and stored in the model, so it costs memory and is fixed regardless of what the user selects. I use one when I need the value to slice, filter or group by, like a price band or an age bucket, and ideally I push that into Power Query or the source instead. A measure is evaluated at query time in the current filter context, so it responds to slicers and visuals and stores nothing. Anything that aggregates, like total sales, margin percent or year-to-date, should be a measure. The common mistake is a calculated column for margin percent, which then sums wrongly in a total row.
Import, DirectQuery or Direct Lake: how do you decide which storage mode a table should use?
What they are testing: Trade-offs between freshness, performance, licensing and source load
Import copies data into the VertiPaq engine, so it is fastest and supports everything, but data is only as fresh as the last refresh and the model size counts against limits. DirectQuery sends every visual query to the source, which gives near real-time data but makes performance depend on that source, and some DAX and modelling features are restricted. Direct Lake is the Fabric option: it reads Delta tables in OneLake straight into VertiPaq, so you get import-like speed and a refresh that is only a metadata reframe. It needs a Fabric capacity and the data prepared upstream in a lakehouse or warehouse. My default is Import unless volume or latency forces otherwise; if we are on Fabric with gold tables already in OneLake, Direct Lake.
What does query folding mean in Power Query and why should I care?
What they are testing: Whether you know which transforms push down to the source and how to check
Query folding is Power Query translating your applied steps into a single native query, usually SQL, so the source does the filtering and joining instead of the mashup engine pulling every row first. It matters for refresh speed, gateway load and especially incremental refresh, which relies on the date filter folding so each partition only fetches its own range. I check it by right-clicking a step and looking for View Native Query, or the step folding indicators in Power Query Online. Steps like filtering, removing columns and simple merges usually fold against SQL sources; adding an index column or certain custom M functions often break it, so I put those as late as possible.
Explain filter context versus row context, and what context transition is.
What they are testing: The single concept that separates people who write DAX from people who copy it
Row context exists when DAX iterates a table row by row, in a calculated column or inside an iterator like SUMX; it lets you reference the current row's values but does not filter anything by itself. Filter context is the set of filters active when a measure is evaluated: slicers, visual axes, page filters, and anything CALCULATE adds. Context transition is what happens when CALCULATE runs inside a row context: it turns the current row into an equivalent filter context. That is why a measure referenced inside SUMX over Customers gives a per-customer value, because every measure reference is implicitly wrapped in CALCULATE. It is powerful but it can be slow over large tables and surprising when the table has duplicate rows.
Walk me through what CALCULATE actually does with its filter arguments.
What they are testing: Whether you know CALCULATE overrides or adds filters, plus KEEPFILTERS, REMOVEFILTERS, ALL
CALCULATE evaluates an expression in a modified filter context. It takes the existing filters, performs context transition if there is a row context, then applies each filter argument. A simple predicate like Product[Color] = "Red" replaces any existing filter on that column, it does not intersect with it, so if the user sliced to Blue you still get Red. If I want intersection, I wrap it in KEEPFILTERS. Modifiers like REMOVEFILTERS or ALL clear filters, which is how I build percent-of-total: sales divided by CALCULATE of sales with REMOVEFILTERS on the product table. USERELATIONSHIP activates an inactive relationship, which I use for ship date versus order date. I always test edge cases in a matrix with totals turned on.
How do you handle relationship direction? When would you ever turn on bidirectional filtering?
What they are testing: Understanding of ambiguity, performance, and safer alternatives to both-direction filters
My default is single direction, from the one side to the many side, dimension to fact. Bidirectional filtering lets a fact table filter a dimension, which sounds handy but creates ambiguous paths once you have two facts sharing dimensions, can hurt performance, and interacts badly with RLS. The legitimate cases are narrow: a bridge table in a many-to-many pattern, or a slicer that should only show products with sales. Even then I prefer scoping it inside one measure with CROSSFILTER, or filtering the slicer visual with a measure that is not blank, so the behaviour is explicit and does not leak into every other visual in the report.
How would you set up row-level security so regional managers only see their own region?
What they are testing: Dynamic RLS, USERPRINCIPALNAME, testing, and who RLS does not apply to
I would use dynamic RLS rather than one role per region. I add a security table mapping user email to region, relate it to the Region dimension, and create one role with a DAX filter on the security table like [Email] = USERPRINCIPALNAME(). The filter flows from security table to Region to the fact. I test with View as role in Desktop and with test users in the service, then assign the role to an Entra ID security group rather than individuals. Two things people miss: RLS only restricts users with Viewer permissions, so workspace Admins, Members and Contributors see everything; and the role needs at least one member, or a Viewer who is in no role sees no data.
How do you set up incremental refresh, and what are the gotchas?
What they are testing: RangeStart/RangeEnd parameters, folding, policy settings and what happens after publishing
I create two datetime parameters named exactly RangeStart and RangeEnd, filter the fact table's date column with one inclusive and one exclusive boundary so rows are not duplicated, then define the policy: for example store five years, refresh the last ten days. After publishing, the service creates partitions and the first refresh loads the full history, which can be long. Gotchas: the filter must fold to the source or every partition reads the whole table; the policy only applies in the service, Desktop just loads the filtered sample; and once published you cannot download the PBIX back, and republishing from Desktop wipes the partitions, so later schema changes go through XMLA tools. I also use detect data changes when a reliable last-updated column exists.
A report page takes 15 seconds to load. Walk me through how you find and fix the cause.
What they are testing: A real diagnostic sequence rather than random tweaks
First I open Performance Analyzer and record the page so I can see, per visual, how much time is DAX query versus visual rendering. If one visual dominates and it is DAX time, I copy the query into DAX query view or DAX Studio and check server timings, looking for formula engine heavy plans, often from iterators over big tables or complex filters on columns instead of tables. If it is rendering, the page probably has too many visuals or a table with thousands of rows. Fixes in order: reduce visuals, rewrite the measure using variables and simpler filters, remove unused high-cardinality columns, and check for bidirectional or many-to-many relationships. I measure again after each change so I know which one worked.
What are calculation groups and when are they worth the complexity?
What they are testing: Whether you can reduce measure sprawl without confusing report authors
A calculation group is a set of calculation items that apply a pattern to whichever measure is in context, using SELECTEDMEASURE. The classic case is time intelligence: instead of writing Sales YTD, Margin YTD, Units YTD and so on for every base measure, I write YTD, prior year and year-over-year once as items and they work on any measure. They are worth it when you have many base measures needing the same variations. The cost is that they change how measures behave, they can surprise report authors, and format strings need dynamic handling. You can now create them directly in Power BI Desktop. I document them and keep the set small so the model stays understandable.
Your team is moving to Microsoft Fabric. What changes for you as a Power BI developer?
What they are testing: Awareness of OneLake, Direct Lake, lakehouse vs warehouse, and where transforms should live
The biggest shift is where data prep lives. Instead of every semantic model doing its own Power Query transforms, the data lands in OneLake as Delta tables through pipelines, Dataflow Gen2 or notebooks, typically in a bronze, silver, gold pattern. My semantic model then sits on the gold layer, often in Direct Lake mode, so refresh becomes a quick reframe instead of a full import. I need to understand Delta table health, because too many small files or row groups can hit Direct Lake guardrails. Capacity also matters more: everything draws from the same Fabric capacity units, so a heavy report and a heavy notebook compete. My DAX and modelling skills carry over completely.
Finance says your revenue number does not match their Excel file. What do you do?
What they are testing: Reconciliation discipline and stakeholder handling under pressure
I do not defend the report first, I reconcile. I ask for their file and the exact filter they are looking at: period, entity, currency, and whether it is booked or invoiced revenue. Then I break both numbers down to the same grain, usually by month and account, and find where they diverge. Usually it is a definition difference, like credit notes, intercompany or a date column mismatch, or a data issue like late postings after our refresh. Once found, I explain it in their language, fix the measure if we are wrong, and if it is a definition gap I get finance and the business owner to agree one definition and document it in the measure description.
A sales director wants a dashboard with 25 visuals on one page by Friday. How do you respond?
What they are testing: Requirements gathering, design judgement, and saying no constructively
I would ask what decisions they make with it and how often. Usually 25 visuals means several audiences or questions rolled into one request. I would propose a summary page with four or five KPIs and trends answering the director's main questions, then drillthrough pages for region, product and rep detail, with bookmarks or a navigator so it still feels like one report. That loads faster and is easier to read. For Friday, I would commit to the summary page with correct numbers and the most-used drillthrough, show it, then iterate. I would sketch it with them before building, because changing a sketch is cheaper than changing a published report.
Your scheduled refresh failed overnight and the CEO's meeting is at 9am. Talk me through the next hour.
What they are testing: Calm triage: gateway, credentials, source, capacity; and communication
First I check the refresh history in the semantic model settings for the actual error. The usual suspects are expired credentials or an OAuth token, the on-premises gateway being offline or out of date, a source schema change like a renamed column, a timeout, or capacity throttling. If it is credentials or the gateway, I fix it and trigger a manual refresh. If it is a schema change, I patch the query, republish, and refresh. While that runs, I tell the meeting owner whether the numbers will be current and as of when, so nobody presents stale data unknowingly. Afterwards I set up refresh failure notifications to a group and write up the cause.
Tell me about a time a stakeholder disagreed with what your data showed.
What they are testing: Whether you hold your ground on facts while staying collaborative
Template, fill it with your own story. Situation: a regional manager insisted their region's churn was lower than my report showed. Task: I needed to either find my error or convince them, without damaging the relationship. Action: I walked through the measure with them, filtered to their customers, and exported the list behind the number. We found they counted reactivated customers as retained while the agreed definition did not. I showed the documented definition and offered a second measure for reactivation. Result: they accepted the number, the reactivation view became a standard page, and they started bringing questions to me early. Keep it to about two minutes and quantify the result.
Describe a report or model you built that you would do differently today.
What they are testing: Self-awareness and growth in modelling and design judgement
Template, fill it with your own story. Situation: early on I built a sales report on one wide flat table imported from a SQL view. Task: it had to support new metrics and a budget comparison. Action: as requirements grew I added calculated columns and bidirectional relationships to make budgets work, and refresh and page load slowed badly. I eventually rebuilt it as a star schema with a shared date and product dimension and moved transforms upstream. Result: model size dropped noticeably, measures got simpler, and adding new metrics took hours instead of days. Today I would model properly from day one. Pick a real story and give real before and after figures.
Get the theory airtight before the interview
Interviewers build follow-ups on the fundamentals. The PL-300 app has exam-style PL-300 questions with an explanation for every option, so the basics stay automatic when the questions get harder.
App StoreGoogle PlayFree PL-300 practice testThe practical task
Expect some version of this. Companies vary the details, not the shape.
You get three CSV exports: sales lines with mixed date formats, a product list with duplicate SKUs, and a monthly budget by category. Build a Power BI model and one report page showing revenue, margin percent, year-over-year growth and actual versus budget, filterable by region and category. Include one RLS role so a regional manager sees only their region. Send the PBIX plus a short note explaining your modelling decisions and anything you could not resolve.
- Profile each file in Power Query: fix types and locale, trim text, dedupe SKUs and record what you removed and why.
- Build a star schema: sales fact, product, region and a proper marked date table; relate budget at month and category grain.
- Write base measures first, then margin percent with DIVIDE, YoY with SAMEPERIODLASTYEAR, and budget variance.
- Check totals and edge cases in a matrix before building visuals; verify one number by hand against the raw CSV.
- Lay out KPIs, a trend and one breakdown; add a dynamic RLS role and test it with View as role.
- Write a half-page note: assumptions, data issues found, and what you would do next with more time.
Hire vs no-hire:A hire models the budget at its own grain against shared dimensions, gets totals right and documents assumptions. A no-hire forces everything into one flat table and ships a busy page with wrong subtotals.
Questions to ask them
"Do you have any questions for us?" is still being scored. Four that land well for a Power BI Developer role:
Mistakes that sink candidates
What the PL-300 does and does not prove
What the PL-300 gets you
PL-300 is the certification that appears most often in Power BI job postings, and consultancies and Microsoft partners like to list certified staff in bids. It reliably gets you past keyword filters and gives a recruiter confidence you have touched every part of the product. For career switchers with little on-the-job Power BI history, it is a credible signal that you put in the work.
What it does not prove
The exam is multiple choice and case studies, so it cannot show that you can design a model from scratch, debug a slow page, reconcile numbers with finance, or push back on a messy requirement. Interviewers test those hard, usually with a live build or take-home. A portfolio report with a clean model and a short write-up fills that gap better than a second certificate.
Pay:Range brackets Salary.com's 2026 junior Power BI developer median (about $91K) and Glassdoor's US Power BI developer estimate (about $133K), with ZipRecruiter's June 2026 average near $112K. BLS tracks no Power BI title. Fabric and data-engineering skills, consulting roles and high-cost cities push pay up.
Still sitting the PL-300?
Pass it first time and walk into the interview with the credential on your CV. The PL-300 app has exam-style PL-300 questions with an explanation for every option.
App StoreGoogle PlayFree PL-300 practice testFAQ
Is PL-300 enough to get a Power BI job with no experience?
On its own, rarely. It gets your CV past filters, but hiring managers want proof you can build. Pair the cert with two or three portfolio reports on public data, each with a clean star schema, sensible measures and a short note on your decisions. Internal moves work well too: volunteering to automate a reporting spreadsheet in your current job is often the fastest route to a first Power BI title.
How hard are DAX questions in Power BI interviews?
Expect to explain filter context versus row context, what CALCULATE does with its filter arguments, and to write two or three measures live: a ratio with DIVIDE, a year-over-year comparison, and maybe a ranking or percent-of-total. Senior roles add performance questions and calculation groups. Interviewers care more about you reasoning out loud about context than about remembering every function signature.
Do Power BI interviews include a take-home test?
Many do. Common formats are a 60 to 90 minute live build with a provided dataset or a take-home of two to four hours. You will usually be asked to clean data, build a model, write measures and produce a page or two. Graders look at your model and the correctness of totals before they look at colours, so spend your time accordingly.
Should I learn Microsoft Fabric before a Power BI interview in 2026?
Learn enough to discuss it sensibly: OneLake, lakehouse versus warehouse, Dataflow Gen2, and Direct Lake storage mode. Many employers are migrating or evaluating, and being able to say where transforms should live and when Direct Lake beats Import marks you as current. You do not need to be a Spark engineer for an analyst role, but you should not be surprised by the vocabulary.
What portfolio projects impress Power BI hiring managers?
Projects that look like real work: messy source data, a documented model, measures that reconcile, and a report designed for a named audience. A short README explaining your decisions, a screenshot of the model view, and a note on performance choices tell more than a beautiful dashboard. One solid project beats five template-driven ones built from the same tutorial dataset.
Sources
Figures on this page come from Microsoft and the other primary sources below:
- Microsoft Certified: Power BI Data Analyst Associate (Microsoft Learn)
- Study guide for Exam PL-300 (Microsoft Learn)
- Power BI developer salaries (Glassdoor)
- Power BI developer salary (ZipRecruiter)
- Junior Power BI developer salary (Salary.com)
- Data scientists, Occupational Outlook Handbook (BLS)
- Direct Lake overview (Microsoft Learn)
- Row-level security with Power BI (Microsoft Learn)
- Incremental refresh and real-time data for semantic models (Microsoft Learn)
Checked November 4, 2026. Fees, outlines and eligibility rules change — confirm with Microsoft before you book.
