Every Exam PrepFREE EXAM PREP
Ask AI

PL-300 Practice Test

160 free PL-300 practice questions with answers and explanations.

No signup required.

The PL-300 exam is administered by Microsoft, with a time limit of 1 hour 40 minutes and a 700 of 1000 result.

About these practice questions
Verified against the official content outline

These are original study questions written from published exam objectives—not recalled, copied, or confidential live-exam items. Always confirm current coverage with the official sources linked on this page.

Difficulty
QUESTION 1 / 100Prepare the dataMedium0/0
A Fabric lakehouse holds a 900-million-row Delta table that a Spark job reloads every 15 minutes. Analysts want query performance comparable to Import mode, and new data should appear without scheduling full data refreshes. Which storage mode fits this requirement?
0/0session
Browse all questions & answers

Loading the remaining 60 questions…

Prepare the data

28 questions
  1. 1. A Fabric lakehouse holds a 900-million-row Delta table that a Spark job reloads every 15 minutes. Analysts want query performance comparable to Import mode, and new data should appear without scheduling full data refreshes. Which storage mode fits this requirement?

    • A. Direct Lake mode on the lakehouse Delta tables
    • B. A live connection to a semantic model published from Power BI Desktop
    • C. Import mode with incremental refresh configured to run on a 15-minute schedule
    • D. DirectQuery mode against the lakehouse SQL analytics endpoint for every table
    Show answer & explanation

    Answer: A
    Direct Lake loads column data straight from the Delta tables in OneLake into the VertiPaq engine, so queries perform like Import while a refresh only reframes metadata in seconds and automatic updates pick up new Delta versions. Import would copy 900 million rows on every cycle and scheduled refresh frequency is capped on shared capacity. DirectQuery federates every visual query to the SQL analytics endpoint, which Microsoft documents as normally slower than Direct Lake or Import. A live connection only reuses an existing published model and does not change how any table's data is stored.

  2. 2. A Direct Lake on SQL semantic model is built on a Fabric warehouse. One table is based on a SQL view rather than a Delta table, and Performance Analyzer shows that visuals using that table run noticeably slower than the rest. What explains the slowdown?

    • A. Views force the VertiPaq engine to disable column compression for every table in the semantic model
    • B. Queries against the view fall back to DirectQuery because Direct Lake on SQL can't load a view directly
    • C. The view's rows are being imported into memory on every query, which triggers a full model refresh each time
    • D. The capacity's Direct Lake row-group guardrail was exceeded, so the whole model switched to Import mode
    Show answer & explanation

    Answer: B
    Direct Lake on SQL analytics endpoints falls back to DirectQuery storage mode when it can't load data directly from a Delta table, and a non-materialized SQL view is the documented example; the model's Direct Lake behavior property controls whether that fallback is allowed. A Direct Lake refresh copies only metadata, so nothing is imported per query. Exceeding a capacity guardrail also causes DirectQuery fallback rather than a switch to Import, and it would affect the whole model rather than one view-based table. Compression is not disabled by a view; the view simply is not served by the in-memory engine.

  3. 3. A DirectQuery report over Azure SQL Database works for most pages, but a table visual that lists individual transactions for a whole year returns an error instead of data. The same visual works when filtered to one month. What is the most likely cause?

    • A. Table visuals in DirectQuery mode can show at most 10,000 rows per page unless drillthrough is configured
    • B. The semantic model exceeded the 1 GB size limit that applies to DirectQuery models on shared capacity
    • C. The visual's query returned more than 1,000,000 rows, which exceeds the DirectQuery intermediate result limit
    • D. Azure SQL Database rejects any DirectQuery statement that scans more than 100,000 rows in a single query
    Show answer & explanation

    Answer: C
    DirectQuery has a documented one-million-row intermediate result limit: any query or intermediate operation that returns more than 1,000,000 rows fails, which is why a year of transaction detail errors while one month succeeds. Premium capacities can raise the limit through the Max Intermediate Row Set Count setting. Azure SQL Database imposes no 100,000-row scan rule, table visuals have no 10,000-row DirectQuery page cap, and the 1 GB model size limit on shared capacity applies to Import models, which store data, not to a DirectQuery model that stores only metadata.

  4. 4. Finance keeps its budget in an Excel workbook on SharePoint and wants a report that reflects edits within minutes without waiting for a scheduled refresh. An analyst proposes connecting to the workbook in DirectQuery mode. What should the analyst tell them?

    • A. DirectQuery is available for Excel workbooks as long as every sheet is first converted to a formatted table
    • B. The Excel connector supports Import only, so the data must be imported and refreshed on a schedule
    • C. DirectQuery works for Excel workbooks only when the file is stored in OneDrive for Business
    • D. The workbook can be used in DirectQuery mode once it is registered on a standard-mode data gateway
    Show answer & explanation

    Answer: B
    The Power Query connector reference lists the capabilities each connector supports, and the Excel connector lists Import only; if DirectQuery is not listed for a connector it is not supported. That is true regardless of where the file lives, whether the sheets are formatted as tables, or whether a gateway is involved, so none of those changes unlock DirectQuery. The realistic design is an Import model with a scheduled refresh, or moving the budget into a source that supports DirectQuery if minute-level latency is essential.

  5. 5. A composite model has a 2-billion-row Sales table in DirectQuery mode and a 50-row Product table that is imported. A visual that combines Product attributes with Sales measures is slow, and Model view shows a limited relationship between the two tables. Which change should the analyst make?

    • A. Set the Product table's storage mode to Dual so it can join Sales at the source or be served from the cache
    • B. Convert the Sales table to Import and enable incremental refresh with a 30-day refresh window
    • C. Replace the relationship with a TREATAS filter inside every measure that uses the Product table
    • D. Set the relationship's cross-filter direction to Both so imported Product filters are pushed to Sales
    Show answer & explanation

    Answer: A
    A Dual table can act as either cached or not cached depending on the query, so when it joins a DirectQuery fact table the engine can send one native query to the source, which turns the limited relationship between an Import table and a DirectQuery table into a regular one. Importing 2 billion rows contradicts the reason the fact table is in DirectQuery. TREATAS in every measure is a workaround that still evaluates across two storage modes and adds maintenance. Cross-filter direction changes filter propagation, not the storage modes that make the relationship limited.

  6. 6. A 40-table semantic model was built entirely in Import mode. The source database now changes every few minutes and stakeholders want visuals to show current values, so the analyst tries to switch the existing tables to DirectQuery in Model view. What will happen?

    • A. The switch succeeds, but every measure that uses time intelligence is converted into a calculated column
    • B. The tables can't be switched: storage mode can move from DirectQuery to Import or Dual, but not from Import to DirectQuery
    • C. Each table can be switched from the Properties pane in Model view, and the model keeps its calculated columns and measures unchanged
    • D. The switch succeeds only after 'Assume referential integrity' is enabled on every relationship in the model
    Show answer & explanation

    Answer: B
    Storage mode is set when a table is added. Power BI Desktop lets you change a DirectQuery table to Import or Dual, but once a table is Import it can't be set back to DirectQuery, so an Import-only model can't be globally switched; the tables would have to be re-created with a DirectQuery connection. The Properties pane exposes the storage mode property but not that direction of change. Assume referential integrity is a join-optimization setting for DirectQuery relationships, not a prerequisite for changing modes, and no conversion of measures into calculated columns takes place.

  7. 7. A query merges customer records from an internal SQL Server database with exchange rates from a public web API. Refresh fails with 'Formula.Firewall: Query is accessing data sources that have privacy levels which cannot be used together.' What is the correct fix?

    • A. Set the SQL Server source to Private and the web API to Public, then keep the merge inside a single query
    • B. Turn on 'Ignore the Privacy levels' (Fast Combine) in the published semantic model's settings in the service
    • C. Assign compatible privacy levels, such as Organizational, to both sources so they may be combined
    • D. Change the merge to an inner join so no data from the SQL Server source has to be sent to the web API
    Show answer & explanation

    Answer: C
    The Data Privacy Firewall raises this error when one partition of a query combines sources whose privacy levels forbid folding data between them. Setting both sources to levels that may be combined, such as Organizational, lets the merge run. Private data can't fold into any other source, so Private plus Public still fails. Fast Combine is a Power BI Desktop and dataflow option, not something the semantic model settings in the service offer, and ignoring privacy levels risks leaking data to the public API. The join kind doesn't change which sources are combined, so an inner join doesn't satisfy the firewall.

  8. 8. A Power Query parameter named Region of type Text controls which rows are loaded, and a second parameter of type Any holds a connection string. After publishing, the model owner wants to change both values from the Power BI service without republishing. What will they find?

    • A. Neither parameter can be edited in the service; parameter values are fixed at the moment the .pbix is published
    • B. Only parameters bound to a slicer can be edited in the service, and only by users holding Build permission
    • C. Both parameters can be changed under the semantic model's Parameters settings and take effect at the next refresh
    • D. The Region parameter can be edited in the service, but the Any-type parameter is not supported there
    Show answer & explanation

    Answer: D
    Parameters created in Power BI Desktop travel with the published model and can be reviewed and edited under Settings > Semantic models > Parameters, but the service documents that Any and Binary type parameters are not supported there for security reasons, so only the Text parameter is editable. Parameters can't be created in the service, yet existing supported ones aren't frozen at publish time. Slicer binding is a field-parameter concept unrelated to Power Query parameters, and Build permission governs report authoring on the model, not its parameter settings.

  9. 9. Each month the operations team drops a new CSV file with an identical column layout into a SharePoint document library, and the report must include every file automatically. Which connection approach requires the least ongoing maintenance?

    • A. Import the newest CSV with the Text/CSV connector and replace the Source file path each month
    • B. Connect with the Web connector to each file's URL and append the new query to the model every month
    • C. Load each CSV into its own dataflow and merge the dataflows inside the semantic model
    • D. Use the SharePoint folder connector and Combine files so new files are picked up on refresh
    Show answer & explanation

    Answer: D
    Power Query's Combine files feature merges every file in a folder that shares the same schema into one logical table, and the SharePoint folder connector exposes that folder, so each refresh picks up whatever files are present without editing the query. Connecting to individual file URLs, swapping the Text/CSV path, or creating a dataflow per file all require a manual change every month, which is exactly the maintenance the requirement rules out.

  10. 10. Column quality in Power Query Editor reports 0 percent errors for an Amount column, yet the load fails with conversion errors on 37 rows of a 2-million-row table. Why did the profile miss them?

    • A. Column quality reports empty cells as errors, and these 37 rows contained blanks rather than error values
    • B. Column quality only inspects columns with a Text data type, so numeric conversion errors are never counted
    • C. Profiling runs over the first 1,000 rows by default, so errors further down the table are not sampled
    • D. Errors are counted only after Close & Apply, so the preview always shows 0 percent until the model loads
    Show answer & explanation

    Answer: C
    By default Power Query performs data profiling over the first 1,000 rows, and the status-bar message 'Column profiling based on top 1000 rows' can be switched to 'Column profiling based on entire data set' to inspect everything. The 37 bad rows simply fell outside the sample. Column quality works on any data type and separately reports Valid, Error, and Empty categories, so blanks are not counted as errors, and the indicators are computed in the editor preview rather than deferred until the load.

  11. 11. Column distribution for an OrderID column with 10,000 rows shows 9,990 distinct values and 9,980 unique values. Which conclusion is correct before using OrderID as the one side of a relationship?

    • A. Ten OrderID values appear more than once, so the column can't be the one side until duplicates are resolved
    • B. Ten rows are null, because Distinct counts non-null values while Unique counts every row in the column
    • C. The column is already a valid key, because Distinct and Unique only differ when the 1,000-row profile sample is incomplete
    • D. Twenty OrderID values are duplicated, because Unique counts each occurrence of a repeated value
    Show answer & explanation

    Answer: A
    Distinct is the number of different values in the column and Unique is the number of values that occur exactly once. With 9,990 distinct values but only 9,980 unique ones, 10 distinct values occur more than once, accounting for the remaining 20 rows, so the column has duplicates and the one side of a relationship requires unique values. Neither statistic counts nulls specially, Unique counts values rather than occurrences, and the two statistics differ because of real duplicates, not because of the sampling window.

  12. 12. After a data type change, 12 rows in a 500,000-row Sales query show Error in the Quantity column because the source contains the text 'n/a'. The business wants those orders kept but treated as having no quantity. Which transformation meets that requirement?

    • A. Keep errors on the Quantity column so that only the 12 affected rows are isolated in a separate query for review
    • B. Replace errors on the Quantity column with null from the Any column group on the Transform tab
    • C. Remove errors on the Quantity column from the Reduce rows group on the Home tab
    • D. Change the Quantity column's data type to Text so the 'n/a' values load without producing any errors
    Show answer & explanation

    Answer: B
    Replace errors substitutes a fixed value for every cell-level error in the selected column, so replacing with null keeps the 12 orders while leaving their quantity blank. Remove errors deletes the entire row for each error, which loses the orders. Keep errors filters the query down to only the rows with errors, the opposite of what is needed. Typing the column as Text avoids the error but turns a numeric measure column into text, which breaks summing and comparisons downstream.

  13. 13. A weekly refresh starts failing with "Expression.Error: The column 'Cust_Name' of the table wasn't found" after the source team renamed a field in the CSV export. Which action resolves the failure without losing the downstream steps?

    • A. Edit the step that references Cust_Name so it uses the new column name and let the later steps flow from it
    • B. Set the column's privacy level to Organizational so the mismatched header is ignored during the refresh
    • C. Turn off 'Use first row as headers' so the renamed column falls back to a generic Column1 name
    • D. Delete the query and rebuild it from the CSV so that the automatically generated steps use the new column names
    Show answer & explanation

    Answer: A
    'The column of the table wasn't found' is a step-level error raised when a step makes a direct reference to a column name that no longer exists, typically after a source rename. Fixing the referencing step, such as the Renamed Columns or Changed Type step, keeps every later step intact. Rebuilding the query discards the transformation logic. Privacy levels govern how data sources may be combined and have nothing to do with column names. Demoting headers would rename every column generically and break all other references.

  14. 14. A financial statement exported from Excel lists the Department name only on the first row of each block, with blank cells beneath it until the next department starts. Which Power Query transformation gives every row its department?

    • A. Unpivot the Department column so that the blank cells become attribute-value pairs
    • B. Fill Down on the Department column so each null is replaced by the last non-empty value above it
    • C. Group By the Department column using the All rows operation, then expand the nested tables afterward
    • D. Replace Values on the Department column, replacing null with the text of the previous row
    Show answer & explanation

    Answer: B
    Fill Down traverses a column and replaces each null with the last non-empty value found above it until a new value appears, which is exactly the block layout an Excel export produces. Group By with All rows would group the null rows together as their own department rather than assigning them one. Replace Values substitutes a single fixed value and cannot refer to the previous row. Unpivot reshapes columns into attribute-value rows and would not populate the missing department names at all.

  15. 15. A Customer table contains 'Contoso', ' Contoso', and 'Contoso ' as separate values. After load, a relationship to the Sales table fails with a duplicate-value error, yet a visual groups only two of the three variants together. What explains this, and what fixes it?

    • A. The engine is case-sensitive and keeps all three; apply Format > Lowercase in Power Query before loading
    • B. The engine keeps all three variants intact; enable Assume referential integrity on the relationship
    • C. The engine trims trailing but not leading spaces; apply Format > Trim in Power Query before loading
    • D. The engine trims leading but not trailing spaces; apply Format > Clean in Power Query before loading
    Show answer & explanation

    Answer: C
    The Power BI engine automatically trims trailing spaces from text but does not remove leading spaces, so 'Contoso' and 'Contoso ' become duplicates while ' Contoso' stays separate, which produces exactly this mix of duplicate-value errors and partial grouping. Microsoft's guidance is to use Text.Trim, or Format > Trim, to remove leading and trailing spaces before the data loads. Clean removes control characters, not spaces. The engine is case-insensitive, so lowercase conversion addresses a different problem. Assume referential integrity only changes DirectQuery join generation and cannot remove duplicates.

  16. 16. A CSV export begins with two title lines, and the real column headers appear in the third row. When the file is loaded, Power Query names the columns Column1 through Column8. Which sequence of steps produces correct headers?

    • A. Use First Row as Headers, then Remove Top Rows with a value of 2
    • B. Transpose the table, remove the first two columns, then transpose it back
    • C. Remove Bottom Rows with a value of 2, then Use Headers as First Row
    • D. Remove Top Rows with a value of 2, then Use First Row as Headers
    Show answer & explanation

    Answer: D
    Promoting headers takes whatever is currently the first row and makes it the column names, so the two title lines must be removed first; Remove Top Rows with a value of 2 leaves the real header row at the top and Use First Row as Headers then names the columns correctly. Promoting first would turn the title line into headers and the real headers would remain as a data row. Transposing and removing columns is a roundabout way to delete rows and still leaves the headers unpromoted. Remove Bottom Rows deletes data at the end of the file, and Use Headers as First Row demotes headers, the opposite operation.

  17. 17. A Revenue column is imported as Decimal number. Totals in a card sometimes show values such as 1,204,555.99999998 instead of 1,204,556.00, and a RANKX measure over the column gives inconsistent ranks. Which data type change addresses both symptoms?

    • A. Change the column to Fixed decimal number, which stores exactly four decimal places without floating error
    • B. Change the column to Percentage format, which rounds the displayed values to two decimal places
    • C. Change the column to Text so the source values are displayed exactly as they were entered
    • D. Change the column to Whole number, which stores up to 19 digits and removes any floating-point imprecision
    Show answer & explanation

    Answer: A
    Decimal number is a 64-bit floating-point type with 15 digits of precision, and Microsoft documents that its approximate storage can produce slightly inaccurate sums and RANKX results that differ between the two evaluations. Fixed decimal number always keeps four digits to the right of the separator, corresponding to SQL Decimal(19,4), so it avoids these rounding errors while keeping cents. Whole number would discard the fractional currency values entirely. Text can't be summed or ranked numerically. Percentage is only a display format and doesn't change how values are stored.

  18. 18. In Power Query a CallLength column is typed as Duration and a Logged column is typed as Date/Time/Timezone. After Close & Apply, an analyst is surprised by the data types shown for these columns in Table view. What happened?

    • A. CallLength became Decimal number and Logged became Date/Time, because the model converts both types on load
    • B. CallLength became a Whole number of seconds and Logged kept its timezone offset in a separate hidden column
    • C. Both columns were loaded as Text, because Duration and Date/Time/Timezone exist only in Power Query
    • D. Both columns failed to load, because the Binary, Duration, and Date/Time/Timezone types are unsupported
    Show answer & explanation

    Answer: A
    The Power Query data type menu has two types that the model lacks: when loaded, a Duration column converts into Decimal number, which lets it be added to or subtracted from Date/Time values, and a Date/Time/Timezone column converts into Date/Time with no timezone adjustment. Neither is loaded as Text and neither fails to load; only Binary columns are unsupported in the model. Duration is stored as fractional days, not whole seconds, and no hidden offset column is created.

  19. 19. An analyst groups a 3-million-row Orders query by CustomerKey to compute the sum of Amount and a count of rows, but also needs each customer's original order rows nested so they can be expanded later. Which Group By aggregation provides the nested rows?

    • A. All rows, which outputs the grouped rows as a table value in the new column
    • B. Count distinct rows, which keeps one nested table per distinct customer
    • C. Median, which retains the underlying rows so the middle value can be recalculated
    • D. Count rows, which stores the row count together with a reference to the source table
    Show answer & explanation

    Answer: A
    The All rows operation outputs all grouped rows in a table value with no aggregation, so each cell holds a nested table that can later be expanded back into columns. Count rows and Count distinct rows return only numbers; they don't store the rows or a reference to them. Median is a numeric aggregation of a column and, like the other numeric operations, discards the underlying rows. Sum and Count can be added as additional aggregations alongside All rows in the same Group By dialog.

  20. 20. A long table has Country, Date, and Value columns. Pivoting the Date column with the Don't aggregate option returns an error for several countries while other countries pivot correctly. What is the cause?

    • A. Don't aggregate is only permitted when the pivoted column has a Text data type, not a Date type
    • B. The Date column contains more than 100 distinct values, which exceeds the number of new columns a pivot can create
    • C. Pivoting requires a numeric Value column, and Don't aggregate switches the column to Text
    • D. Some country and date combinations have more than one Value row, so a single cell can't hold them
    Show answer & explanation

    Answer: D
    Don't aggregate places a single value at the intersection of each row and pivoted column; when a Country and Date pair maps to more than one Value row, Power Query can't choose one and returns an error for that cell, which is why only some countries fail. The option works with pivoted columns of any type, there is no 100-column pivot limit, and the Value column doesn't need to be numeric when no aggregation is applied. Choosing an aggregation such as Sum, or removing the duplicates first, resolves the error.

  21. 21. A planning spreadsheet lists the twelve months down the first column and one department per column header, with budget amounts in the cells. Analysts want one row per department with the months as fields for a matrix. Which transformation delivers that layout?

    • A. Transpose the table, then promote the first row so the month names become the column headers
    • B. Unpivot all of the department columns so that every amount becomes its own attribute-value row
    • C. Pivot the month column and aggregate with Sum so that the departments become the rows
    • D. Merge the department columns into a single delimited column and split it by rows
    Show answer & explanation

    Answer: A
    Transpose rotates the table 90 degrees, turning rows into columns and columns into rows, so departments move to rows and months move to columns; promoting the first row afterward turns the month names into headers. Unpivoting produces a tall table with one row per department-month pair, not one row per department. Pivoting the month column requires months to already be in a single column. Merging and splitting columns rearranges text and does not swap the axes of the table.

  22. 22. A sales extract has Country followed by one column per month, and the source adds a new month column with each refresh. The query must always produce Country, Month, and Amount rows without anyone editing the steps. Which unpivot choice should be used?

    • A. Select the month columns and choose Unpivot Only Selected Columns
    • B. Select the Country column and choose Unpivot Other Columns
    • C. Select every column and choose Unpivot Columns to preserve the order
    • D. Select the Country column and choose Pivot Column with Don't aggregate
    Show answer & explanation

    Answer: B
    Unpivot Other Columns unpivots every column except the ones selected, and Microsoft documents it as the ideal choice when the source gains new date columns on refresh because those new columns are picked up and unpivoted automatically. Unpivot Only Selected Columns does the opposite: it unpivots a fixed list, so a new month column would remain as a column. Unpivoting every column would also unpivot Country, destroying the key. Pivot Column is the inverse operation and would widen the table.

  23. 23. An events table from a SQL database stores each event's payload as a JSON string in a text column, and the report needs the payload's status and region fields as regular columns. Which Power Query approach is appropriate?

    • A. Parse the column as JSON so each value becomes a record, then expand the status and region fields
    • B. Use the Web connector to send each JSON string to an API that returns the fields as columns
    • C. Change the column data type to Text and use Column From Examples to extract the two words
    • D. Split the column by the ':' delimiter and rename the resulting fragments to status and region by position
    Show answer & explanation

    Answer: A
    Transform > Parse > JSON applies Json.Document to each text value, returning a record whose fields can be expanded into ordinary columns, which handles nested structures, quoting, and field order correctly. Splitting on ':' breaks as soon as a value contains a colon or the fields change order. Column From Examples infers text patterns and is unreliable for structured payloads. Sending each row to an external API is unnecessary, slow, and would introduce privacy-level constraints between sources.

  24. 24. Before loading, an analyst must list every Sales row whose CustomerKey has no matching row in the Customer query, so the missing customers can be reported to the source team. Which merge join kind returns exactly those rows?

    • A. Full outer join, which returns every row from both of the queries
    • B. Left outer join, which returns all Sales rows plus matching Customer rows
    • C. Left anti join, which returns only the Sales rows without a match
    • D. Inner join, which returns only the rows that match in both tables
    Show answer & explanation

    Answer: C
    With Sales as the left table, a Left anti join returns only rows from the left table that have no match in the right table, which is precisely the orphaned CustomerKey list. Inner join keeps only matched rows, the opposite set. Left outer join keeps every Sales row, matched or not, so the orphans are mixed in with everything else. Full outer join returns all rows from both tables, including customers with no sales, and would need additional filtering to isolate the unmatched Sales rows.

  25. 25. Three regional order files are appended into one query. The East file's discount column is named 'Disc', while the other two files use 'Discount'. What does the appended result contain?

    • A. Separate Disc and Discount columns, with null in whichever one a source file lacks
    • B. A single Discount column, because Append matches columns by their position rather than by name
    • C. Only the columns that exist in all three files, with Disc and Discount both dropped
    • D. An error, because Append requires every query to have identical column names and column order
    Show answer & explanation

    Answer: A
    Append matches columns by header name: all column headers from all tables are appended to the result, and when a table lacks a column found in another, the resulting table shows null in that column for its rows. So Disc and Discount both appear, each null for the files that don't have it. Append doesn't raise an error for mismatched names, doesn't match by position, and doesn't drop non-shared columns. Renaming Disc to Discount before the append is the way to get a single column.

  26. 26. A Sales fact table identifies products by the combination of ProductCode and Plant, and the Product dimension has the same two columns. The analyst can't create a relationship on both columns at once. Which preparation step enables a valid relationship?

    • A. Create a many-to-many relationship on ProductCode and a second one on Plant, both set to bi-directional
    • B. Add a column in Power Query that merges ProductCode and Plant into one key in both tables
    • C. Enable 'Assume referential integrity' so the engine matches on both columns automatically
    • D. Mark the Product table as the date table so the model can use composite keys for the relationship
    Show answer & explanation

    Answer: B
    A model relationship relates one column in a table to one column in another table, so a composite business key must be materialized as a single column; merging ProductCode and Plant in Power Query, in both tables, creates a key that can be unique on the dimension side. Two separate relationships on the individual columns would each be many-to-many, ambiguous, and semantically wrong. Assume referential integrity only affects the join type generated for DirectQuery. Marking a table as a date table has nothing to do with composite keys.

  27. 27. Incremental refresh is configured with RangeStart and RangeEnd. The filter step is [OrderDate] >= RangeStart and [OrderDate] <= RangeEnd, and after a few refreshes some orders dated exactly at midnight on a partition boundary appear twice. What is the fix?

    • A. Add Remove Duplicates as the final step so the duplicated boundary rows are dropped at load time
    • B. Use >= RangeStart together with < RangeEnd so a boundary row satisfies only one partition's conditions
    • C. Change both parameters to the Date data type so that partition boundaries no longer contain a time part
    • D. Enable 'Only refresh complete days' so that rows on a partition boundary are excluded from every partition
    Show answer & explanation

    Answer: B
    Microsoft's guidance is to verify that the filter has an equal-to on RangeStart or RangeEnd but not both; with equality on both, a row whose OrderDate equals a boundary satisfies the conditions of two adjacent partitions and is loaded twice. RangeStart and RangeEnd must remain Date/Time parameters regardless of the column's type. 'Only refresh complete days' controls whether a partial day is refreshed, not partition overlap. Remove Duplicates runs inside each partition's query and can't see the duplicate that lives in the neighboring partition.

  28. 28. A Customers query is referenced by three other queries that shape it for different fact tables. The base Customers query is only an intermediate step, yet it appears in the model and adds 400 MB. What should the analyst do?

    • A. Convert the base Customers query into a custom function so it is only executed when the others invoke it
    • B. Set the base Customers query's privacy level to Private so its rows are excluded from the model
    • C. Delete the base Customers query and paste its steps into each of the three referencing queries
    • D. Clear Enable load on the base Customers query so it stays available for reference but isn't loaded
    Show answer & explanation

    Answer: D
    Microsoft's data-reduction guidance says queries intended only to support other queries shouldn't be loaded to the model, so the load should be disabled; clearing Enable load keeps the query as a reusable source for the three referencing queries while removing its table and 400 MB from the model. Deleting it and copying steps triplicates the logic and the maintenance. Turning it into a function changes how it's invoked but is unnecessary for a plain staging table. Privacy levels control how sources combine and don't stop a query from loading.

