Microsoft · Free Practice Questions · Last reviewed May 2026
30real exam-style questions organised by domain, each with the correct answer highlighted and a plain-English explanation of why it's right — and why the others are wrong.
A company uses Power BI to analyze sales data from a SQL Server database. The database contains a table 'Sales' with 10 million rows. The business analysts need to create daily reports that aggregate sales by region and product category. To optimize report performance, which data preparation technique should be applied?
Increase the row limit in Power Query to load all rows.
Remove unused columns from the query.
Import the entire table and aggregate in Power BI.
Perform aggregation in SQL before importing.
Aggregating at source reduces rows significantly.
During data refresh in Power BI, an error occurs: 'The column 'OrderID' of the table 'Orders' contains a duplicate value and this column is part of a primary key.' The table 'Orders' is imported from an Azure SQL database. What is the most likely cause of this error?
The 'Orders' table was reordered in Power Query.
Data type mismatch between the source and Power BI.
A calculated column is referencing the 'Orders' table.
The source table has duplicate 'OrderID' values.
Duplicate values violate the primary key constraint.
A data analyst needs to combine two queries in Power Query: 'Sales2023' and 'Sales2024', both with identical column structures. Which operation should the analyst use to append the rows from 'Sales2024' to 'Sales2023'?
Append Queries
Append stacks rows from multiple tables.
Merge Queries
Group By
Pivot Column
A Power BI report contains a table with a column 'Date' of type date. The report users need to filter data by fiscal year, which starts on April 1. What is the best practice to support this requirement during data preparation?
Create a separate date table in Power Query with a fiscal year column.
A dedicated date table is the recommended approach.
Split the date column into year, month, and day columns.
Use a DAX calculated table to generate fiscal year dates.
Add a calculated column in the existing table using DAX.
When importing data from a CSV file, Power Query detects that the first row contains column headers. However, the actual data starts from row 2. The analyst notices that some rows have extra columns due to commas within quoted fields. What is the most efficient way to handle this issue?
Remove the top row and then split columns manually.
Change the file encoding from UTF-8 to ANSI.
Use 'Split Column by Delimiter' and choose 'Comma' with the option to split at each occurrence.
This correctly handles quoted commas.
Use 'Replace Values' to replace commas with semicolons.
Which TWO actions can improve data refresh performance in Power BI?
Merge all queries into a single query.
Add calculated columns in Power Query instead of DAX.
Disable load for intermediate queries used only for reference.
Prevents unnecessary data loading.
Filter rows at the source to reduce data volume.
Fewer rows means faster refresh.
Keep all columns from the source data to avoid re-importing.
Want more Prepare the data practice?
Practice this domainYou manage a Power BI workspace that contains a dataset refreshed daily from an on-premises SQL Server. Users report that the report shows data from two days ago. You verify that the scheduled refresh ran successfully this morning. What is the most likely cause?
The gateway is using a cached version of the data due to a misconfigured data source.
A misconfigured gateway cache can cause stale data.
The refresh took longer than expected and timed out.
The scheduled refresh is not set to refresh the dataset.
The on-premises data gateway is offline.
You need to deploy a Power BI report from a development workspace to a production workspace. You want to ensure that the report uses the production dataset connection string without manual changes. What should you use?
Manually update the data source in the production workspace after deployment.
Use a Power BI template (.pbit) and change the connection string before publishing.
Configure a deployment pipeline with parameter rules to override the data source.
Pipeline rules can automatically set production parameters.
Publish the report directly to the production workspace and update the dataset.
Your Power BI dataset uses DirectQuery to an Azure SQL Database. Users complain that the report is slow. You need to improve query performance without changing the data source. What should you do?
Reduce the number of columns and rows retrieved by the report visuals.
Less data means faster queries.
Add more visuals to the report to distribute the load.
Switch the dataset to Import mode.
Increase the scheduled refresh frequency.
You are deploying a Power BI solution to a customer. The customer requires that all report access be controlled via Azure Active Directory (Azure AD) groups. You have a single workspace with multiple reports. What is the best practice for managing permissions?
Create a Power BI group and add users to it.
Assign each user directly to the workspace role.
Share each report individually with users.
Add an Azure AD group to the workspace role.
This is the recommended approach for scalable access.
You have a Power BI dataset that is refreshed every hour from an on-premises data source using an enterprise gateway. The refresh consistently fails at 2:00 AM. What is the most likely cause?
The on-premises data gateway is scheduled to reboot at 2:00 AM.
A reboot would cause the gateway to be unavailable.
The refresh is failing due to a transient network error.
The data source is undergoing maintenance in the cloud.
The scheduled refresh time conflicts with another refresh.
Which TWO actions should you take to ensure that a Power BI report deployed to production is available to users even if the gateway is offline for maintenance?
Create a Power BI Premium capacity to ensure high availability.
Schedule the dataset refresh to run during the maintenance window.
Use DirectQuery instead of Import mode to avoid gateway dependency.
Create a separate dataset in the cloud that caches the data.
A cloud dataset can be refreshed when the gateway is online.
Implement a disaster recovery plan that includes a secondary gateway.
A secondary gateway can take over during maintenance.
Want more Deploy and maintain assets practice?
Practice this domainA company has a Power BI dataset that contains a date table with columns: Date, Year, Month, Quarter, Day. The data model also includes a sales fact table with a SalesDate column. To enable time intelligence functions like TOTALYTD, what is the minimum requirement for the relationship between these tables?
Create a calculated column in the sales table to extract the date part and relate it to the date table.
Create a one-to-many relationship from the date table to the sales table and mark the date table as a date table.
This is the standard requirement for time intelligence.
Create a many-to-many relationship between the date table and the sales table.
Create a one-to-many relationship from the sales table to the date table with bidirectional cross-filtering.
A Power BI developer creates a star schema with a fact table Sales and dimension tables Customer, Product, Date. The relationship between Sales and Date is active. The developer wants to create a measure that calculates the total sales for the previous month relative to any selected month. Which DAX expression should the developer use?
CALCULATE(SUM(Sales[Amount]), DATESMTD(Date[Date]))
CALCULATE(SUM(Sales[Amount]), SAMEPERIODLASTYEAR(Date[Date]))
CALCULATE(SUM(Sales[Amount]), DATEADD(Date[Date], -1, MONTH))
CALCULATE(SUM(Sales[Amount]), PREVIOUSMONTH(Date[Date]))
PREVIOUSMONTH returns the set of dates in the previous month based on the current filter context.
A Power BI data model includes a table 'Orders' with columns OrderID, CustomerID, OrderDate, SalesAmount. The model also has a 'Date' table and a 'Customer' table. The relationships are: Orders[CustomerID] -> Customer[CustomerID] (many-to-one, single direction) and Orders[OrderDate] -> Date[Date] (many-to-one, single direction). A user creates a measure that sums SalesAmount and then filters by a slicer on Customer[City]. The slicer works correctly. However, when the user adds another slicer on Date[Year], the measure does not respect both slicers simultaneously. What is the most likely cause?
The Customer and Date tables are not related to each other.
The relationship between Orders and Date is inactive.
The relationships are set to single direction, so filters from Date do not propagate to Orders.
The measure might be using ALL or ALLEXCEPT that removes the filter context from the Date table.
If the measure removes filters from Date, then the slicer on Date[Year] would be ignored.
A Power BI developer needs to model data from two sources: an on-premises SQL Server database and a cloud-based Salesforce instance. The developer wants to create a star schema in Power BI. Which approach should the developer use to combine the data?
Use DirectQuery for both sources and create relationships in the model.
Use Power Query in Power BI Desktop to import both sources and merge/append queries as needed.
Power Query can import from multiple sources and shape data.
Use Power BI dataflows to ingest both sources and then reference them in a dataset.
Create a composite model using DirectQuery for SQL Server and Import for Salesforce.
A Power BI developer has a fact table that contains sales data at the transaction level. The table includes columns: TransactionID, ProductID, CustomerID, DateKey, Quantity, UnitPrice, Discount, and SalesAmount. The developer wants to create a measure for total sales after discount. Which approach is best for performance and accuracy?
Create a measure: SUM(Sales[SalesAmount]) - SUM(Sales[Discount])
Add a calculated column in Power Query: NetAmount = Quantity * UnitPrice - Discount, then create a measure: SUM(Sales[NetAmount])
Calculated columns are computed at refresh time, improving query performance.
Create a measure: SUMX(Sales, Sales[Quantity] * Sales[UnitPrice] - Sales[Discount])
Create a measure: SUM(Sales[Quantity] * Sales[UnitPrice]) - SUM(Sales[Discount])
A Power BI developer is designing a data model for sales analysis. The model includes a Sales fact table and dimension tables: Product, Customer, Date, and Store. Which TWO design considerations are best practices for optimizing query performance?
Configure bidirectional cross-filtering between all dimension tables and the fact table.
Use multiple inactive relationships between fact and dimension tables to support different analyses.
Create a separate date table and mark it as a date table to enable time intelligence functions.
A date table is essential for time-based calculations and filtering.
Use many-to-many relationships between dimension tables and the fact table to simplify the model.
Reduce the cardinality of columns in dimension tables by using surrogate keys instead of natural keys.
Lower cardinality improves compression and query performance.
Want more Model the data practice?
Practice this domainA Power BI report uses a measure that calculates Year-over-Year sales growth. Users report that the measure shows incorrect values for January 2024 when compared to January 2023. The data model contains a Date table with a continuous date range from January 1, 2020 to December 31, 2024. Which DAX function is most likely causing the issue?
PARALLELPERIOD
DATEADD
SAMEPERIODLASTYEAR
SAMEPERIODLASTYEAR is the most likely cause because it returns the same period from the previous year, but if the Date table lacks data for the entire previous period, it can produce incorrect results for month-over-month comparisons.
PREVIOUSYEAR
A company wants to create a Power BI report that shows sales performance by region. The data contains a table 'Sales' with columns: Date, Amount, RegionID, and ProductID. They also have a 'Regions' table with RegionID and RegionName. They want to display a matrix visual with RegionName on rows and Year on columns, with the sum of Amount as values. However, the report displays only 'RegionID' instead of 'RegionName'. What is the most likely cause?
The relationship is configured as many-to-many.
The relationship direction is set to Both.
The RegionID column in the Sales table is hidden.
There is no active relationship between the Sales and Regions tables.
Without an active relationship, Power BI cannot propagate filters from Sales to Regions, so it displays the foreign key column (RegionID) instead of RegionName.
A Power BI report includes a bar chart showing total sales by product category. The report designer wants to add a trend line to the chart to show the overall sales trend over time. Which type of visual should be used instead?
Stacked bar chart
Line chart
A line chart is the standard visual for showing trends over time, and it supports adding a trend line.
Scatter chart
Pie chart
A Power BI report contains a table visual that displays employee names and their total sales. The data model includes an Employee table with columns: EmployeeID, Name, Department, and HireDate. The Sales table has columns: SaleID, EmployeeID, Amount, and SaleDate. The relationship between Employee and Sales is one-to-many. The user wants to see only employees who have made at least one sale. However, the table shows all employees, including those with no sales (blank Amount). What is the most likely reason?
The EmployeeID column in the Employee table is hidden.
The relationship is many-to-one, not one-to-many.
The relationship direction is set to Single from Employee to Sales.
There is no visual-level filter to exclude blank values.
To show only employees with sales, a visual-level filter should be applied on the Amount field to exclude blanks.
A data analyst creates a Power BI report that uses a date table with a continuous date range. They want to calculate the running total of sales over the last 12 months, ending on the last date in the current filter context. Which DAX expression should they use?
CALCULATE(SUM(Sales[Amount]), DATESBETWEEN('Date'[Date], MAX('Date'[Date]) - 365, MAX('Date'[Date])))
DATESBETWEEN with MAX date minus 365 days approximates the last 12 months, but this may not account for leap years; however, among the options, this is the most appropriate for a running 12-month total. A more precise method would use DATESINPERIOD, but that is not listed.
CALCULATE(SUM(Sales[Amount]), DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -12, MONTH))
TOTALMTD(SUM(Sales[Amount]), 'Date'[Date])
CALCULATE(SUM(Sales[Amount]), DATESYTD('Date'[Date]))
A Power BI report includes a slicer for 'Year' and a line chart showing monthly sales. The report designer wants to ensure that when a user selects a year in the slicer, the line chart shows only the months of that year, with month names on the x-axis sorted chronologically. Which TWO actions must be taken?
Mark the Date table as a date table in the model.
Marking the table as a date table enables time intelligence functions and ensures proper date behavior.
Create a date hierarchy with Year and Month.
Set the slicer to 'Single select' mode.
Set the 'Sort by Column' property for Month to a numeric month number column.
This ensures months are sorted chronologically rather than alphabetically.
Hide the Month column in the Date table.
Want more Visualize and analyze the data practice?
Practice this domainYou are a Power BI administrator. A user reports that a shared dashboard shows 'Sensitive data detected' for certain visualizations, but the dashboard is configured with row-level security (RLS). What is the most likely cause of this issue?
The dashboard owner has not granted the user 'Build' permission on the dataset.
RLS is incorrectly configured and allowing users to see data they should not.
A Microsoft Purview sensitivity label is applied to the dataset or report.
Sensitivity labels can cause 'Sensitive data detected' messages regardless of RLS.
The user is viewing the dashboard in a browser that does not support sensitivity labels.
A Power BI administrator needs to enforce that all datasets published to the service use certified data sources only. Which two settings should be configured? (Choose two.)
Use Microsoft Sentinel to audit Power BI activity logs and flag non-certified data sources.
Sentinel can ingest audit logs to detect and alert on use of uncertified data sources.
Enable 'Certification' for dataflows in the Power BI tenant settings.
Enable 'Certification' for data sources in the Power BI tenant settings.
This setting allows administrators to mark specific data sources as certified and enforce their use.
Configure row-level security (RLS) on all datasets.
Set up B2B guest user permissions to restrict external data sources.
You are a Power BI administrator. A user reports that their scheduled data refresh fails with error 'The data source credentials are no longer valid.' The dataset uses a SQL Server database with Windows authentication. What should you do first to resolve the issue?
Reinstall the on-premises data gateway on the server.
Reassign the dataset to a different Premium capacity.
Modify the dataset to use 'Impersonate the authenticated user' for data sources.
Ask the user to update the data source credentials in the Power BI service dataset settings.
Windows credentials may expire; updating them in the service resolves the error.
You are a Power BI administrator. Your organization uses Microsoft Purview to manage sensitivity labels. You need to ensure that when a report is exported to PDF, the sensitivity label is automatically applied to the PDF file. What should you configure?
Enable the tenant setting 'Apply sensitivity labels to exported data' in the Power BI admin portal.
This setting ensures that when a report with a sensitivity label is exported, the label is embedded in the exported file.
Enable 'Microsoft Purview Information Protection' file encryption settings.
Set the default sensitivity label for the workspace to 'Confidential'.
Configure a Microsoft Purview auto-labeling policy for Power BI reports.
A Power BI administrator wants to allow users to create dashboards and reports, but prevent them from sharing content outside the organization. Which two settings should be configured in the Power BI admin portal? (Choose two.)
Disable 'Create workspaces' in the tenant settings.
Disable 'Export data' in the tenant settings.
Disable 'Featured tables' in the tenant settings.
Disable 'Share content with external users' in the tenant settings.
This setting prevents users from sharing reports and dashboards with external email addresses.
Disable 'Publish to web' in the tenant settings.
This prevents users from creating public embed codes that can be shared outside the organization.
You are a Power BI administrator. A Power BI dataset owner reports that the dataset is not refreshing automatically, but manual refreshes work fine. The dataset uses a cloud data source (Azure SQL Database) with OAuth2 credentials. What is the most likely cause?
Row-level security (RLS) is misconfigured.
The on-premises data gateway is offline.
The dataset exceeds the refresh limit for the assigned capacity.
The OAuth2 token used for the data source credentials has expired.
Expired OAuth tokens prevent automatic refreshes, but manual refreshes prompt the user to reauthenticate.
Want more Manage and secure Power BI practice?
Practice this domainThe PL-300 exam has 50 questions and must be completed in 120 minutes. The passing score is 700/1000.
Business intelligence scenario questions on Power BI data models, DAX expressions, report design, row-level security, deployment pipelines, and governance. Some question sets are case-study based, presenting a business scenario followed by multiple related questions.
The exam covers 5 domains: Prepare the data, Deploy and maintain assets, Model the data, Visualize and analyze the data, Manage and secure Power BI. Questions are weighted by domain — higher-weight domains appear more on your actual exam.
No. These are original exam-style practice questions written against the official Microsoft PL-300 exam objectives. They are not copied from the real exam. Courseiva focuses on genuine understanding, not memorisation of braindumps.
Courseiva tracks your accuracy per domain and routes you toward weak areas automatically. Free, no account required.