Key takeaways
- Power BI rounds cover what Microsoft’s PL-300 exam weights: preparing data 25–30%, modelling 25–30%, visualising 25–30%, and managing and securing 15–20% (skills as of 20 April 2026).1
- Master CALCULATE first: it evaluates an expression in a modified filter context, and in a row context it turns the current row into a filter (context transition).2
- Semantic models on shared (Pro) capacity get 8 scheduled refreshes a day; on Premium, Premium Per User or Fabric capacity, 48.3
- Row-level security restricts only Viewer permissions: workspace Admins, Members and Contributors see every row.4
- PL-300’s skills list includes Direct Lake, visual calculations and Copilot, and Copilot needs a paid Fabric (F2 or higher) or Premium (P1 or higher) capacity.15
What Power BI rounds test
A Power BI round tests whether your model, measures and report can be trusted: concepts, live DAX, a scenario (“the total breaks with a slicer”) and your own project. Most rounds add SQL.
| Company type | What the rounds look like | Start with |
|---|---|---|
| IT services and consulting | Two technical rounds, then HR: concepts and SQL, then scenarios and your project | 1–12, 19–22, 27, 28, 40 |
| GCCs | DAX with SQL and a cloud platform (Azure, Databricks, Snowflake); some ask for Fabric | 13–15, 20, 29–33 |
| BFSI | Posts we read stress RLS and governance; balances, joint accounts | 22, 31, 34, 37 |
| Product companies | Strong SQL in every post we read; DAX logic, metrics | 13, 17, 18, 24, 30 |
| Startups | Few reports; be ready to model and present a dataset | 36, 40 |
From candidates’ published interview reports (2024–2026, mostly IT services) and Power BI job posts on LinkedIn India, read 22 Oct 2026.
Say a measure’s filter context aloud before you write it. For SQL, use our SQL interview questions.
The example model
Every answer uses one star schema: an Indian retailer’s sales by store, with an April–March financial year. Use any data with these columns, or Microsoft’s similar Adventure Works DW 2020 sample model.
| Table | Columns, and what one row is |
|---|---|
| Sales | OrderID, OrderDate, ShipDate, CustomerID, ProductKey, StoreKey, EmployeeID, Quantity, UnitPrice, SalesAmountOne order line, in ₹ |
| Product | ProductKey, Product, CategoryOne product |
| Store | StoreKey, Store, City, RegionOne store |
| Date | Date, Month, Month Start, FY, FY Month No, FY QuarterOne day; marked as the date table |
| Stock | Date, ProductKey, StoreKey, UnitsClosing stock: one product, store and day |
| Employee | EmployeeID, Name, ManagerID, EmailOne employee, with their manager |
| UserRegion | Email, RegionThe regions each user may see; no relationships |
Sales relates to Date on OrderDate (active) and ShipDate (inactive), and to Product, Store and Employee; Stock to Date, Product and Store. All one-to-many, single direction:
Total Sales = SUM ( Sales[SalesAmount] )
Units Sold = SUM ( Sales[Quantity] )
Orders = DISTINCTCOUNT ( Sales[OrderID] )
-- A calculated table for an April–March financial year
Date =
ADDCOLUMNS (
CALENDAR ( DATE ( 2024, 4, 1 ), DATE ( 2027, 3, 31 ) ),
"Month", FORMAT ( [Date], "MMM YYYY" ),
"Month Start", DATE ( YEAR ( [Date] ), MONTH ( [Date] ), 1 ),
"FY",
VAR StartYear = YEAR ( [Date] ) - IF ( MONTH ( [Date] ) < 4, 1, 0 )
RETURN "FY " & StartYear & "-" & RIGHT ( StartYear + 1, 2 ), -- FY 2026-27
"FY Month No", MOD ( MONTH ( [Date] ) - 4, 12 ) + 1, -- April = 1, March = 12
"FY Quarter", "Q" & ROUNDUP ( ( MOD ( MONTH ( [Date] ) - 4, 12 ) + 1 ) / 3, 0 )
)
DAX’s MOD takes the sign of the divisor, so January gives MOD(−3, 12) = 9, and FY month 10.7 Sort Month by Month Start, or months sort alphabetically.
Easy: 12 questions
The basics every round assumes: answer each in under a minute.
1. Power BI Desktop, the service, reports and dashboards: what’s the difference?Easy
Desktop is the Windows app where you model data and build reports; the service is the cloud where you publish, share, refresh and secure them. A report has one or more pages on one semantic model (today’s name for a dataset). A dashboard is a single page of tiles pinned from reports; it lives only in the service and can’t be filtered.6
2. What is DAX, and where do you write it?Easy
DAX (Data Analysis Expressions) is the formula language of Power BI semantic models. You write it in measures, calculated columns, calculated tables, row-level security rules, visual calculations and DAX queries.
Total Sales = SUM ( Sales[SalesAmount] ) -- a measure
Line Value = Sales[Quantity] * Sales[UnitPrice] -- a calculated column, row by row3. Calculated column or measure?Easy
A calculated column is computed row by row at refresh and stored, so it costs memory: use it for what you slice or filter by. A measure is computed at query time for each cell and stores nothing: use it for anything you aggregate. On an axis or a slicer, a column; in Values, a measure.
Price Band = IF ( Sales[UnitPrice] >= 2000, "Premium", "Regular" ) -- column
Avg Selling Price = DIVIDE ( [Total Sales], [Units Sold] ) -- measure4. SUM or SUMX?Easy
SUM adds up one column. SUMX is an iterator: it evaluates an expression row by row, then adds the results. Multiplying two SUMs is the classic wrong answer.
Revenue = SUMX ( Sales, Sales[Quantity] * Sales[UnitPrice] ) -- right
Revenue Wrong = SUM ( Sales[Quantity] ) * SUM ( Sales[UnitPrice] ) -- wrong5. COUNT, COUNTA, COUNTROWS or DISTINCTCOUNT?Easy
COUNT counts non-blank numbers, dates and strings; COUNTA also counts TRUE/FALSE. COUNTROWS counts a table’s rows and is Microsoft’s pick for that. DISTINCTCOUNT counts distinct values, BLANK included, and its totals don’t add up: an order in two categories counts once in each and once overall.7
Order Lines = COUNTROWS ( Sales )
Customers = DISTINCTCOUNT ( Sales[CustomerID] )6. DIVIDE or the / operator?Easy
DIVIDE returns BLANK, or your alternate result, when the denominator is zero or BLANK. Microsoft recommends it whenever the denominator could be zero, and / for constants; blank results also drop out of visuals.7
Avg Order Value = DIVIDE ( [Total Sales], [Orders] ) -- BLANK for a store with no orders7. What is a star schema, and why not a snowflake?Easy
A star schema has fact tables (events you summarise: sales, stock) and dimension tables (what you filter by: date, product, store). A snowflake chains dimensions: Product → Subcategory → Category. Microsoft says one flattened table generally wins: fewer tables, shorter filter chains, and hierarchies can’t span tables.8
8. Explain cardinality and cross-filter directionEasy
Cardinality says which side holds unique values: one-to-many (the usual), one-to-one or many-to-many. Cross-filter direction says which way filters flow: Single, from the one side, or Both, which can slow queries and make paths ambiguous, so use it only where needed. Only one relationship between two tables can be active.9
9. What is Power Query, and should you merge or append?Easy
Power Query is Power BI’s data-preparation tool; each click becomes M code. Merge joins queries on matching columns, like a SQL join (left outer, right outer, full outer, inner, left anti, right anti); append stacks queries with the same columns, like UNION ALL. Append twelve monthly files; merge in each store’s region.10
10. Slicers or the Filters pane?Easy
Both filter data. A slicer sits on the page for readers to change; the Filters pane holds filters for one visual, one page or all pages. Slicers suit everyday choices (region, month); the pane suits fixed rules (leave out test stores).
11. Drill-down or drill-through?Easy
Drill-down moves down a hierarchy inside one visual: FY → quarter → month. Drill-through jumps to another page, filtered to what you right-clicked, such as one city’s detail page; add the field to that page’s drill-through well.
12. Which visual would you choose for each question?Easy
Give the reason, not the name: a line for a trend, sorted bars to compare categories, a stacked bar for parts of a whole, a scatter for two measures, a card for one number, a table for exact figures.
Medium: 16 questions
Filter context, CALCULATE, dates and the service: the core of most rounds.
13. Row context or filter context?Medium
Filter context is every filter on a calculation: slicers, the visual’s rows and columns, the Filters pane, CALCULATE’s filters. Row context is the current row, in calculated columns and iterators. It filters nothing by itself, so the first column below shows the grand total on every row:
-- Calculated columns in the Product table
Sales (wrong) = SUM ( Sales[SalesAmount] ) -- the grand total, every row
Sales (right) = CALCULATE ( SUM ( Sales[SalesAmount] ) ) -- each product's own sales14. What does CALCULATE do?Medium
It evaluates an expression in a modified filter context. A filter argument adds a filter if that column isn’t filtered yet and overwrites it if it is; KEEPFILTERS intersects instead. Arguments can be Boolean expressions, tables (often from FILTER) or modifiers: REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS, USERELATIONSHIP and CROSSFILTER.2
South Sales = CALCULATE ( [Total Sales], Store[Region] = "South" )
-- A slicer on West still shows South: the filter was overwritten
South Sales Kept = CALCULATE ( [Total Sales], KEEPFILTERS ( Store[Region] = "South" ) )
-- Now West shows blank: South and West is nothing15. ALL, ALLEXCEPT, ALLSELECTED or REMOVEFILTERS?Medium
REMOVEFILTERS (or ALL used as a filter) clears filters from columns or a table, whatever the slicers say. ALLEXCEPT clears every filter on a table except the columns you name. ALLSELECTED drops the visual’s own filters but keeps slicers, giving the visual’s total. When you only mean “remove filters”, Microsoft recommends REMOVEFILTERS.2
% of All Stores = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Store ) ) )
% of Visual Total = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Store ) ) )
Region Sales = CALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Region] ) ) -- on each store's row16. Why do you need a date table, and how do you mark it?Medium
Classic time intelligence needs a marked date table (Table tools → Mark as date table): unique dates, no blanks, no missing days. Build it with CALENDAR or Power Query, and turn off auto date/time.11 Microsoft now recommends calendar-based time intelligence (preview in October 2026): you tag columns as year, quarter, month or week, so fiscal and week calendars work.12
17. Year to date for India’s April–March financial yearMedium
TOTALYTD’s year end defaults to 31 December, so pass 31 March. The string follows the file’s locale: "3-31" in a US-locale file, "31-3" in a day-first one, so check one month by hand. A calendar needs no string.13
Sales FYTD = TOTALYTD ( [Total Sales], 'Date'[Date], "3-31" ) -- classic
Sales FYTD (calendar) = TOTALYTD ( [Total Sales], 'FY Calendar' ) -- calendar-based, preview18. Year-on-year growth: SAMEPERIODLASTYEAR or PREVIOUSYEAR?Medium
SAMEPERIODLASTYEAR shifts the dates in context back a year, like DATEADD(dates, -1, YEAR): October 2026 becomes October 2025. PREVIOUSYEAR returns all of last year, whatever month you’re on. Keep last year in a variable and use DIVIDE, so a new store shows blank, not an error.13
Sales LY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )
Sales YoY % =
VAR SalesLY = [Sales LY]
RETURN
DIVIDE ( [Total Sales] - SalesLY, SalesLY )19. Write a running totalMedium
Take the cell’s last date, clear the date filters and keep every date up to it (ALLSELECTED starts from the reader’s first selected date). The newer alternative, a visual calculation, runs DAX on the visual’s own data: simpler, but not reusable in other visuals, dashboards or exports.15
Running Sales =
VAR LastDateShown = MAX ( 'Date'[Date] )
RETURN
CALCULATE (
[Total Sales],
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= LastDateShown )
)
Running sum = RUNNINGSUM ( [Total Sales] ) -- the visual calculation20. Import, DirectQuery, Dual or Direct Lake?Medium
Often asked in IT-services rounds. A composite model mixes modes, table by table.1617
| Mode | How it works, and when to choose it |
|---|---|
| Import | A copy in memory, as fresh as the last refreshMost models: the fastest queries |
| DirectQuery | Data stays at the source; each visual queries itToo big to copy, or needed live |
| Dual | Import or DirectQuery, query by queryDimension tables beside DirectQuery facts |
| Direct Lake | Loads Delta tables from Fabric’s OneLake into memory; refresh copies only metadataBig Fabric lakehouses, on Fabric capacity |
Worth knowing: Direct Lake on SQL endpoints can fall back to DirectQuery (for SQL views); on OneLake it never does.
21. What is query folding, and why does it matter?Medium
Query folding is Power Query translating your steps into the source’s language, such as SQL, so the source does the work; CSV and Excel files don’t fold. Put filters, removed columns and joins first, and check with View Native Query where available. Incremental refresh depends on it.18
22. Set up row-level security, static and dynamicMedium
Write each role’s DAX filter in Desktop (Modeling → Manage roles), publish, add people or groups in the service, and check with Test as role. Static rules fix a value; dynamic ones use USERPRINCIPALNAME(). RLS restricts only Viewer permissions, roles add up, and it hides rows; object-level security hides columns.4
[Region] = "South" -- static role, filter on Store
Store[Region] -- dynamic role, filter on Store
IN CALCULATETABLE (
VALUES ( UserRegion[Region] ),
UserRegion[Email] = USERPRINCIPALNAME ()
)23. Two dates, one active relationship: report sales by ship dateMedium
Only one of Sales’ two date relationships can be active; ShipDate’s is inactive (dashed). USERELATIONSHIP switches it on inside CALCULATE for one measure. With row-level security on those tables it can error, so secured models use a separate Ship Date table.19
Sales by Ship Date =
CALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[ShipDate], 'Date'[Date] ) )24. Rank products by sales. What about ties?Medium
RANKX ranks the current value among an expression’s values over a table. Order defaults to descending; ties default to Skip (1, 2, 2, 4), and Dense gives 1, 2, 2, 3. Rank over ALLSELECTED to respect the slicers, and hide the meaningless rank on the total row.20
Product Rank =
IF (
ISINSCOPE ( 'Product'[Product] ),
RANKX ( ALLSELECTED ( 'Product'[Product] ), [Total Sales], , DESC, Dense )
)25. Make a visual’s title follow the slicersMedium
SELECTEDVALUE(column, alternate) returns the value when exactly one is filtered, and the alternate otherwise; it’s short for IF(HASONEVALUE(…), VALUES(…), …). Write a text measure and set the visual’s title with fx. A related trap: VALUES can add a blank row for unmatched keys; DISTINCT doesn’t.20
Sales Title =
"Sales in " & SELECTEDVALUE ( Store[City], "all cities" )
& ", " & SELECTEDVALUE ( 'Date'[FY], "all years" )26. Why use variables in DAX?Medium
A variable is calculated once, so nothing is evaluated twice: in Microsoft’s year-on-year example, the version with a variable ran “in about half the query time”. Variables also read better, are easy to debug (return one to inspect it) and replace the old EARLIER function.14
Sales YoY % =
VAR SalesLY = [Sales LY]
RETURN
-- DIVIDE ( [Total Sales] - SalesLY, SalesLY )
SalesLY -- return the variable while you debug, then switch back27. When do you need a gateway, and how often can a model refresh?Medium
A gateway lets the service reach data it can’t reach directly, such as an office SQL Server; cloud sources need none unless mixed with one that does, and Microsoft prefers the enterprise (standard) gateway to personal mode. Scheduled refresh: 8 a day on shared capacity, 48 on Premium, PPU or Fabric; limits of 2 and 5 hours per refresh; schedules pause after two months without visits.3
28. Workspace roles, apps and sharingMedium
Admins manage a workspace and its people; Members add people with lower roles and allow resharing; Contributors create and edit content; Viewers only view. Share widely through an app, a packaged read-only set of reports, rather than workspace access.21
Hard: 12 questions
These separate a good candidate from a strong one.
29. Why does a measure in a calculated column differ from SUM?Hard
In a calculated column, SUM ignores the row and returns the grand total. A measure reference acts as if wrapped in CALCULATE, so the row becomes a filter: context transition. It filters on every column, so identical duplicate rows each show their combined total, and it’s costly inside iterators over big tables.2
-- Calculated columns in the Product table
Sales via SUM = SUM ( Sales[SalesAmount] ) -- grand total on every row
Sales via measure = [Total Sales] -- this product's sales
Sales via CALCULATE = CALCULATE ( SUM ( Sales[SalesAmount] ) ) -- the same as the line above30. Show the top 3 products in each regionHard
A visual-level Top N filter ranks across the whole visual, not per region, so do it in the measure: in a matrix of Region then Product, TOPN runs in each region’s context and KEEPFILTERS keeps those three. TOPN returns every row tied at third place, so the product name breaks ties.22
Sales Top 3 in Region =
VAR Top3 =
TOPN ( 3, ALLSELECTED ( 'Product'[Product] ), [Total Sales], DESC, 'Product'[Product], ASC )
RETURN
CALCULATE ( [Total Sales], KEEPFILTERS ( Top3 ) )31. Customers and accounts are many-to-many. Model joint accountsHard
Microsoft’s own example: keep Customer and Account as dimensions, add a bridging table (AccountCustomer, one row per pair), relate them one-to-many, and let one relationship filter both ways so customer filters reach Transaction. Customer balances become non-additive, since joint holders share an account. Don’t relate the dimensions directly as many-to-many. To keep the model single-direction, switch direction inside one measure:23
Customer Balance =
CALCULATE (
SUM ( 'Transaction'[Amount] ),
CROSSFILTER ( AccountCustomer[AccountID], Account[AccountID], Both )
)32. A report is slow. How do you find and fix the cause?Hard
Measure first: Performance Analyzer splits each visual’s time into DAX query, DirectQuery, visual display and other; run the slowest query in DAX query view. Then fix the model (drop unused columns and rows, cut granularity and cardinality, remove needless bi-directional filters), the DAX (variables; Boolean filters rather than FILTER over a table, which Microsoft calls more efficient) and the page (fewer visuals).24
33. How does incremental refresh work?Hard
Create Date/Time parameters with the reserved, case-sensitive names RangeStart and RangeEnd, filter the fact table with them, set a policy (keep five years, refresh ten days) and publish: the service partitions the table and refreshes only recent partitions. The filter must fold. It runs on Pro, PPU, Premium and Embedded; a real-time DirectQuery partition needs Premium, PPU or Embedded, and you can’t download the .pbix afterwards.25
// Power Query (M). OrderDate must be Date/Time, like the parameters;
// >= at one end and < at the other, so no row lands in two partitions
#"Filtered Rows" =
Table.SelectRows ( Source, each [OrderDate] >= RangeStart and [OrderDate] < RangeEnd )34. Stock doesn’t add up over time. How do you measure it?Hard
Stock adds up across products but not over time: a month’s stock is its last day’s. That’s a semi-additive measure, a PL-300 skill. LASTNONBLANK takes the last date with data, so a month in progress still shows a value; CLOSINGBALANCEMONTH takes the month’s last date. BFSI rounds ask it about account balances.131
Closing Stock =
CALCULATE (
SUM ( Stock[Units] ),
LASTNONBLANK ( 'Date'[Date], CALCULATE ( SUM ( Stock[Units] ) ) )
)35. What problem do calculation groups solve?Hard
Ten measures with five time views each means fifty measures. A calculation group defines each view once, with SELECTEDMEASURE() standing for whatever measure the visual shows; create it in Model view or TMDL view. It turns on “discourage implicit measures”, since items apply only to explicit measures, and gives every measure the variant data type.26
-- Calculation items in a group named "Time Intelligence"
Current = SELECTEDMEASURE ()
FYTD = CALCULATE ( SELECTEDMEASURE (), DATESYTD ( 'Date'[Date], "3-31" ) )
LY = CALCULATE ( SELECTEDMEASURE (), SAMEPERIODLASTYEAR ( 'Date'[Date] ) )36. Let readers switch a chart between sales, units and ordersHard
Field parameters (Modeling → New parameter → Fields) make a small table of measures or columns. Put it in a slicer and the visual, and readers choose what it shows, axes included. Limits: no implicit measures, not as linked fields of a drill-through or tooltip page, and no AI visuals or Q&A.26
Metric = {
( "Sales", NAMEOF ( [Total Sales] ), 0 ),
( "Units", NAMEOF ( [Units Sold] ), 1 ),
( "Orders", NAMEOF ( [Orders] ), 2 )
}37. Managers see their own sales and everyone’s below them. How?Hard
Dynamic RLS on a hierarchy: store it in Employee (EmployeeID, ManagerID, Email), turn it into a path with PATH, and keep rows whose path contains the signed-in user’s ID; the filter flows on to Sales.274
-- Calculated column: "112|14|3" means 3 reports to 14, who reports to 112
Org Path = PATH ( Employee[EmployeeID], Employee[ManagerID] )
PATHCONTAINS ( -- role filter on Employee
Employee[Org Path],
LOOKUPVALUE ( Employee[EmployeeID], Employee[Email], USERPRINCIPALNAME () )
)38. Pro, Premium Per User or Fabric capacity: who needs which licence?Hard
Creating and sharing in a workspace needs Pro or Premium Per User (PPU), and so does viewing, unless the workspace is on an F64 or larger Fabric capacity (or a P capacity), where a free licence and the Viewer role do. PPU adds Premium features per user (48 refreshes a day, models over 1 GB) but isn’t a Fabric capacity; P SKUs are being retired for F SKUs.21
39. Copilot, visual calculations and DAX query view: what to know in 2026Hard
Copilot needs a paid Fabric (F2 or higher) or Premium (P1 or higher) capacity, not just Pro or PPU; on a capacity outside the US and EU data boundaries, as in India, an admin must allow processing outside the region. Microsoft warns that unprepared models give generic or inaccurate answers.5 PL-300’s skills list includes four Copilot tasks, visual calculations and DAX query view.1
40. Walk us through a dashboard you builtHard
It decides most second rounds: two minutes, five parts, then questions.
- The question and reader: “Store managers needed to see which products would run out before the festive weekend.”
- The data: sources, size, Power Query cleaning.
- The model: star schema, date table, key measures.
- The design: visual choices, drill-through, who sees what.
- The result: the decision it drove, how you checked the numbers, what you’d change.
A 7-day practice plan
About 90 minutes a day covers all 40 questions. Build each answer in Power BI Desktop before you read ours.
| Day | Focus | Questions | Finish when |
|---|---|---|---|
| 1 | Build the model, or open Microsoft’s sample; write the base measures | 1–6 | Every total checked by hand |
| 2 | Star schema, relationships, Power Query, filters, visuals | 7–12 | You can say which way filters flow |
| 3 | Filter context and CALCULATE | 13–15, 29 | Context transition, explained with one example |
| 4 | The date table, FYTD, year on year, running totals, stock | 16–19, 34 | April-to-date sales match a manual total |
| 5 | Storage modes, folding, refresh, RLS, licences | 20–23, 27, 28, 33, 37, 38 | A dynamic role tested with Test as role |
| 6 | Ranking, top N, many-to-many, performance, calculation groups | 24–26, 30–32, 35, 36 | One slow visual diagnosed |
| 7 | A mock round: five random questions, then your dashboard, out loud | 39, 40 | Two minutes on your dashboard, no notes |
Then build one report on real data with our 15 data analyst projects on Indian public data; the Data Analyst roadmap shows where Power BI fits. On our program, Module 3 covers it in about 30 hours: see the curriculum.
Free, official practice: Microsoft Learn’s Power BI Data Analyst certification page (with a free PL-300 practice assessment), the PL-300 study guide, the DAX function reference and the Adventure Works DW 2020 sample model.
Questions
What Power BI questions are asked of freshers?
Mostly the basics: calculated column vs measure, SUM vs SUMX, star schema, relationships, merge vs append, Import vs DirectQuery and a walk through your own report. Many rounds add SQL; strong candidates get pushed on CALCULATE and time intelligence.
Is DAX hard to learn for interviews?
The syntax is small; filter context is the hard part. Learn CALCULATE, the filter-removal functions and time intelligence well, and most DAX interview questions become variations on them.
Do Power BI interviews include SQL?
Usually. In the 23 Power BI job posts we read in October 2026, SQL appeared as often as DAX, and IT-services rounds often test joins, GROUP BY and window functions.
Is the PL-300 certification worth it for a Power BI job?
It shows you know Power BI as Microsoft defines the job, and its skills list makes a good syllabus. It doesn’t replace a portfolio: you’ll still walk through your own report and write DAX live.
Sources
- Microsoft Learn, Study guide for Exam PL-300: Microsoft Power BI Data Analyst (skills measured as of 20 April 2026), read 22 Oct 2026.
- Microsoft Learn, CALCULATE function (DAX) and ALLSELECTED function (DAX), read 22 Oct 2026.
- Microsoft Learn, Data refresh in Power BI, read 22 Oct 2026.
- Microsoft Learn, Row-level security (RLS) with Power BI, read 22 Oct 2026.
- Microsoft Learn, Copilot for Power BI overview, read 22 Oct 2026.
- Microsoft Learn, Intro to dashboards for Power BI designers, read 22 Oct 2026.
- Microsoft Learn, DAX reference: COUNT, DISTINCTCOUNT, DIVIDE function vs divide operator and MOD, read 22 Oct 2026.
- Microsoft Learn, Understand star schema and the importance for Power BI, read 22 Oct 2026.
- Microsoft Learn, Model relationships in Power BI Desktop, read 22 Oct 2026.
- Microsoft Learn, Merge queries overview, read 22 Oct 2026.
- Microsoft Learn, Set and use date tables in Power BI Desktop, read 22 Oct 2026.
- Microsoft Learn, Implement time-based calculations in Power BI (calendar-based time intelligence, preview), read 22 Oct 2026.
- Microsoft Learn, DAX reference: TOTALYTD, DATESYTD, SAMEPERIODLASTYEAR, PREVIOUSYEAR, LASTNONBLANK and CLOSINGBALANCEMONTH, read 22 Oct 2026.
- Microsoft Learn, Use variables to improve your DAX formulas, read 22 Oct 2026.
- Microsoft Learn, Visual calculations overview, read 22 Oct 2026.
- Microsoft Learn, Table storage mode in Power BI semantic models, read 22 Oct 2026.
- Microsoft Learn, Direct Lake overview, read 22 Oct 2026.
- Microsoft Learn, Understanding query evaluation and query folding in Power Query, read 22 Oct 2026.
- Microsoft Learn, USERELATIONSHIP function (DAX), read 22 Oct 2026.
- Microsoft Learn, DAX reference: RANKX, SELECTEDVALUE and VALUES, read 22 Oct 2026.
- Microsoft Learn, Understand Microsoft Fabric licenses and capacity and Roles in workspaces in Microsoft Fabric, read 22 Oct 2026.
- Microsoft Learn, TOPN function (DAX), read 22 Oct 2026.
- Microsoft Learn, Many-to-many relationship guidance and CROSSFILTER function, read 22 Oct 2026.
- Microsoft Learn, Use Performance Analyzer to examine report performance and Avoid using FILTER as a filter argument in DAX, read 22 Oct 2026.
- Microsoft Learn, Configure incremental refresh and real-time data for Power BI semantic models, read 22 Oct 2026.
- Microsoft Learn, Create calculation groups in Power BI and Use field parameters in Power BI reports, read 22 Oct 2026.
- Microsoft Learn, Understanding functions for parent-child hierarchies in DAX, read 22 Oct 2026.