Model the data

28 questions
  1. 29. A Sales table has an integer OrderYear column. When a report author drags it into a table visual it appears as a summed total such as 40,480 instead of listing the individual years. Which column property should the modeler change?

    • A. Set the column's default summarization (Summarize by) to Don't summarize
    • B. Set the column's data type to Text so the years are treated as categories
    • C. Set the column's Data category to Year so the visual sorts it chronologically
    • D. Hide the column and expose a measure MAX(Sales[OrderYear]) for the visual instead
    Show answer & explanation

    Answer: A
    Numeric columns default to Sum, so a year column is aggregated like a measure. Microsoft's guidance for numeric ID-style columns that Power BI shouldn't sum is the Do Not Summarize option, which makes each value appear separately in visuals while the column stays numeric for sorting and arithmetic. Changing the type to Text would stop the summing but breaks numeric comparisons and date math. There is no Year data category that controls aggregation. A MAX measure returns one value per context and would still hide the list of years.

  2. 30. A map visual plots a City column, but several cities such as Paris and Springfield land in the wrong country, and a GeoCode column holding values like AL is ambiguous between Alabama and Albania. What should the modeler configure?

    • A. Enable bi-directional filtering between the Geography table and the map's fact table
    • B. Set the Data category of the columns (for example City, State or Province, Country) so the map geocodes them correctly
    • C. Create a calculated column that concatenates the city, state, and country and plot the concatenated text as the latitude field
    • D. Change the City column's Summarize by setting to Count so each city is plotted only once
    Show answer & explanation

    Answer: B
    Data categorization tells Power BI how to interpret a column's values; geographic categories such as City, State or Province, and Country remove the ambiguity that makes a code like AL resolve as Alabama or Albania and let the map geocode the values correctly. Concatenated text is not a latitude, and a latitude field requires numeric coordinates. Summarize by controls aggregation of values, not geocoding. Cross-filter direction affects filter propagation between tables and has no effect on how a visual interprets location text.

  3. 31. A bar chart uses a MonthName column from the Date table and shows April, August, and December first instead of January, February, March. The Date table also contains a MonthNumber column. What is the correct fix?

    • A. Convert MonthName to a Date data type so the axis becomes continuous
    • B. Create a hierarchy with MonthNumber above MonthName in the Date table
    • C. In Column tools, set Sort by column on MonthName to MonthNumber
    • D. Change the visual's sort to ascending by MonthName in the visual header
    Show answer & explanation

    Answer: C
    Text sorts alphabetically, so month names need a different sort key; Sort by column on the MonthName column, set to MonthNumber, makes every visual that uses MonthName sort chronologically. Sorting the visual by MonthName still sorts alphabetically. A month name can't be converted to a valid Date type without a year, and a continuous axis wouldn't fix labels. A hierarchy changes drill behavior, not the order of values at a single level.

  4. 32. Reseller Sales has OrderDate, ShipDate, and DeliveryDate keys that all relate to one Date table. Users want a single matrix that shows orders placed in March 2026 broken down by the month in which they were shipped. Which design supports this?

    • A. Set the ShipDate relationship as active and the OrderDate relationship as inactive, then switch between them in the visual's Format pane
    • B. Set all three relationships to bi-directional so the Date table can filter Reseller Sales on any key
    • C. Keep one Date table and write every measure with USERELATIONSHIP over the inactive ShipDate relationship
    • D. Add a second date table, such as Ship Date, related to ShipDate so both dates can filter the matrix at once
    Show answer & explanation

    Answer: D
    A role-playing dimension can filter the facts by order date, ship date, or delivery date, but only one relationship between two tables can be active, so a single Date table can play only one role at a time in a visual. USERELATIONSHIP activates a different relationship inside one measure, which cannot place order month on rows and ship month on columns simultaneously. Adding a separate Ship Date dimension table gives each role its own active relationship. Relationships can't be switched from a visual's Format pane, and cross-filter direction doesn't allow more than one active path.

  5. 33. A Customer table relates to Sales with a single-direction relationship. One measure must count the distinct customer countries for the products in the current filter context, but the modeler must not enable bi-directional filtering on the relationship because of its performance and slicer side effects. Which measure achieves this?

    • A. Different Countries Sold = CALCULATE(DISTINCTCOUNT(Customer[Country]), CROSSFILTER(Customer[CustomerKey], Sales[CustomerKey], BOTH))
    • B. Different Countries Sold = CALCULATE(DISTINCTCOUNT(Customer[Country]), USERELATIONSHIP(Customer[CustomerKey], Sales[CustomerKey]))
    • C. Different Countries Sold = CALCULATE(DISTINCTCOUNT(Customer[Country]), ALL(Sales))
    • D. Different Countries Sold = CALCULATE(DISTINCTCOUNT(Customer[Country]), TREATAS(VALUES(Sales[ProductKey]), Customer[CustomerKey]))
    Show answer & explanation

    Answer: A
    Microsoft's guidance is to activate bi-directional filtering inside a measure with CROSSFILTER rather than on the relationship; CROSSFILTER with BOTH lets the Sales filter context flow to Customer only while this measure is evaluated. USERELATIONSHIP activates an inactive relationship, but this relationship is already active and its direction is the problem. ALL(Sales) removes the very filters the count depends on. TREATAS mapping product keys onto customer keys applies meaningless values as a filter.

  6. 34. Customers can hold several bank accounts and accounts can be jointly owned by several customers. Transactions are recorded per account, and the report must slice transaction amounts by customer. How should the modeler relate Customer and Account?

    • A. Create a direct many-to-many relationship between Customer and Account on the customer name column and set it to filter both ways
    • B. Add a bridging table with one row per customer-account pair, related one-to-many from Customer and from Account
    • C. Merge Customer into Account in Power Query so every account row repeats each of its owners' details
    • D. Relate Customer directly to Transaction on AccountID with cross-filter direction set to Both
    Show answer & explanation

    Answer: B
    For a many-to-many relationship between two dimension-type tables, Microsoft's guidance is to add a bridging table that stores one row per association, create one-to-many relationships from each dimension to the bridge, and set one relationship to bi-directional so filters reach the fact table. A direct many-to-many relationship on a name column loses the ID-based integrity and produces ambiguous filter propagation. Merging owners into Account duplicates account rows and double counts transactions. Customer has no AccountID, so a direct relationship to Transaction can't be defined.

  7. 35. Mark as date table fails for a Calendar table with the message that the column must contain unique values, no nulls, and contiguous dates. The table was built from the distinct OrderDate values found in Sales. What is the underlying problem?

    • A. The table was loaded from Power Query, and Mark as date table only accepts DAX calculated tables
    • B. The table contains a MonthNumber column, and only a single-column table can be marked as a date table
    • C. The table has no rows for days without sales, so the date values are not contiguous from beginning to end
    • D. The Date column is stored as Date/Time, and Mark as date table accepts only columns stored with the Date data type
    Show answer & explanation

    Answer: C
    When you mark your own date table, Power BI Desktop validates that the chosen column contains unique values, contains no nulls, contains contiguous date values from beginning to end, and, if it is Date/Time, has the same timestamp on every value. A calendar derived from distinct order dates skips days with no orders, so it fails the contiguity check. Date/Time columns are accepted when the time part is constant. Tables from Power Query or DAX are both eligible, and extra columns such as MonthNumber are normal in a date table.

  8. 36. A model with 45 date columns across its Import tables is larger than expected, and Model view shows none of the extra tables that would explain the size. The modeler already has a proper marked Date table. Which Power BI Desktop option should be turned off, and why?

    • A. Autodetect new relationships, because it creates a hidden bridge table for every date key that it detects
    • B. Time intelligence quick measures, because they store a hidden date table in every table they touch
    • C. Relative date filtering, because it caches a hidden calendar per date column for the current user
    • D. Auto date/time, because it creates a hidden calculated date table for each date column in Import tables
    Show answer & explanation

    Answer: D
    When Auto date/time is enabled, Power BI Desktop creates a hidden auto date/time table for every date or date/time column in an Import table that isn't on the many side of a relationship; each is a calculated table built with CALENDAR plus six calculated columns, and they are permanently hidden from Model view. With a marked Date table these tables are redundant, so disabling the option removes them and shrinks the model. Autodetect relationships creates relationships, not tables; quick measures generate DAX measures; relative date filtering is a slicer and filter option that stores nothing.

  9. 37. A DirectQuery model over SQL Server relates a 3-billion-row Sales table to a Product dimension. Every ProductKey in Sales exists in Product, and query traces show OUTER JOINs that slow the visuals. Which relationship setting improves query efficiency?

    • A. Assume referential integrity, so the generated queries use INNER JOIN instead of OUTER JOIN
    • B. Cross-filter direction Both, so the source database can prune rows from either table first
    • C. Cardinality One to one, so the engine can skip the join and read from Sales directly
    • D. Make this relationship active, so the source query can use a hash join instead of a nested loop
    Show answer & explanation

    Answer: A
    Assume referential integrity is an advanced relationship setting available only for DirectQuery; it tells Power BI the data in the from column always has a match in the to column, so generated queries can use INNER JOIN rather than OUTER JOIN, which is more efficient. It must only be set when the data really is consistent, as here. Cross-filter direction changes filter propagation, not join type. One-to-one cardinality would be false for a fact-to-dimension relationship. Whether a relationship is active doesn't determine the physical join algorithm the database picks.

  10. 38. A report has a slicer on Product[Color]. The measure Red Sales = CALCULATE([Sales], Product[Color] = "Red") keeps showing red sales even when the slicer is set to Blue. The requirement is that the measure returns blank whenever Red is excluded by the slicer. Which change is correct?

    • A. Red Sales = CALCULATE([Sales], FILTER(ALL(Product), Product[Color] = "Red"))
    • B. Red Sales = CALCULATE([Sales], KEEPFILTERS(Product[Color] = "Red"))
    • C. Red Sales = CALCULATE([Sales], ALLSELECTED(Product[Color]), Product[Color] = "Red")
    • D. Red Sales = CALCULATE([Sales], REMOVEFILTERS(Product[Color]), Product[Color] = "Red")
    Show answer & explanation

    Answer: B
    By default a CALCULATE filter argument replaces any existing filter on the same column, which is why the slicer is ignored. KEEPFILTERS changes that behavior so the new filter is intersected with the existing one: Red AND Blue is an empty set, so the measure returns blank. ALLSELECTED and REMOVEFILTERS both discard the slicer's filter before applying Red, so the result is unchanged. FILTER(ALL(Product), ...) explicitly removes every Product filter first, again overriding the slicer.

  11. 39. A bar chart shows Sales by Category, and a slicer on Product[Category] lets users pick a subset of categories. A percentage measure must show each visible category's share of the selected categories only, so the bars always sum to 100 percent. Which measure is correct?

    • A. Share = DIVIDE([Sales], CALCULATE([Sales], ALL(Sales), ALL(Product)))
    • B. Share = DIVIDE([Sales], CALCULATE([Sales], ALL(Product[Category]), ALL(Product[Color])))
    • C. Share = DIVIDE([Sales], CALCULATE([Sales], ALLSELECTED(Product[Category])))
    • D. Share = DIVIDE([Sales], CALCULATE([Sales], REMOVEFILTERS(Product)))
    Show answer & explanation

    Answer: C
    ALLSELECTED removes the filters that come from inside the query, such as the visual's own Category axis, while keeping filters that come from outside such as the slicer selection, which is exactly how visual totals are obtained. So the denominator is the total of the selected categories and the bars sum to 100 percent. ALL(Product[Category]) and REMOVEFILTERS(Product) also discard the slicer, so the denominator becomes all categories and the bars sum to less than 100 percent. ALL(Sales) with ALL(Product) removes every filter, giving the grand total across regions and dates as well.

  12. 40. The company's fiscal year ends on June 30. A year-to-date sales measure must reset on July 1 rather than January 1, using the marked Date table. Which measure is correct?

    • A. YTD Sales = TOTALYTD([Sales], 'Date'[Date], "7/1")
    • B. YTD Sales = CALCULATE([Sales], DATESYTD('Date'[Date]), 'Date'[FiscalYear] = YEAR(TODAY()))
    • C. YTD Sales = TOTALYTD([Sales], 'Date'[Date], 6)
    • D. YTD Sales = TOTALYTD([Sales], 'Date'[Date], "6/30")
    Show answer & explanation

    Answer: D
    TOTALYTD accepts an optional year_end_date argument, a literal string with the date that defines the year end; the default is December 31, and "6/30" makes the year end on June 30 so the accumulation restarts on July 1. "7/1" would define a year ending July 1, so July 1 would still belong to the old year. A bare number such as 6 isn't a valid year-end string. The DATESYTD variant without a year-end argument still resets on January 1, and filtering FiscalYear to the current calendar year doesn't change where the accumulation starts.

  13. 41. A report page is filtered to April 1 through April 10, 2026. A measure must return sales for the entire previous quarter (January 1 through March 31), not just the ten matching days shifted back. Which expression returns the full quarter?

    • A. CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -1, QUARTER))
    • B. CALCULATE([Sales], SAMEPERIODLASTYEAR('Date'[Date]))
    • C. CALCULATE([Sales], DATESBETWEEN('Date'[Date], MIN('Date'[Date]) - 90, MAX('Date'[Date]) - 90))
    • D. CALCULATE([Sales], DATEADD('Date'[Date], -1, QUARTER))
    Show answer & explanation

    Answer: A
    PARALLELPERIOD is similar to DATEADD except that it always returns full periods at the given granularity: shifting April 1-10 back one quarter yields the whole of January through March. DATEADD returns the partial period, January 1-10, because it shifts each selected date. SAMEPERIODLASTYEAR returns April 1-10 of 2025. DATESBETWEEN with a 90-day offset is still a ten-day window and, depending on month lengths, doesn't even align to quarter boundaries.

  14. 42. A line chart by month must show rolling 12-month sales, so that the point for March 2026 sums April 2025 through March 2026 for every month on the axis. Which measure is correct with a marked Date table?

    • A. Rolling 12M = CALCULATE([Sales], PREVIOUSYEAR('Date'[Date]))
    • B. Rolling 12M = CALCULATE([Sales], DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -12, MONTH))
    • C. Rolling 12M = CALCULATE([Sales], DATESBETWEEN('Date'[Date], MIN('Date'[Date]), MAX('Date'[Date])))
    • D. Rolling 12M = CALCULATE([Sales], DATEADD('Date'[Date], -12, MONTH))
    Show answer & explanation

    Answer: B
    DATESINPERIOD returns a table of dates that begins at the start date and continues for the specified number of intervals, so starting at the last date in context and going back 12 months produces the trailing twelve-month window for each point; it is designed to be passed as a filter to CALCULATE. DATESBETWEEN with MIN and MAX of the current context returns only the current month. DATEADD shifts the month back a year and returns the single month of March 2025. PREVIOUSYEAR returns the whole prior calendar year, not a trailing window.

  15. 43. Management wants the average revenue per customer, defined as the mean of each customer's total revenue rather than the mean of individual order lines. Sales has one row per order line with a CustomerKey column. Which measure is correct?

    • A. Avg per Customer = AVERAGEX(Sales, Sales[Revenue] / DISTINCTCOUNT(Sales[CustomerKey]))
    • B. Avg per Customer = DIVIDE([Total Revenue], COUNTROWS(Sales))
    • C. Avg per Customer = AVERAGEX(VALUES(Sales[CustomerKey]), [Total Revenue])
    • D. Avg per Customer = AVERAGE(Sales[Revenue])
    Show answer & explanation

    Answer: C
    AVERAGEX iterates a table and averages an expression evaluated for each row; iterating VALUES(Sales[CustomerKey]) evaluates the Total Revenue measure once per customer through context transition and then averages those customer totals. AVERAGE(Sales[Revenue]) and DIVIDE by COUNTROWS both average order lines, not customers. Dividing each line by the distinct customer count and averaging the results yields the average line revenue divided by the customer count, which is not a per-customer mean.

  16. 44. Sales stores Quantity and UnitPrice per order line. A measure defined as Revenue = SUM(Sales[Quantity]) * SUM(Sales[UnitPrice]) returns totals far larger than the invoiced amounts. Which measure computes revenue correctly?

    • A. Revenue = SUM(Sales[Quantity]) * AVERAGE(Sales[UnitPrice])
    • B. Revenue = CALCULATE(SUM(Sales[Quantity]) * SUM(Sales[UnitPrice]), ALL(Sales))
    • C. Revenue = PRODUCTX(Sales, Sales[Quantity] + Sales[UnitPrice])
    • D. Revenue = SUMX(Sales, Sales[Quantity] * Sales[UnitPrice])
    Show answer & explanation

    Answer: D
    Revenue must be computed line by line: SUMX evaluates Quantity multiplied by UnitPrice for each row of Sales and then sums the results. Multiplying two column totals multiplies the sum of all quantities by the sum of all prices, which explodes the value. Sum of quantity times the average price is only correct when every line has the same price. PRODUCTX multiplies the row results together, and adding quantity to price is not a line amount at all. Wrapping the original formula in CALCULATE with ALL(Sales) only removes filters and keeps the wrong arithmetic.

  17. 45. Executives want a 'typical order value' figure that is not distorted by a handful of very large orders. Sales has one row per order with an OrderValue column. Which single-aggregation measure best meets that requirement?

    • A. Typical Order = AVERAGE(Sales[OrderValue])
    • B. Typical Order = STDEV.P(Sales[OrderValue])
    • C. Typical Order = MAX(Sales[OrderValue])
    • D. Typical Order = MEDIAN(Sales[OrderValue])
    Show answer & explanation

    Answer: D
    MEDIAN returns the median of the numbers in a column, the middle value, which is robust to a few extreme orders because those outliers only shift the mean, not the midpoint. AVERAGE is pulled upward by the large orders, which is the distortion the executives want to avoid. MAX returns the single largest order, the outlier itself. STDEV.P measures spread around the mean and is not a typical value at all.

  18. 46. An Inventory table holds a stock count per product per day, but counts are recorded only on days when a stocktake happens. A measure must show the most recent recorded stock at month end even when the last day of the month has no row. Which measure is correct?

    • A. Stock = CALCULATE(SUM(Inventory[Qty]), LASTDATE('Date'[Date]))
    • B. Stock = LASTNONBLANKVALUE('Date'[Date], SUM(Inventory[Qty]))
    • C. Stock = CLOSINGBALANCEMONTH(SUM(Inventory[Qty]), 'Date'[Date])
    • D. Stock = SUMX(VALUES('Date'[Date]), SUM(Inventory[Qty]))
    Show answer & explanation

    Answer: B
    LASTNONBLANKVALUE evaluates the expression for each value of the column, sorted, and returns the last result that isn't blank, so it finds the most recent stocktake in the period. LASTDATE and CLOSINGBALANCEMONTH both evaluate on the last date of the period, and when that date has no inventory row they return blank. SUMX over the dates adds every stocktake in the month together, which turns a semi-additive snapshot into a meaningless total.

  19. 47. A report author who is new to DAX needs a running total of Sales Amount by month, wants the generated DAX to be visible and editable afterward, and does not want to write the formula from scratch. Which feature fits?

    • A. A visual-level Show value as > Running total setting, which writes a hidden measure into the model
    • B. A what-if parameter, which generates a GENERATESERIES table and a SELECTEDVALUE measure for the total
    • C. A quick measure using the Running total calculation, which creates a measure whose DAX can be edited
    • D. A calculated column created from the Running total template, which stores the cumulative value on each row of the table
    Show answer & explanation

    Answer: C
    Quick measures offer a catalog of calculations, including Running total under Totals, and each one generates a real model measure whose DAX appears in the formula bar for inspection and editing. There is no Running total template for calculated columns, and a running total in a column would be fixed per row rather than responding to filters. Show value as options exist for some visual settings but don't create model measures. A what-if parameter builds a slicer-driven parameter table, not a cumulative calculation.

  20. 48. Customers must be filtered with a slicer on age bands such as 18-24 and 25-34, derived from a BirthDate column. The analyst first writes the banding logic as a measure but can't add it to the slicer. Why, and what should be created instead?

    • A. Measures can't contain IF logic; create a calculated table that lists the bands and relate it to Customers on the BirthDate column
    • B. Slicers accept only Text columns from the fact table; create the band as a column in Sales rather than in Customers
    • C. Measures are evaluated only at refresh; create a quick measure so the band is materialized when the model loads
    • D. Measures return a single value per filter context and can't be placed in a slicer; create a calculated column with the band
    Show answer & explanation

    Answer: D
    A calculated column calculates a result for every row of the table and appears in the field list like any other column, so it can be used in slicers, on axes, and in filters. A measure is evaluated in the filter context of a visual and returns one value per context, so it has no per-row values to slice on. Measures can use IF freely. A calculated table of bands can't be related to Customers on BirthDate because the band isn't a birth date. Measures are evaluated at query time, not refresh, and quick measures are still measures.

  21. 49. Sales managers want to drag a slider from 0 to 30 percent and see projected revenue after that discount recalculated in every visual on the page. Which modeling feature delivers both the slider and the value the measure uses?

    • A. A what-if numeric range parameter, which creates a parameter table, a slicer, and a selected-value measure
    • B. A field parameter, which creates a calculated table of measures that the slicer switches between in each visual
    • C. A Power Query parameter of type Decimal Number that report readers change in the Filters pane
    • D. A calculation group with one calculation item per discount percentage from 0 to 30
    Show answer & explanation

    Answer: A
    A what-if parameter created from Modeling > New parameter > Numeric range generates a table of values, adds a slicer bound to it, and creates a measure that returns the selected value, which other measures such as projected revenue can reference. A field parameter swaps which fields or measures a visual shows rather than supplying a numeric input. Power Query parameters are set by authors and aren't exposed to report readers through the Filters pane. A calculation group with 31 items would be unwieldy and offers no slider.

  22. 50. After a Time Intelligence calculation group is added in Model view, report authors notice that numeric columns no longer show the summation icon and can't be dropped straight into a visual's Values well. What caused this change?

    • A. Adding a calculation group switches the model into DirectQuery mode, where implicit aggregation of columns isn't supported by visuals
    • B. The calculation group's precedence property was set higher than the Values well allows for implicit aggregation
    • C. Calculation groups convert every numeric column to Text, so columns must be wrapped in a measure before use
    • D. Adding the calculation group enabled Discourage implicit measures, because calculation items apply only to explicit measures
    Show answer & explanation

    Answer: D
    When a calculation group is created, Power BI prompts to turn on the Discourage implicit measures property; once on, the summation symbol disappears from data columns and they can't be added directly as values, because calculation items only apply to explicit measures. Existing implicit measures in visuals keep working. Column data types are unchanged, although model measures do switch to the variant type. Precedence only orders multiple calculation groups, and storage mode is untouched by adding a calculation group.

  23. 51. A Targets table has a Region text column and monthly target amounts, but no relationship to the Region dimension because the modeler wants to avoid a relationship on a text column. A measure must return targets for the regions selected on the Region dimension. Which measure works?

    • A. Target = CALCULATE(SUM(Targets[Amount]), CROSSFILTER(Region[RegionName], Targets[Region], BOTH))
    • B. Target = CALCULATE(SUM(Targets[Amount]), FILTER(Targets, Targets[Region] = SELECTEDVALUE(Region[RegionName])))
    • C. Target = CALCULATE(SUM(Targets[Amount]), TREATAS(VALUES(Region[RegionName]), Targets[Region]))
    • D. Target = CALCULATE(SUM(Targets[Amount]), USERELATIONSHIP(Region[RegionName], Targets[Region]))
    Show answer & explanation

    Answer: C
    TREATAS applies the result of a table expression as filters to columns of an unrelated table, so the currently visible region names are pushed onto Targets[Region] without any model relationship. USERELATIONSHIP and CROSSFILTER both require an existing relationship between the two columns, which this model deliberately lacks, so they raise errors. The SELECTEDVALUE variant only works when exactly one region is in context and returns nothing when several regions are selected or when the visual shows regions on rows.

  24. 52. A 1.8-billion-row Import fact table stores one row per point-of-sale scan, but every report aggregates to store, product, and day. The model exceeds the capacity's memory limit. Which data-reduction technique addresses the size while keeping the reports correct?

    • A. Convert the fact table's numeric columns to Text so the VertiPaq dictionary can compress them further
    • B. Add a calculated column with the day-level total so visuals read the column instead of summing the rows
    • C. Replace the integer keys with the descriptive Product and Store names so fewer lookup tables are needed
    • D. Pre-summarize the table in Power Query with Group By to one row per store, product, and day before loading
    Show answer & explanation

    Answer: D
    Microsoft describes Group by and summarize as perhaps the most effective technique to reduce model size: loading pre-summarized data raises the grain of the fact table, and because the reports never go below store, product, and day, nothing they show is lost. Text columns compress worse than numbers and can't be summed. A calculated column adds storage on every one of the 1.8 billion rows instead of removing rows. Replacing integer keys with names increases cardinality and size while dismantling the star schema.

  25. 53. A modeler needs a FullName column built by concatenating FirstName and LastName in a 40-million-row Customer table imported from SQL Server. Where should the column be created to get the best compression and refresh performance?

    • A. As a Power Query custom column, or in the source query, so it is compressed like a regular loaded column
    • B. As a measure using CONCATENATEX, because measures occupy no storage and are computed at refresh time
    • C. As a calculated table that duplicates Customer with the extra column so the original table stays unchanged
    • D. As a DAX calculated column, because VertiPaq compresses DAX calculated columns better than columns loaded from Power Query
    Show answer & explanation

    Answer: A
    Microsoft's guidance is to prefer custom columns created in Power Query, or better still computed in the source query, because model calculated columns are stored with slightly different internal structures that typically compress less efficiently and are built only after all Power Query tables load, extending refresh time. A CONCATENATEX measure produces a scalar per filter context, not a per-customer column usable on rows or in slicers. A duplicated calculated table doubles the 40 million rows in memory.

  26. 54. Performance Analyzer shows a card visual with DAX query 40 ms, Visual display 30 ms, and Other 4,800 ms on a page that contains 32 visuals. What does the Other duration represent, and what is the appropriate fix?

    • A. Time spent rendering web images and geocoding; remove the map and image visuals from the card's interactions
    • B. Time the on-premises data gateway spent transferring the query result set to the service; move the semantic model to a Fabric capacity
    • C. Time the visual spent waiting for other visuals to complete or doing background preparation; reduce the number of visuals on the page
    • D. Time spent by the storage engine scanning the model in memory; add an aggregation table over the fact table
    Show answer & explanation

    Answer: C
    Performance Analyzer breaks each visual's duration into DAX query, Direct query, Visual display, Other, and Evaluated parameters; Other is the time the visual spends preparing queries, waiting for other visuals to complete, or performing other background processing, which on a 32-visual page is usually queue time. Cutting the number of visuals on the page addresses that. Gateway transfer would show up inside the query time, storage-engine scanning is part of the DAX query duration, and image retrieval and geocoding are counted under Visual display.

  27. 55. In DAX query view an analyst writes DEFINE MEASURE Sales[Margin %] = DIVIDE([Profit], [Sales]) followed by EVALUATE to test it against the model. The test looks right, and the measure must now exist in the semantic model. What is the most direct way to add it?

    • A. Copy the EVALUATE result into a calculated table, which stores the measure definition permanently
    • B. Publish the .pbix, because DEFINE MEASURE blocks are written into the model when the file is published
    • C. Run the query a second time, because a DEFINE MEASURE that executes twice is persisted automatically
    • D. Use the Update model with changes button so the query-scoped measure is added to the model
    Show answer & explanation

    Answer: D
    Measures created with DEFINE MEASURE are query-scoped and run only in the context of that DAX query; DAX query view provides CodeLens update-model actions and an Update model with changes button that add or overwrite model measures with those DAX formulas. Publishing doesn't convert query-scoped definitions into model measures. Copying results into a calculated table stores values, not the measure. Re-running a query never persists anything to the model.

  28. 56. Performance Analyzer flags a slow measure defined as Red Sales = CALCULATE([Sales], FILTER('Product', 'Product'[Color] = "Red")). The result is correct, and existing Color filters may be replaced. Which rewrite improves performance without changing the result?

    • A. Red Sales = CALCULATE([Sales], FILTER(VALUES('Product'[Color]), 'Product'[Color] = "Red"))
    • B. Red Sales = CALCULATE([Sales], FILTER(ALL('Product'), 'Product'[Color] = "Red"))
    • C. Red Sales = CALCULATE([Sales], 'Product'[Color] = "Red")
    • D. Red Sales = SUMX(FILTER('Product', 'Product'[Color] = "Red"), [Sales])
    Show answer & explanation

    Answer: C
    Microsoft's DAX guidance is to avoid FILTER as a CALCULATE filter argument when a Boolean expression suffices: the table-expression version iterates every Product row, whereas the Boolean filter over the Color column is evaluated far more efficiently and, like the original, replaces existing Color filters. FILTER(ALL('Product'), ...) still iterates the whole table and also removes every other Product filter, changing results. SUMX over the filtered table keeps the row-by-row iteration. FILTER(VALUES(...)) preserves existing Color filters, which alters the result when Color is sliced.

