26. 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.
27. 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.
28. 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.
29. 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.
30. 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.
31. 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.
32. 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.
33. 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.
34. 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.
35. 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.
36. 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.
37. 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.
38. 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.
39. 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.
40. 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.
41. 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.
42. 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.
43. 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.
44. 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.
45. 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.
46. 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.
47. 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.
48. 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.
49. 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.
50. 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.