What this quiz covers
This quiz focuses on Applied Steps And Query Folding, giving you a quick way to practice the rules, question types, and explanations that matter most for Microsoft Power BI.
A Power BI Desktop query imports 80 million rows from SQL Server. Its Applied Steps are: Source, Navigation, Added Custom, Filtered Rows, and Removed Columns. Added Custom invokes an M function that cannot be translated to SQL. Filtered Rows retains approximately 2% of the source rows. Refresh is slow, but the custom calculation must be preserved.
Which change is most likely to reduce the amount of data retrieved from SQL Server without changing the final result?
Microsoft Power BI Quiz
Practice Applied Steps And Query Folding in Microsoft Power BI with focused quiz questions that help you check what you know, review explanations, and build confidence with test-style prompts.
This quiz focuses on Applied Steps And Query Folding, giving you a quick way to practice the rules, question types, and explanations that matter most for Microsoft Power BI.
Try each quiz question before looking at the correct answer. Use the explanations to review missed ideas, then come back to similar questions until the pattern feels familiar.
A Power BI Desktop query imports 80 million rows from SQL Server. Its Applied Steps are: Source, Navigation, Added Custom, Filtered Rows, and Removed Columns. Added Custom invokes an M function that cannot be translated to SQL. Filtered Rows retains approximately 2% of the source rows. Refresh is slow, but the custom calculation must be preserved.
Which change is most likely to reduce the amount of data retrieved from SQL Server without changing the final result?
Table.Buffer — it caches data in memory within Power Query and actually prevents folding for downstream steps, making the problem worse, not better.
Your study tip: whenever a fold-breaking step exists in a query, always ask "can I move any filters upstream of that step so SQL Server handles row reduction first?"You create a Power Query query against Azure SQL Database by using a native SQL statement. You must add ordinary Power Query filters after the native statement and want those filters to be pushed back to Azure SQL whenever the connector supports doing so.
Which implementation should you use?
Value.NativeQuery is the correct tool when you want to execute a raw SQL statement against a source and preserve the ability to fold subsequent M steps back to that source. By passing [EnableFolding=true] in its options record, you explicitly tell the engine to attempt pushing downstream filters back to Azure SQL as additional SQL clauses. This is option B, and it's the only approach that achieves both goals simultaneously.
Option A is tempting but flawed. Using Sql.Database with the Query option does execute your SQL, but the result is treated as an opaque block — subsequent steps cannot fold back through a custom SQL string in this context. Folding essentially stops at that boundary.
Option C is a red herring. Wrapping the statement in a custom M function doesn't introduce folding capability — it just reorganizes your code. Folding depends on the connector and query structure, not function abstraction.
Option D is the opposite of what you want. Buffering with Table.Buffer forces the entire result into memory before filtering, which completely prevents any query folding for those steps.
A useful study tip: whenever a Power BI question mentions native SQL plus folding, think Value.NativeQuery with EnableFolding=true — it's the designated bridge between raw SQL and foldable M transformations.A query against SQL Server has eight Applied Steps. View Native Query is available when the fourth step is selected but unavailable when the eighth step is selected. The query includes a custom text transformation between those steps.
What is the best method to determine where folding stops?
Two queries select Orders and Customers from the same SQL Server database. Each query contains only transformations that currently fold. You merge Customers into Orders by CustomerID and then expand CustomerSegment. A colleague proposes buffering Customers before the merge to guarantee that the join occurs on SQL Server.
What should you do to maximize the chance that the join is executed by SQL Server?
You need a query to return the 100 transactions with the highest Amount from a relational source. The current Applied Steps first use Keep Top Rows to retain 100 rows and then sort Amount in descending order. Both steps appear capable of folding.
Which modification is required to produce the intended result while still allowing a source-side implementation when supported?
SELECT TOP 100 ... ORDER BY Amount DESC.
A is wrong because buffering breaks query folding entirely — Table.Buffer forces evaluation in memory, preventing source-side execution. B is a dangerous misconception: query folding does not automatically reorder your steps for correctness. Power Query translates steps in the order you define them, so a logically inverted sequence produces wrong results regardless of folding. C is wrong because Keep Bottom Rows on an unsorted table still captures an arbitrary set, and sorting ascending afterward again sorts the wrong 100 records.
The study takeaway: always think of Applied Steps as a pipeline where sequence defines semantics. On Power BI exams, questions about folding often test whether you understand that folding preserves your step order — it doesn't fix logical mistakes for you.A DirectQuery table uses a SQL Server source. A newly added custom M step calls a text-processing function that the connector cannot translate. Power BI reports that the transformation is not supported in DirectQuery mode. The business requires DirectQuery to be retained.
Which solution best satisfies the requirement?
Table.Buffer forces evaluation in-memory during Power Query refresh — but DirectQuery tables don't go through a traditional refresh. Each report interaction fires a live query to the source, so buffering during an import-style refresh doesn't apply here. Answer C is perhaps the most dangerous misconception: disabling query folding doesn't make unsupported transformations work — it just shifts the failure mode, and retrieving an entire source table on every user interaction would be a catastrophic performance problem even if it were possible.
Your study tip: on DirectQuery questions, always ask "where does the computation actually happen?" If the answer is "not at the source," that solution is incompatible with DirectQuery.A developer adds Table.Buffer immediately after a SQL table is selected. The remaining steps filter to one month, remove most columns, and group by CustomerID. The developer expects buffering to make the later steps execute on SQL Server as a single operation.
Which assessment of this design is most accurate?
Table.Buffer in Power Query, the core concept to test is query folding — the engine's ability to translate M steps back into native SQL that runs on the source database.
Query folding works by chaining transformations together so the connector can generate a single optimized SQL statement. Table.Buffer deliberately breaks this chain: it forces Power Query to immediately materialize the entire table into memory before any downstream steps run. This means that filtering, column removal, and grouping can no longer be "seen through" by the SQL connector — they must execute in-memory inside the M engine instead of on SQL Server. So rather than sending one efficient query, you end up pulling a full unfiltered table across the network and then processing it locally. That's why C is correct — buffering may actually increase work by materializing data early and blocking folding for all subsequent steps.
A has the causality backwards. Buffering doesn't batch transformations to SQL Server — it does the opposite, severing the connection that would allow SQL Server to handle them. B is a misconception; grouping operations can fold natively (Power Query can translate Group By into SQL GROUP BY) as long as folding hasn't been interrupted upstream. D is partially true that buffering affects caching, but it's wrong to say it has no effect on refresh evaluation — breaking query folding has a direct and significant performance impact during full refresh.
As a study rule: anything that materializes data mid-query (Table.Buffer, Table.ToList) is a folding fence — nothing downstream can fold back through it.A fact table contains several years of records in Azure SQL Database. You configure incremental refresh by creating RangeStart and RangeEnd parameters. Before filtering the timestamp column, the query converts that column to text and extracts the date portion. The policy validates, but refresh is expected to scan a large amount of data.
Which revision best supports effective incremental refresh and query folding?
RangeStart and RangeEnd allows Power Query to fold that filter into the SQL query as a simple WHERE clause against an indexed column. The database handles the row elimination before any data travels across the network, meaning only the relevant partition's rows are loaded — exactly what incremental refresh promises.
B inverts the logic in a harmful way: converting RangeStart and RangeEnd to text and comparing them against extracted date strings forces Power Query to evaluate string comparisons on the M engine side after pulling all rows, breaking query folding entirely and still scanning the full table.
C misunderstands Table.Buffer, which forces evaluation of the table in memory and explicitly breaks query folding on any subsequent steps. Adding it before the incremental-refresh filters would guarantee a full-table scan — the opposite of the goal.
D applies filters after a GROUP BY-style aggregation, which means all rows must be read and grouped first. Folding is either broken or the partition filtering is applied too late to reduce I/O meaningfully.
Your study tip: always ask yourself, "Does this transformation preserve query folding?" Any step that converts, buffers, or reorders data before the RangeStart/RangeEnd filter is a red flag on incremental refresh questions.A query has these Applied Steps: Source, Promoted Headers, Changed Type, Renamed Columns, and Calculated Revenue. The formula for Calculated Revenue references the renamed columns UnitPrice and UnitsSold. You delete Renamed Columns because you no longer want those display names.
What should you expect, and how should you correct the query?
UnitPrice and UnitsSold. The Calculated Revenue step was built referencing those exact names. When you delete Renamed Columns, those friendly names no longer exist in the pipeline — the columns revert to whatever names Changed Type was producing. Power Query won't silently patch the broken reference; instead, Calculated Revenue throws an error because it's asking for columns that no longer exist by those names. The fix is exactly what A describes: open Calculated Revenue and update its formula to reference the column names that Changed Type actually outputs.
B is wrong because Power Query doesn't maintain hidden aliases. There's no background aliasing system that preserves names after a step is deleted — what you see in the step output is what downstream steps receive.
C is wrong because Changed Type doesn't "adopt" renamed values retroactively. Changed Type only modifies data types; it has no mechanism to inherit or absorb column renaming from a later step that you've deleted.
D is wrong because the data source doesn't auto-rename columns based on changes inside Power Query. The source outputs whatever it outputs; Promoted Headers reads those, but nothing causes the source layer to self-correct.
As a study tip, always trace column name lineage when editing Applied Steps — any step downstream that references a column by name is a potential breakpoint whenever you modify or delete an upstream step.A SQL source has a Quantity column stored as text. Most values are numeric, but some archived rows contain the value N/A. The query currently changes Quantity to a whole number and then filters for OrderYear equal to the current year. All current-year Quantity values are numeric. The conversion step produces errors before the filter is evaluated.
Which change both preserves the intended current-year result and gives the source the best opportunity to reduce rows before local processing?
N/A strings) generates errors immediately when Power Query encounters non-numeric values. Since the current-year filter comes after this step, Power Query must process all rows — including archived N/A rows — before discarding irrelevant years. Moving the OrderYear filter before the type conversion solves both problems at once. The filter can fold to SQL (letting the database return only current-year rows), and since all current-year Quantity values are numeric, the conversion then runs cleanly on a smaller, error-free dataset. That's why C is correct.
A is wrong because Table.Buffer forces data into memory immediately — it actually breaks query folding rather than enabling it, doing the opposite of what the question asks.
B is wrong because error-replacement functions like Table.ReplaceErrorValues do not fold to SQL Server. This answer contains a false factual claim, which is a deliberate trap.
D is wrong because removing the current-year filter changes the intended result — you'd return records from all years, not just the current one.
As a study habit, remember: filters fold, conversions often don't. Always push row-reducing filters as early in your query steps as possible to maximize folding opportunities.