Visualize and analyze the data

24 questions
  1. 57. A category manager wants to see how the sales rank of five product categories changes from month to month, with the top-ranked category always drawn on top for each month. Which visual is designed for this?

    • A. A ribbon chart, which shows the highest-ranked category on top in each period and connects the rank changes
    • B. A stacked column chart, which orders the segments by value within each month's column from largest to smallest
    • C. A line chart with one line per category, which plots each category's sales value across the months
    • D. A 100% stacked area chart, which shows each category's share of total sales in each month
    Show answer & explanation

    Answer: A
    Ribbon charts show which category has the highest rank over time, with the highest value always displayed on top for each period, and the ribbons make rank changes between periods visible, which is exactly the question being asked. A stacked column chart keeps a fixed segment order, so rank changes are hard to read. A line chart shows values, not rank, and lines cross without emphasis. A 100% stacked area chart shows share of total and also keeps a fixed series order.

  2. 58. A matrix must color each cell's background using a hex color that a DAX measure returns, such as #C00000 when a KPI is below target and #107C10 when it is above, so the color logic lives in one place. Which conditional formatting style should be used?

    • A. Rules, with one rule per color that compares the KPI measure to the target value
    • B. Field value, with the measure that returns the color codes selected as the field
    • C. Data bars, with the positive and negative bar colors bound to the measure
    • D. Color scale, with the measure supplying the minimum and maximum colors
    Show answer & explanation

    Answer: B
    The Background color and Font color dialogs offer three format styles: color scale, rules, and field value. Field value applies whatever color name or hex code the selected field or measure returns for each cell, so the logic is written once in DAX and reused wherever the measure is applied. Color scale maps numeric values onto a gradient, not onto codes the measure emits. Rules duplicate the thresholds in every visual's formatting dialog. Data bars draw bars proportional to values and don't accept colors from a field.

  3. 59. A report author wants an on-canvas text summary that updates when readers change slicers, can be scoped to the whole report, one page, or selected visuals, and whose tone can be steered with a prompt. Which feature should the author add?

    • A. The Copilot pane's report summary, which is saved into the report as a static text visual for readers
    • B. A Q&A visual configured with the question 'summarize this report' so the generated answer text updates when slicers change
    • C. A Narrative with Copilot visual, which summarizes the report, a page, or selected visuals and accepts custom prompts
    • D. A text box with dynamic values mapped to measures, which recalculates the numbers on every refresh
    Show answer & explanation

    Answer: C
    The narrative visual created with Copilot can summarize the entire report, specific pages, or selected visuals, and its tone and specificity are curated with suggested or custom prompts; because it is a visual, adding it needs write permission on the report. A text box with dynamic values only inserts measure values into fixed text. The Copilot pane summary is produced on demand for the reader and isn't a visual on the canvas. A Q&A visual answers data questions with a visual, not a narrative.

  4. 60. In Power BI Desktop, an author selects 'Suggest content for this report' in the Copilot pane, but Copilot won't generate a page for a semantic model in which implicit measures were disabled after a calculation group was added. What is the reason?

    • A. Copilot requires at least one custom visual in the report before it can suggest content
    • B. Copilot builds pages only for models connected live to Analysis Services, not for Import models
    • C. Copilot page creation requires the model's Q&A feature switch to be turned off first
    • D. Copilot can't create report pages for semantic models that have implicit measures disabled
    Show answer & explanation

    Answer: D
    Microsoft lists the scenarios where Copilot can't create report pages: semantic models with implicit measures disabled, real-time streaming models, and models connected live to Analysis Services; custom visuals and styling changes aren't supported either. Disabling implicit measures is exactly what happens when a calculation group is added. The Q&A feature switch must be turned on, not off, for Copilot report creation, and a live Analysis Services connection is a blocker rather than a requirement.

  5. 61. A design team requires that every chart's series colors follow the corporate palette across 30 reports, without editing each visual. Which report theme JSON property sets those colors?

    • A. "dataColors", an array of hex values used for data series in visuals
    • B. "background", which sets the fill applied to every visual's data points
    • C. "tableAccent", which sets the accent color that visuals use for all series
    • D. "foreground", which sets the default series color and the text color
    Show answer & explanation

    Answer: A
    A report theme JSON file defines dataColors as an array of hex color codes that Power BI uses, in order, for data series in visuals, so importing the theme applies the palette to every visual in the report. The background property sets the report page and visual background, foreground sets text and label colors, and tableAccent overrides the table and matrix grid outline color; none of them determine series colors.

  6. 62. Every page of a 12-page report must exclude cancelled orders, and report readers must not be able to remove or change that filter, although they should still see that it is applied. How should the author configure it?

    • A. Add a slicer on order status to the first page and set its default selection to exclude cancelled
    • B. Add the filter under Filters on all pages and lock it in the Filters pane
    • C. Add the filter under Filters on this page on page 1 and enable Sync slicers for the rest
    • D. Add the filter to each visual under Filters on this visual and hide the Filters pane
    Show answer & explanation

    Answer: B
    A report-level filter placed under Filters on all pages applies everywhere, and the Filters pane lets the designer lock filters that consumers must not edit while leaving them visible. Page-level filters apply to a single page and Sync slicers only synchronizes slicer visuals, not the Filters pane. Visual-level filters would have to be repeated on every visual, and hiding the pane means readers can't see the filter at all. A slicer on one page doesn't filter other pages and readers can change it.

  7. 63. A relative date slicer set to 'Last 1 day' shows different rows for a reader in Sydney than the author expects at 9 AM Sydney time. What explains the behavior in the published report?

    • A. Relative date slicers evaluate 'today' in the time zone of the capacity's home region
    • B. Relative date slicers cache the author's local date when the report is published to the service
    • C. Relative date slicers and filters are evaluated against the current time in UTC, not the reader's local time
    • D. Relative date slicers use the time zone offset stored in the semantic model's Date/Time/Timezone columns
    Show answer & explanation

    Answer: C
    Date columns in Power BI carry no time zone information, and when a report is published the relative options of slicers and filters are always based on the time in UTC, so every reader sees the same data regardless of location; at 9 AM in Sydney it is still the previous calendar day in UTC. The model doesn't store a Date/Time/Timezone type, the capacity region isn't used for relative dates, and nothing about the author's local date is cached at publish time.

  8. 64. A report consumer with only read access wants a plain-language summary of the current page's visuals, respecting the slicers they applied, and cannot add visuals to the report. Which Copilot capability serves this?

    • A. The Narrative with Copilot visual, which the consumer adds to the page while in reading view of the report
    • B. Prep data for AI, which lets consumers write AI instructions that summarize the semantic model
    • C. The Q&A visual's Copilot suggestions, which require Build permission on the semantic model
    • D. The Copilot pane's report summary, available in the Power BI service without write permission on the report
    Show answer & explanation

    Answer: D
    Microsoft's documentation notes that the narrative visual needs write permission like any other visual, and that a reader without write permission can still create a report summary in the Copilot pane, which produces summaries grounded in the report's visuals. Visuals can't be added in reading view. Prep data for AI is an authoring feature for model owners that improves Copilot answers, not a consumer summary. Q&A answers questions with visuals and has no Build-permission summary feature.

  9. 65. Compliance requires that readers of a report can export the aggregated numbers they see in visuals but never the row-level underlying data. Where does the report author enforce this?

    • A. In Report settings (File > Options and settings > Options), by allowing export of summarized data only
    • B. In the semantic model settings, by turning off Build permission for every reader of the report
    • C. In each visual's Format pane, by disabling the Export data option in the visual header for every visual
    • D. In the workspace settings, by setting the license mode to Pro so exports are capped at 30,000 rows
    Show answer & explanation

    Answer: A
    Export data options are set per report under Report settings in Power BI Desktop's Options dialog, and can be updated in the service; the author can allow summarized data only, summarized and underlying data, or no export, with admin portal settings able to override. Build permission governs building new content on the model, not exports from visuals. The visual header can hide the export menu but is not a policy control across the report. License mode doesn't cap exports; the documented limits are 150,000 rows for .xlsx and 30,000 rows for .csv regardless of workspace type.

  10. 66. A matrix shows monthly Sales Amount. The author wants a cumulative column that adds up the rows in the order they appear in the matrix, without creating a model measure. Which visual calculation does this?

    • A. Running total = SUMX(ALL('Date'[Month]), [Sales Amount])
    • B. Running total = RUNNINGSUM([Sales Amount])
    • C. Running total = MOVINGAVERAGE([Sales Amount], 12)
    • D. Running total = [Sales Amount] - PREVIOUS([Sales Amount])
    Show answer & explanation

    Answer: B
    Visual calculations operate over the visual's own result set, and RUNNINGSUM adds up the values along an axis in the order shown, which is Microsoft's own example of a running sum for Sales Amount. MOVINGAVERAGE returns a trailing average over a window rather than a cumulative total. PREVIOUS refers to the prior row, so subtracting it gives a period-over-period change. SUMX over ALL('Date'[Month]) is model-style DAX that ignores the visual's ordering and would produce the same total on every row.

  11. 67. A 'Reset view' button must return the page to its default layout, restoring hidden visuals and spotlight state, but it must leave whatever slicer selections the reader has made untouched. How should the bookmark be configured?

    • A. Set the bookmark to Selected visuals and include only the slicers on the page so their state is preserved
    • B. Enable Current page on the bookmark so it re-opens the page with the reader's slicer state
    • C. Clear the Data option on the bookmark and keep Display, so it applies visibility without filters and slicers
    • D. Clear the Display option on the bookmark and keep Data, so it applies slicers without visibility changes
    Show answer & explanation

    Answer: C
    A bookmark's More options menu lets you choose which properties it applies: Data covers filters and slicers, Display covers spotlight and visibility, and Current page controls navigation. Clearing Data and keeping Display resets visibility and spotlight while leaving the reader's slicer selections alone. Keeping Data and clearing Display does the opposite. Selected visuals limits which visuals the bookmark touches but including the slicers would reset them. Current page only decides whether the bookmark navigates to its page.

  12. 68. When readers hover over a bar for a product, a small page with three visuals filtered to that product should appear instead of the default tooltip. Which configuration is required?

    • A. Create a page, hide it from navigation, and set the bar visual's drillthrough target to that page
    • B. Create a page, add the product field under Filters on this page, and set the bar visual's Tooltip type to Default
    • C. Add the three visuals to the bar chart's Tooltips field well so they are shown when the bar is hovered
    • D. Create a tooltip page (Tooltip canvas size, Tooltip slider on) with the product field in Tooltip fields
    Show answer & explanation

    Answer: D
    A report tooltip page is created by setting the page's Canvas Settings size template to Tooltip, turning the Tooltip slider on in Page Information, and dragging the field it should respond to into Tooltip fields; visuals that use that field then show the tooltip page filtered to the hovered data point. Drillthrough navigates on click rather than on hover. A page-level filter with the Default tooltip type shows the standard tooltip. The Tooltips field well accepts fields, not visuals.

  13. 69. Selecting a region on a map currently shades the non-matching bars in a column chart while keeping them visible. Stakeholders want the column chart to show only the selected region's bars. How should the author change the interaction?

    • A. Turn on Edit interactions, select the column chart, and choose the Highlight icon on the map
    • B. Set the column chart's Data colors to transparent for categories outside the selection
    • C. Turn on Edit interactions, select the map, and choose the Filter icon on the column chart
    • D. Turn on Edit interactions, select the map, and choose the None icon on the column chart
    Show answer & explanation

    Answer: C
    Interactions are configured from the source visual: with Edit interactions on and the map selected, each other visual shows Filter, Highlight, and None icons, and choosing Filter on the column chart makes the map cross-filter it so only matching bars remain. Selecting the column chart and editing the map configures the opposite direction. None removes the interaction entirely. Transparent data colors are static formatting and don't respond to the selection.

  14. 70. A report gains new pages every sprint, and a navigation bar on every page must show a button per page with the correct names and order without the author editing buttons each time. Which feature meets this?

    • A. A drillthrough button whose destination list is bound to the page names table
    • B. A page navigator, which automatically syncs its buttons with the report's pages, names, and order
    • C. A bookmark navigator, which creates a button for every bookmark in the Bookmarks pane
    • D. A set of blank buttons with Page navigation actions, one per page, copied onto every page of the report
    Show answer & explanation

    Answer: B
    The page navigator (Insert > Buttons > Navigator > Page navigator) automatically syncs with the report's pages: labels match page display names, ordering matches page order, and the selected button reflects the current page, so new pages appear without manual work. A bookmark navigator builds buttons from bookmarks, not pages. Individual page-navigation buttons must be added and re-copied whenever a page is added. Drillthrough buttons target a single drillthrough page.

  15. 71. In a table visual sorted by Number of customers, a reader wants ties broken by Total revenue so that rows with the same customer count are ordered by revenue. How can the reader add the second sort column?

    • A. Right-click the Number of customers header and choose Sort by another column > Total revenue
    • B. Select the Total revenue header twice so it becomes the primary sort and the previous sort is kept
    • C. Hold Shift and select the Total revenue column header to append it to the sort order
    • D. Drag the Total revenue field into the Sort by bucket in the visual's Format pane
    Show answer & explanation

    Answer: C
    Table visuals support multi-column sorting: selecting a header sorts by it, and holding Shift while selecting another header adds that column next in the sort sequence; Shift-selecting the same column again flips its direction. Selecting a header without Shift replaces the sort rather than adding to it. There is no Sort by another column context command or Sort by bucket in the Format pane; Sort by column is a model property set by the author, not a reader action.

  16. 72. A page contains a 'Details' overlay made of a shape, a title text box, and four visuals that must be shown or hidden together by a single bookmark and moved as one unit when the layout changes. What should the author do?

    • A. Give the six objects the same tab order value so that the bookmark treats them as a single navigable element
    • B. Place the six objects on a hidden page and reference that page from the bookmark's Current page setting
    • C. Set identical Layer order values on the six objects so they are hidden together when one is hidden
    • D. Select the six objects, group them from the Selection pane, and toggle the group's visibility in the bookmark
    Show answer & explanation

    Answer: D
    Grouping in Power BI Desktop lets you treat buttons, text boxes, shapes, images, and visuals as a single object, so the group can be moved and resized together and its visibility can be toggled in the Selection pane and captured by a bookmark. Tab order only affects keyboard navigation sequence. A hidden page is a different page, not an overlay on this one. Layer order controls stacking, and objects with the same layer value are still independent for visibility.

  17. 73. A summary report and a detail report are in the same workspace, and users must right-click a customer in the summary and drill through to the detail report's customer page. The drillthrough entry doesn't appear in the service. Which condition is most likely missing?

    • A. Cross-report drillthrough isn't enabled in the target report's settings, or the field names and data types don't match
    • B. The two reports use different themes, so the drillthrough filter can't map the customer field between them
    • C. The target report's customer page isn't hidden from navigation, and cross-report drillthrough targets must be hidden pages
    • D. The summary report needs Build permission on the detail report's semantic model for the entry to appear
    Show answer & explanation

    Answer: A
    Cross-report drillthrough works between reports in the same workspace, is only supported in the Power BI service, must be enabled in the target report's settings, and requires matching field names and data types in the source and target; when it fails, Microsoft's troubleshooting steps are to check exactly those conditions. Themes have no effect on drillthrough. Target pages don't need to be hidden. Build permission on the semantic model controls report authoring, not drillthrough between published reports.

  18. 74. Regional managers want to swap the measure on a chart's axis or change its visual type for their own use, without edit permission and without affecting other readers. What must the author enable, and how do readers keep their version?

    • A. Publish the report to an app; app users save changes as app-level bookmarks
    • B. Enable Edit interactions for readers; they keep changes through persistent filters
    • C. Enable Personalize visuals in Report settings; readers save their changes as personal bookmarks
    • D. Grant readers the Contributor workspace role; they keep their changes with File > Save a copy
    Show answer & explanation

    Answer: C
    Personalize visuals is enabled by the author in Power BI Desktop under File > Options and settings > Options > Report settings (or in the service), after which readers can change visual types, swap fields, and adjust aggregations in reading view and save the result as a personal bookmark, all without edit permission. The Contributor role grants editing rights to the shared report, which affects everyone. Edit interactions is an authoring feature. Apps don't provide app-level bookmarks for readers.

  19. 75. A line chart with five series is distinguished only by color. A color-blind stakeholder can't tell the lines apart, and the report must be made accessible without changing the theme. Which visual setting should the author apply?

    • A. Increase the line stroke width so the color difference is more visible
    • B. Add alt text describing which color represents each series
    • C. Turn on markers and assign a different marker shape to each series
    • D. Turn on data labels for each series and increase the label font size
    Show answer & explanation

    Answer: C
    Microsoft's accessibility guidance is to avoid using color as the only way of conveying information: for line, area, combo, scatter, and bubble visuals, turn on markers and use a different marker shape for each series so the lines can be told apart without color. Data labels and thicker lines still rely on color to identify which series is which. Alt text helps screen reader users but doesn't make the chart legible for a sighted color-blind reader.

  20. 76. A DirectQuery report must refresh its visuals only when new rows arrive, by polling a count of orders every 10 seconds rather than re-running every visual on a timer. The workspace is on a Fabric capacity. Which automatic page refresh setup is correct?

    • A. Fixed interval set to 10 seconds, which re-queries only the visuals whose underlying data changed
    • B. Change detection with two measures, one for row count and one for last order time
    • C. Scheduled refresh of the semantic model every 10 seconds from the workspace settings
    • D. Change detection with a measure such as a count of OrderID, checked every 10 seconds
    Show answer & explanation

    Answer: D
    Automatic page refresh offers two types: fixed interval, which re-queries every visual on the page at the interval, and change detection, which polls a single change detection measure (count, count distinct, minimum, maximum, or sum) and refreshes the visuals only when its value changes; change detection is available only in workspaces on a capacity, which this one is. Fixed interval can't limit itself to changed visuals. A model may have only one change detection measure. Scheduled refresh applies to Import models and is capped at 48 runs per day.

  21. 77. A histogram must show how many orders fall into each $50 band of OrderValue (0-50, 50-100, and so on). OrderValue is a numeric column in the Sales table. What should the author create?

    • A. A New group on OrderValue with Group type Bin and a bin size of 50
    • B. A New group on OrderValue with Group type List, adding one group per band manually
    • C. A measure that divides OrderValue by 50 and rounds down, placed on the X axis
    • D. A field parameter on OrderValue with 50 as the step between values
    Show answer & explanation

    Answer: A
    Binning right-sizes numeric or date/time fields into equally sized groups: right-click the field, choose New group, set the group type to Bin, and specify the bin size (50) or the number of bins; the resulting field can be placed on an axis. A List group requires naming each band by hand and doesn't scale. Measures can't be placed on a categorical axis, and bins can be created on columns but not on measures. Field parameters switch fields in a visual and have nothing to do with value ranges.

  22. 78. Users typing 'revenue by territory' into a Q&A visual get no result because the model's fields are named SalesAmount and Region. Which Q&A setup step fixes this without renaming the fields?

    • A. Turn on the Q&A feature switch in the tenant settings so field names are inferred
    • B. Add revenue and territory as synonyms for the SalesAmount and Region fields in Q&A setup
    • C. Add a calculated column named revenue and a calculated table named territory to the model
    • D. Enable Row labels for the Sales table so Q&A can match any typed word to its columns
    Show answer & explanation

    Answer: B
    The Q&A engine relies on table and field names and their synonyms to understand what an input refers to, and Field synonyms in the Q&A setup dialog are the documented, basic way to teach it alternative terms such as revenue for SalesAmount. Adding duplicate columns and tables bloats the model and doesn't map the words to the existing fields. Row labels tell Q&A which column identifies a row, not vocabulary. The feature switch enables Q&A; it doesn't infer synonyms.

  23. 79. On a clustered column chart of average delivery time per carrier, the analyst must show each bar's uncertainty using upper and lower bound measures, and add a line at the 90th percentile of the values. Where are both of these added?

    • A. A calculation group with items for upper bound, lower bound, and percentile
    • B. The visual's Tooltips field well, which draws bounds as an overlay on hover
    • C. The Analytics pane, which provides Error bars and a Percentile line for that visual type
    • D. The Format pane's Data labels card, which supports upper and lower bound labels for each column
    Show answer & explanation

    Answer: C
    The Analytics pane adds constant and dynamic reference lines, error bars, forecasts, and anomaly detection; error bars, which display variability or uncertainty, are supported on clustered bar, clustered column, line, and line and clustered column charts, and a Percentile line at a specified percentile is available for column charts too. Data labels only print values. A calculation group changes measure results, not chart annotations. Tooltips show values on hover and draw nothing on the chart.

  24. 80. An analyst wants Power BI to flag unexpected spikes and dips in daily website sessions and explain the likely contributing factors. Which visual and feature combination supports this?

    • A. A scatter chart of sessions by day with automatic clustering enabled in the Analytics pane
    • B. A decomposition tree with Explain the increase applied to each branch
    • C. A card visual with a data alert configured on the published dashboard tile
    • D. A line chart with a date axis, with Find anomalies enabled in the Analytics pane
    Show answer & explanation

    Answer: D
    Anomaly detection enhances line charts by automatically detecting anomalies in time series data and providing explanations for each anomaly to help with root-cause analysis; it is turned on for a line chart from the Analytics pane. Clustering on a scatter chart groups similar points and does not flag time-series outliers. Explain the increase is an Analyze feature for bar and line data points, not a decomposition tree option. A data alert notifies on a threshold and offers no explanation.

