These pl 300 sample questions are scenario-based items written to the real exam's style, each labeled by domain, with the correct answer shown after the options and a full explanation underneath. Use them to check your reasoning on Prepare the data, Visualize and analyze the data, and Manage and secure Power BI before attempting a complete timed practice test.
These pl 300 sample questions match the real exam's scenario style, labeled by domain from our PL-300 syllabus, with the answer after the options and an explanation below it.
Sample questions
Q1
Domain: Prepare the data
A telecom operator stores call-detail records as 12 monthly CSV files in one folder; each file has about 900,000 rows. You need to enrich every call detail row with plan attributes from a small CSV dimension table and produce one flattened Power Query output table in Power BI Desktop. The solution must stay within Power Query's per-merge row ceiling. Which approach should you use?
- A. Merge the dimension table with the full 12-month CSV table, then remove unneeded columns.
- B. Keep the monthly CSVs and dimension table as separate queries and create a relationship in the data model.
- C. Merge each monthly CSV with the dimension table in a separate query, then append the 12 results.
- D. Append the 12 monthly CSVs first, then merge the single result with the dimension table.
Answer: C
The correct approach keeps each merge operation under Power Query's per-merge row ceiling by merging one monthly partition at a time, then appending the merged results. The strongest distractor is the append-then-merge option: it creates a single 10.8-million-row input before the merge, so the merge exceeds the per-merge ceiling even though the final output would have the same data. The general rule is to identify whether a limit applies per operation or per input partition; when it does, keep each operation under the limit and combine after the expensive operation. Appending is a row-stacking operation and is not the operation that hits the per-merge ceiling.
Q2
Domain: Prepare the data
You are a data analyst for a media streaming company. The Power Query query named NetworkBlocks loads the company’s network address blocks and applies all required cleaning and normalization steps. You need to create a new query that compares each address block with every other address block to detect overlapping or conflicting address space. The comparison must always use the same clean, normalized rows as NetworkBlocks, even if you later change those steps. Which approach should you use?
- A. Append NetworkBlocks to itself and group by range to flag duplicate address blocks.
- B. Duplicate the NetworkBlocks query, then merge NetworkBlocks with the duplicate query.
- C. Recreate the source query and transformations in a new query, then merge with NetworkBlocks.
- D. Reference the NetworkBlocks query, then merge NetworkBlocks with the referenced query.
Answer: D
This is correct because the overlap comparison must stay in sync with any changes made to NetworkBlocks. A reference query keeps a live dependency on the original query, so the self-merge always uses the same current clean rows. The duplicate option is the strongest distractor: it can also be used in a merge, but a duplicate is an independent copy, so later changes to the normalization steps in NetworkBlocks will not automatically appear in the duplicate and the comparison can become stale. Use a reference when the new query must track an existing query; use a duplicate when the new query must be edited independently without affecting the original.
Q3
Domain: Prepare the data
A regulated broker receives JSON trade files in a date-partitioned Azure Data Lake Storage Gen2 folder every business day. Your workspace is on Power BI Premium capacity. You need to expose the data as a single table to multiple Power BI semantic models. The table must be refreshed within one hour of the 8:00 AM file arrival; a full reload of every partition currently takes more than five hours. What should you do?
- A. Use a dataflow to connect to the date-partitioned folder, expand the JSON records to a table, add RangeStart/RangeEnd filters, and apply incremental refresh.
- B. Use a Power Automate flow that starts a full refresh of the dataflow as soon as the new JSON file is detected in the folder.
- C. Use Power Query Desktop to connect to the folder, expand the JSON records to a table, publish a semantic model, and schedule a daily full refresh.
- D. Use Power Query Online in a dataflow to connect to the folder, expand the JSON records to a table, and run a full refresh on schedule.
Answer: A
This is correct because the requirement is not only to flatten nested JSON into a table; the refresh must finish in the one-hour window, and a full reload consumes more than five hours. Incremental refresh with RangeStart/RangeEnd filters processes only the newly added or changed date partitions, so the recurring refresh can meet the latency requirement. The strongest distractor is the Power Query Desktop option that schedules a daily full refresh of the published semantic model: it is a legitimate way to flatten the JSON, but it leaves the multi-hour full reload in the critical path. The rule that generalises is that any large recurring load with a tight refresh window should be transformed in Power Query and then configured for incremental refresh rather than full refresh.
Q4
Domain: Manage and secure Power BI
Your airline's data team publishes a certified Power BI dataset containing a Flight Status dimension table with On Time, Boarding, Delayed, and Cancelled. You connect live to this dataset from Power BI Desktop to build a report. The operations director wants every status visual to show the workflow order Boarding, On Time, Delayed, Cancelled rather than alphabetical, and you cannot modify the shared dataset. What should you do?
- A. In the report, change each visual's sort order to descending on the existing Status field to show the workflow order.
- B. Create a calculated column in your report that maps each status to an integer and set that column as the Sort by column for Status.
- C. In the report, create a Status Sort Order calculated table linked to the shared dataset and sort by the Status table's Order field.
- D. Ask the dataset owner to add a Status Sort Order column to the Status dimension table and set it as the Sort by column for Status.
Answer: D
Because the report uses a live connection, the report model is read-only: Power BI Desktop does not allow creating calculated columns or calculated tables, and the Sort by column property cannot be set at the report layer. Sort by column is a model-level property on the Status column, so the Status dimension must already contain an order column and the property must be set in the source dataset. The strongest distractor is adding a calculated column in the report: that would work in an import model, but it is not available with a live connection. The general rule is that live connections expose only the model behavior already published; custom field ordering must be defined in the shared dataset, while report-level sorting is limited to ascending/descending on fields in the visual.
Q5
Domain: Visualize and analyze the data
A university research group logs every participant action on a survey platform. The Power BI model imports all raw events, and refresh times have become unacceptable. Analysts refresh their report pages manually throughout the day, and the research board requires that a completed response appear on the first refresh after it is recorded. You must improve model performance without giving up that freshness. What should you do?
- A. Create a DirectQuery report against a source view that pre-aggregates raw events to one row per completed response.
- B. Split raw events into a smaller fact table and lookup dimension tables, then import the normalized model.
- C. Remove unused columns from the raw event table and filter it to only the last 90 days.
- D. Import an aggregated table that stores one row per completed response and use that table for all report visuals.
Answer: A
The freshness requirement is the deciding constraint: data must be current when the analyst refreshes the report page. DirectQuery queries the source system on demand, so the pre-aggregated view returns current data without waiting for a scheduled import. The imported aggregated table is the strongest distractor because it is a classic granularity-reduction technique, but an imported table is only as current as the last import and cannot meet an on-demand freshness requirement. The rule to generalise is: when the business requires near-real-time answers, keep the data connection live with DirectQuery and push aggregation into the source so the live query does not scan every raw event.
Q6
Domain: Visualize and analyze the data
You are building a Power BI report for the network operations team at a healthcare provider. The dataset contains one row per DHCP subnet with starting IP, ending IP, and the number of connected medical devices. Several subnets have overlapping or conflicting network address space. The report must allow screen reader users to determine exactly which ranges conflict. Which visual approach should you use?
- A. Use an area chart with transparent fills so overlapping ranges appear along an IP-address axis.
- B. Add a bookmark that orders each subnet page so screen readers cycle through them sequentially.
- C. Use a matrix with an Overlap column that uses text and conditional formatting icons.
- D. Add a pie chart that shows the percentage of connected medical devices in each subnet.
Answer: C
The matrix with an Overlap column and conditional formatting icons is correct because a screen reader can step through the cell values as text, so the exact conflicting ranges are discoverable, and the icons provide a non-color cue in addition to the text. The strongest distractor is the transparent area chart: it makes the overlap obvious to a sighted user at a glance, but it fails the stated accessibility constraint because chart geometry is not presented as readable text and cannot give the exact range endpoints. The general rule for accessible Power BI reports is to favor text-based visuals such as tables and matrices whenever the task requires exact data comparison, and when using color, always pair it with another encoding such as text, shape, or icons.
Q7
Domain: Visualize and analyze the data
You support an industrial IoT platform. The Telemetry table contains one row for each network probe: ProbeTime, DeviceId, IPAddress, and BytesSent. DeviceId uniquely identifies a physical device. Devices are probed many times per hour. Factories use overlapping private IP ranges, so the same IPAddress can belong to different devices. You need a DAX measure that reports the number of unique devices detected per hour. Which DAX expression should you use?
- A. Unique Devices = DISTINCTCOUNT ( 'Telemetry'[IPAddress] )
- B. Unique Devices = CALCULATE ( COUNT ( 'Telemetry'[DeviceId] ) )
- C. Unique Devices = CALCULATE ( COUNTROWS ( 'Telemetry' ) )
- D. Unique Devices = DISTINCTCOUNT ( 'Telemetry'[DeviceId] )
Answer: D
The DISTINCTCOUNT(DeviceId) option is correct because DeviceId is the unique key for a physical device. The current filter context, such as the selected hour in the visual, is applied before DISTINCTCOUNT evaluates, so a device probed many times in that hour is counted once. The strongest distractor is the IPAddress-counting option: it treats IP addresses as device identities, but overlapping or conflicting network address space means the same IP can be reused for different devices, so a distinct count of IP addresses would undercount devices. The general rule is to aggregate on a key that is guaranteed to be unique, such as a surrogate device key, rather than on an attribute like an IP address in overlapping networks.
Q8
Domain: Visualize and analyze the data
An industrial IoT platform stores temperature telemetry for 20,000 sensors in Azure SQL Database. The Power BI report connects to this database by using DirectQuery. The operations team cannot switch the dataset to Import mode because that would require a gateway and a full refresh during business hours. Analysts need a new DAX measure that shows the average temperature per device. What should you do?
- A. Add a calculated column to the sensor table that stores the average temperature.
- B. Create a quick measure using Average per category and set Device as the category.
- C. Switch to Import mode, perform a full refresh, and create a quick measure.
- D. Create a DAX measure manually by using AVERAGEX to average temperature per device.
Answer: D
This is correct because the dataset is in DirectQuery mode, and quick measures are not supported in DirectQuery mode. Since the team cannot switch the dataset to Import mode, the only acceptable way to create the required measure is to author the DAX formula directly. The strongest distractor is the option that switches the dataset to Import mode before creating a quick measure; that workaround would make quick measures available, but it requires the full refresh and downtime that the scenario forbids. The general rule is to check the storage mode before relying on quick measures: in DirectQuery mode, write the DAX measure manually or change the storage mode only if operational constraints allow.
Q9
Domain: Visualize and analyze the data
A media streaming company stores playback failures in a Power BI semantic model. A lookup table maps each client IP to a network region, but the table has overlapping CIDR ranges because two acquired networks share address space. You need to detect playback-failure anomalies for the weekly operations review by end of day. You may create reports and measures, but you cannot add calculated tables, calculated columns, or new queries to the model. What should you do?
- A. Consolidate the CIDR ranges in Power Query into one non-overlapping table and add it to the model.
- B. Create a line chart of failures by region from the existing lookup table and enable Find anomalies.
- C. Create a calculated table using the longest-prefix rule and use its region field in the line chart.
- D. Create a line chart of total failures by date and enable Find anomalies in the Analytics pane.
Answer: D
The total-failures line-chart option is correct because it uses the existing model unchanged and follows the supported anomaly-detection workflow: a line chart with a date axis and Find anomalies enabled in the Analytics pane. The overlapping CIDR ranges in the IP-to-region lookup make a regional count unreliable, and the model-change restriction rules out resolving them with a calculated table or a Power Query table. The raw regional line-chart option is the strongest distractor: it appears to satisfy the anomaly-detection request, but because one session can match multiple overlapping ranges, its detected outliers are likely artifacts. The general rule is: when a dimension is unreliable and you are not allowed to fix it, aggregate at a level that avoids the bad dimension before applying time-series anomaly detection.
After you work through these
This is a sample, not full coverage. For every domain at its published weighting, timed like the real exam, use our PL-300 practice test. Missed one? Revisit that domain in the PL-300 study plan. These pl-300 practice questions are multiple-choice only; see PL-300 exam format.
Exam facts on this page come from Microsoft’s own pages (official exam page). Prices, versions and policies change — confirm there before you book.