Manage and secure Power BI

20 questions
  1. 81. A team of analysts must create and edit reports in a workspace but must not publish or update the workspace's app, and the workspace admin has not delegated app updates. Which role should they be assigned?

    • A. Contributor, which can publish and edit content but can update the app only if the admin allows it
    • B. Member, which can edit content but is blocked from app publishing unless the admin promotes it
    • C. Viewer, which can edit reports it has been granted Build permission on but can't publish apps
    • D. Admin, with the 'Allow contributors to update the app' setting turned off for the workspace
    Show answer & explanation

    Answer: A
    In the workspace roles matrix, Contributors can publish and edit content, and can update the app only if the workspace Admin delegates that permission through the 'Allow contributors to update the app' setting, which is off here. Members can publish, unpublish, and change permissions for an app, so they would be able to update it. Viewers can only view and interact; Build permission lets them build new content on a model elsewhere, not edit the workspace's reports. Admins can always publish and update the app regardless of that setting.

  2. 82. One app must serve both the sales and finance teams: sales should see three pages and finance a different set of content, without the team maintaining two apps. How should the app be configured?

    • A. Publish the app twice under different names and assign each team to one copy
    • B. Share the workspace with both teams and use report-level filters per team
    • C. Apply row-level security roles named Sales and Finance to the app's reports
    • D. Create two audiences in the app and show or hide content per audience
    Show answer & explanation

    Answer: D
    An app can have multiple audiences, and the publisher can show or hide different content to each audience, which keeps a single app while sales and finance each see their own pages. Publishing two apps doubles the maintenance the requirement rules out. Row-level security filters rows within a report; it doesn't control which reports or pages an audience receives. Sharing the workspace grants roles on everything in it and report-level filters can't hide content per team.

  3. 83. A report is shared with an external partner through direct access. The author hid several sensitive columns in the report and assumed the partner can't see them. Which statement about the partner's access is accurate?

    • A. Hidden fields are removed from the shared semantic model copy that the service creates for each share
    • B. The partner can see the hidden fields only if they are also granted Build permission on the model
    • C. Sharing the report also grants read access to its semantic model, so hidden fields aren't protected; use RLS or OLS
    • D. The partner sees only the fields placed on visuals, because sharing applies the report's field list as a security filter
    Show answer & explanation

    Answer: C
    Microsoft warns that when you share a report you also share access to its underlying semantic model, and a consumer's read access isn't restricted to what the report displays; hiding a table, column, measure, visual, or page is not a security measure. Rows must be restricted with row-level security and columns or tables with object-level security. Sharing creates no filtered copy of the model, and read access alone, without Build, is enough to reach the data through features such as personalizing visuals.

  4. 84. Row-level security limits regional managers to their own region, and the roles have members assigned. One manager who was given the Member workspace role still sees every region. Why, and what is the fix?

    • A. RLS applies only to users with Viewer permission; Admin, Member, and Contributor bypass it, so assign the manager Viewer
    • B. RLS only applies once the semantic model is certified; ask an authorized reviewer to certify it
    • C. Member role users need the role's DAX filter re-validated with Test as role before it takes effect
    • D. The manager belongs to two roles and the roles are combined with AND logic; remove the second role assignment
    Show answer & explanation

    Answer: A
    RLS restricts data only for users with Viewer permission; workspace Admins, Members, and Contributors have edit permission on the semantic model and RLS doesn't apply to them, so a manager who must be filtered can only be given the Viewer role. Roles are additive rather than combined with AND, so extra roles would show more data, not all data. Test as role is a validation feature and doesn't activate a role. Endorsement status such as certification has no effect on security.

  5. 85. Two hundred sales reps must each see only their own accounts in a shared report, and a UserAccess table maps each rep's sign-in name to account IDs. Which approach avoids creating and maintaining 200 roles?

    • A. One role with a DAX filter such as [UserEmail] = USERPRINCIPALNAME() on the UserAccess table
    • B. One role per rep with a static filter such as [RepName] = "Ana Souza", assigned individually
    • C. A single role with no filter, relying on the Viewer workspace role to restrict rows automatically
    • D. A Power Query parameter for the rep's email that each rep edits in the service before viewing
    Show answer & explanation

    Answer: A
    Dynamic row-level security uses USERPRINCIPALNAME() or USERNAME(), which return the signed-in user's UPN in the service, inside a single role's DAX filter; with the proper relationships from the UserAccess mapping table the one role filters differently for every rep. Static roles would mean 200 definitions and assignments to maintain. The Viewer role only makes RLS apply; a role with no filter shows everything. Power Query parameters shape the data at refresh for everyone and can't vary by viewer.

  6. 86. A modeler assigns members to an RLS role in the Power BI service by adding the Microsoft 365 group that the sales team uses for Teams and email, but the assignment is rejected. Which group types can be added?

    • A. Individual users only; group assignments are not supported for row-level security roles
    • B. Security groups, distribution groups, and mail-enabled groups; Microsoft 365 groups aren't supported for RLS roles
    • C. Microsoft 365 groups only, provided the group is first synchronized to the Power BI admin portal
    • D. Any Microsoft Entra group type, provided the semantic model is hosted in a workspace on a Premium or Fabric capacity
    Show answer & explanation

    Answer: B
    RLS role membership in the service accepts individual users and Microsoft Entra security groups, distribution groups, and mail-enabled groups, and Microsoft states explicitly that Microsoft 365 groups aren't supported and can't be added to any RLS role. Groups created inside Power BI can't be added either. Capacity type has no bearing on which group types are accepted, and there is no admin-portal synchronization step that makes Microsoft 365 groups usable.

  7. 87. An analyst with a Fabric free license tries to apply a Confidential sensitivity label to a semantic model in a shared workspace and finds the option unavailable, although labels are enabled for the tenant. What is the most likely reason?

    • A. Applying labels to items outside My workspace requires a Pro or PPU license plus Edit permission on the item
    • B. Labels can be applied only in Power BI Desktop before publishing, never to items that already exist in the service
    • C. Sensitivity labels apply only to reports and dashboards, so semantic models can't be labeled directly
    • D. The workspace must be assigned to a Premium capacity before any of its items can carry a label
    Show answer & explanation

    Answer: A
    To apply sensitivity labels in the Power BI service you need a Pro or Premium Per User license and Edit permission on the content; with a free license you can label items only in My workspace, so a shared workspace is out of reach for this analyst. Labels must also be enabled for the organization and the user must be in a security group permitted to apply them. Labels can be applied in the service to reports, dashboards, semantic models, and dataflows, and no capacity assignment is required.

  8. 88. A data engineer has finished a well-tested semantic model and wants it flagged as endorsed for reuse today, but is not in the group the Power BI admin authorized for certification. What can the engineer do?

    • A. Certify the semantic model, because certification is available to anyone with Build permission on the model
    • B. Apply a Highly Confidential sensitivity label, which appears as an endorsement badge in the hub
    • C. Request certification through the workspace's Contributor role, which grants certification rights
    • D. Promote the semantic model, which any owner or member with write permission on the workspace can do
    Show answer & explanation

    Answer: D
    Power BI offers two endorsement levels: promotion, which any content owner or member with write permissions on the workspace can apply to highlight content they consider valuable, and certification, which only reviewers authorized by the Power BI administrator can apply. The engineer can promote now and follow the organization's process to get the model certified later. Build permission doesn't confer certification rights, the Contributor role doesn't either, and sensitivity labels classify data rather than endorse content.

  9. 89. A department needs scheduled refresh for semantic models owned by several analysts against an on-premises SQL Server, plus a DirectQuery report on the same server. One analyst has installed a personal-mode gateway on their laptop. Why is that insufficient?

    • A. Personal mode supports only Import refresh for its installing user and can't serve DirectQuery or shared data sources
    • B. Personal mode can only connect to cloud sources such as Azure SQL Database, not to servers on the on-premises network
    • C. Personal mode requires a Premium capacity, whereas the standard gateway works with Pro workspaces
    • D. Personal mode gateways expire after 30 days and must be reinstalled by a tenant administrator
    Show answer & explanation

    Answer: A
    The on-premises data gateway in personal mode works only with Power BI, refreshes Import semantic models for the individual who installed it, and doesn't support sharing data sources or centralized credentials; Microsoft's guidance is to use the standard gateway when multiple authors manage sources or when DirectQuery, live connection, or composite models are needed. Personal mode does connect to on-premises sources, needs no Premium capacity, and has no 30-day expiry.

  10. 90. A semantic model in a workspace on a Fabric capacity needs data refreshed every 30 minutes during business hours, and the support team's alias must be emailed when a refresh fails. Which configuration is possible in the semantic model settings?

    • A. Up to 24 scheduled refresh times per day, with failure notifications configured in the workspace's contact list
    • B. Up to 48 scheduled refresh times per day, with additional failure-notification contacts entered in the refresh settings
    • C. Up to 8 scheduled refresh times per day, because every workspace shares the same daily refresh cap
    • D. Unlimited refresh times per day, but failure notifications can be sent only to the semantic model owner
    Show answer & explanation

    Answer: B
    A semantic model on a Premium, PPU, or Fabric capacity can be scheduled for up to 48 refreshes per day, which accommodates a 30-minute cadence during business hours; the eight-per-day cap applies to shared capacity. The refresh settings include 'Email these contacts when the refresh fails', which sends failure notifications to additional recipients such as a support alias in addition to the owner. Unlimited refreshes are only possible programmatically through the XMLA endpoint, and the workspace contact list is not where refresh notifications are configured.

  11. 91. A colleague edited a published report in the Power BI service, adding a new page. The original author then republishes the same .pbix from Power BI Desktop and confirms the replace prompt. What is the result?

    • A. Publishing fails with a conflict error, because a report edited in the service can no longer be overwritten from Desktop
    • B. A second copy of the report is created with a numeric suffix, leaving the service-edited report intact
    • C. The semantic model and the report are replaced by the Desktop versions, so the page added in the service is lost
    • D. The semantic model is replaced but the report keeps the service-added page, because reports merge on publish
    Show answer & explanation

    Answer: C
    When you republish a Power BI Desktop file, the semantic model and the reports created in Desktop replace the versions in the service; the prompt shows how many workspaces, reports, and dashboards are affected and asks you to confirm the replacement, after which changes made to the report in the service are gone. Publishing doesn't merge report pages, doesn't fail because of service edits, and doesn't create a suffixed copy when the same name is confirmed for replacement.

  12. 92. A manager wants an email whenever a dashboard tile showing weekly returns exceeds 500. The tile was pinned from a clustered column chart. Why is the Manage alerts option unavailable, and what change enables it?

    • A. Alerts work only on tiles in a Premium workspace; move the dashboard to a workspace on a capacity
    • B. Alerts require an existing report subscription on the source report; create the weekly subscription first
    • C. Alerts work only on streaming tiles created with Add tile; rebuild the tile from a streaming dataset
    • D. Alerts work only on tiles pinned from gauge, KPI, and card visuals; pin a card showing the returns value
    Show answer & explanation

    Answer: D
    Data alerts can be set only on tiles pinned from report visuals, and only on gauges, KPIs, and cards, so a column chart tile offers no alert option; pinning a card with the weekly returns value enables it. Alerts are available in any workspace to Pro users and don't need a capacity. Subscriptions and alerts are independent features. Tiles created directly on the dashboard with custom streaming data are actually the one kind of streaming tile that can't carry an alert.

  13. 93. A deployment pipeline moves a semantic model from Development to Production. In Development the model reads DevSQL01, but in Production it must read ProdSQL01 without anyone editing the model after each deployment. What should be configured?

    • A. A data source rule (or parameter rule) on the Production stage's semantic model that swaps the source
    • B. A separate .pbix for Production whose queries point at ProdSQL01, published manually after each deployment
    • C. A gateway data source named ProdSQL01 on the Production workspace, which overrides the model's source
    • D. A sensitivity label on the Production model that redirects queries to the production server
    Show answer & explanation

    Answer: A
    Deployment pipelines support deployment rules per stage: data source rules and parameter rules change the values of a semantic model's data sources or parameters when content is deployed to that stage, and the rule keeps applying on every deployment as long as it remains valid. Maintaining a separate production .pbix defeats the pipeline. A gateway data source supplies credentials for a connection but doesn't rewrite which server the model queries. Sensitivity labels classify content and never redirect queries.

  14. 94. A curated set of reports and dashboards must be distributed to 300 people with a simple, consistent navigation experience. Which distribution method fits best?

    • A. Publishing a Power BI app from the workspace
    • B. Emailing a weekly subscription snapshot to everyone
    • C. Granting the 300 people the Viewer role
    • D. Sharing a direct link to each report with everyone
    Show answer & explanation

    Answer: A
    An app packages selected reports and dashboards from one workspace into a single, curated experience with its own navigation, and up to 25 audiences can each see a different subset of that content, which is exactly how Power BI distributes read-only content to hundreds of consumers. Option A gives 300 people the Viewer role on the workspace, which is the raw item list with no navigation and exposes every item, including semantic models. Option B creates 300 separate permission grants per report and no consistent navigation. Option D sends static snapshots that lose all interactivity.

  15. 95. A semantic model has been reviewed by the central data team and should be signposted to users as trustworthy and officially supported. What should be applied?

    • A. A Confidential sensitivity label from Purview
    • B. Certification through the endorsement settings
    • C. A Promoted badge applied by the model's owner
    • D. A Master data label set in the workspace settings
    Show answer & explanation

    Answer: B
    Endorsement has three badges. Certified is the one that signals an organization-authorized reviewer has checked the item, and only users named by the Fabric admin in the certification tenant setting can apply it, which is why it carries authority. Option A, Promoted, can be set by anyone with write permission and only says the creator thinks the item is ready to share. Option B, Master data, marks an item as an authoritative source of core data such as customer lists and is applied per item by admin-designated users, not in workspace settings. Option C is a Purview classification of confidentiality and says nothing about quality or support.

  16. 96. A dataset must be shared so other authors can build their own reports on it without duplicating the model. What should be configured?

    • A. Read permission on the semantic model
    • B. The Viewer role in the model's workspace
    • C. Reshare permission on the semantic model
    • D. Build permission on the semantic model
    Show answer & explanation

    Answer: D
    Build permission is the semantic model permission that lets another author create new reports, dashboards, and Analyze in Excel workbooks on top of an existing model, so one governed model serves many reports. Option A, Reshare, only lets a user pass their own access on to others; it does not allow authoring. Option C, Read, lets a user view reports built on the model but not connect to it and build new content. Option D, the Viewer workspace role, grants Read on workspace items; Build must still be granted explicitly for Viewers, whereas Contributor and higher roles receive it implicitly.

  17. 97. Row-level security has been defined with a role named RegionManager. What additional step is required before it takes effect for users?

    • A. Publish the report to a workspace on a Premium or Fabric capacity
    • B. Assign users or security groups to the role in the Power BI service
    • C. Add the users' UPNs to a column in the RegionManager fact table
    • D. Turn on the relationship's Apply security filter in both directions
    Show answer & explanation

    Answer: B
    Manage roles in Power BI Desktop only stores the role name and its DAX filter. Membership is assigned after publishing, on the semantic model's Security page in the service, where users, distribution groups, mail-enabled groups, or Microsoft Entra security groups are added to the role; until then the role filters nobody. Option B is a relationship setting that only matters for bidirectional filtering of the security filter and does not enable the role. Option A describes the mapping table used for dynamic RLS with USERPRINCIPALNAME(), which still requires role membership. Option C is unnecessary because RLS works in Pro workspaces on shared capacity.

  18. 98. Content in a workspace must carry a classification that follows exported files into Excel and PDF. Which capability provides that?

    • A. Certified endorsement applied to every report in the workspace
    • B. Row-level security roles applied to the underlying semantic model
    • C. Workspace-level access restricted to a Microsoft Entra security group
    • D. Sensitivity labels from Microsoft Purview Information Protection
    Show answer & explanation

    Answer: D
    Sensitivity labels are defined in the Microsoft Purview portal and, when applied to a report or semantic model, are written onto the file produced by export to Excel, PDF, and PowerPoint (export as image), by Analyze in Excel, and by download to .pbix, together with any encryption the label carries. Option C, Certified endorsement, is a quality badge that never leaves the service. Option D, RLS, controls which rows a viewer sees and applies no classification to a file. Option A limits who can open the workspace but marks nothing on an exported workbook or PDF.

  19. 99. Finance users should receive a formatted snapshot of a report in their inbox every Monday morning without opening Power BI. What should be configured?

    • A. A scheduled refresh set to run each Monday at 7 AM
    • B. A dashboard pinned in the Teams channel
    • C. A report subscription with a weekly schedule
    • D. A data alert on a KPI tile checked every 24 hours
    Show answer & explanation

    Answer: C
    Subscriptions email a rendered image of a report page, or on Premium and PPU capacity a full PDF or PowerPoint attachment, on an hourly, daily, weekly, monthly, or after-refresh schedule, with up to 24 subscriptions per report. Option B fires only when a card, KPI, or gauge tile crosses a threshold after a data refresh, not on a calendar. Option C only reloads the semantic model; refresh sends email solely on failure. Option D still requires the user to open Teams and interact with an embedded Power BI page rather than receiving a snapshot in the inbox.

  20. 100. A semantic model refresh must run four times per day, but the workspace is on a shared capacity. What limitation should the analyst plan around?

    • A. Shared capacity blocks scheduled refresh for models that use an on-premises gateway
    • B. Shared capacity permits scheduled refresh only for DirectQuery models
    • C. Shared capacity enforces a two-hour refresh limit but places no cap on daily refreshes
    • D. Shared capacity caps scheduled refreshes per day, unlike dedicated capacity
    Show answer & explanation

    Answer: D
    Import models on shared capacity can be scheduled at most eight times per day, while Premium, Premium Per User, and Fabric capacity allow 48 scheduled refreshes per day and effectively unlimited refreshes through the XMLA endpoint or REST API. Option A is half right: the two-hour refresh time limit on shared capacity is real (five hours on Premium), but the daily cap of eight also exists. Option C is false; gateway-backed refresh works on shared capacity. Option D is backwards: DirectQuery models need no data refresh at all, and scheduled refresh is the Import-mode feature.

2026 statistics

Key facts: PL-300 exam

Time limit
1h 40m
Passing score
700 of 1000
Exam fee
$165
Governing body
Microsoft

This free PL-300 practice test has 160 original questions written to Microsoft's official content outline, last checked against it on August 19, 2026, 100 of them listed on this page and the rest loaded by the drill. Every question shows a worked explanation, and nothing here requires a signup.

The questions are grouped under four outline areas: Prepare the data, Model the data, Visualize and analyze the data and Manage and secure Power BI.

As of 2026, the PL-300 exam fee is $165 (US list price; Microsoft prices the exam by the country or region it is proctored in).

How the PL-300 practice bank covers the outline

160 questions across 4 outline areas — the same areas the page's sections use.

Counts are the live question bank, grouped by the outline area each question was written to.

160 questions across four outline areas. The largest, Model the data, holds 44 questions (28%); the page's sections follow the same split.
Exam format and study resources

Get a free PL-300 study plan

A week-by-week plan plus new practice questions, straight to your inbox.

Official sources

Primary documents used to verify the exam details shown on this page.

Last verified against the official exam content outline:

Frequently asked questions

Are these questions like the real PL-300 items?

They are scenario-driven the same way: a requirement is described and you choose the feature that meets it. What they cannot reproduce are the interactive components Microsoft says the exam may include, where you work in an interface rather than pick an option. Microsoft's free exam sandbox exists for exactly that, so use both.

How are these questions distributed across the exam objectives?

In proportion to Microsoft's published weights: roughly a quarter each on preparing data, modelling data, and visualizing and analyzing data, with the remainder on managing and securing Power BI. That last group is the one most candidates skip in practice and then lose marks on, because it is learned by administering a workspace rather than by building reports.

What score on practice questions means I am ready?

There is no honest conversion, because the real cut score of 700 is scaled rather than a percentage and Microsoft does not publish how many questions the exam contains. A practical working target is consistently clearing 80 percent across all four objective areas, with no single area lagging badly, since the exam samples all four every time.

Do I need Power BI installed to prepare properly?

Yes, and it is the highest-value hour of preparation you can spend. Microsoft states you should be proficient at Power Query and DAX, and neither is learned by reading. Build one small star schema with a marked date table, write a year-to-date and a prior-year measure, publish it, then add a row-level security role and assign yourself to it.

How current are these questions with the exam objectives?

They follow the skills measured that took effect on 20 April 2026, which is the version currently published by Microsoft. Microsoft updates objectives periodically and publishes a change log with each revision, so check the official study guide before your exam date if some months have passed.