Courseiva

CCNA Model the data Questions

52 of 127 questions · Page 2/2 · Model the data · Answers revealed

76
MCQmedium

You are building a star schema in Power BI. A fact table contains sales transactions with columns: OrderID, CustomerID, ProductID, Quantity, UnitPrice, Discount, and OrderDate. You need to create a dimension table for customers. Which columns should be included in the Customer dimension?

A.CustomerID, CustomerName, ProductID
B.CustomerID, CustomerName, OrderID
C.CustomerID, CustomerName, OrderDate
D.CustomerID, CustomerName, City, Region
AnswerD

This option correctly represents a Customer dimension: CustomerID serves as the unique key, while CustomerName, City, and Region are all stable, customer-specific descriptive attributes that are guaranteed to be the same for every order placed by that customer. Each row corresponds to exactly one customer, maintaining the grain and enabling clean one-to-many joins to the fact table. These attributes support meaningful slicing by customer geography without causing duplication or row multiplication in the underlying fact data.

Why this answer

Option D is correct because a customer dimension should contain the customer's unique key (CustomerID) plus descriptive attributes that describe the customer, such as CustomerName, City, and Region, which are appropriate for slicing and filtering sales facts. In a star schema, the dimension holds only attributes about the entity, while transactional and numeric fields stay in the fact table. Options A and B incorrectly include ProductID and OrderID, which are keys belonging to other dimensions or the fact table, not customer attributes.

Option C incorrectly includes OrderDate, which is a date attribute that belongs in a separate Date dimension, not the Customer dimension.

77
MCQmedium

Refer to the exhibit. You apply the above RLS rule to a semantic model. The rule is intended to restrict sales data by the user's region, which is stored in the user's email domain (e.g., user@west.contoso.com). However, the rule does not filter any rows. What is the most likely issue?

A.The Sales table does not have a Region column.
B.USERPRINCIPALNAME() is not available in the current Power BI version.
C.The filter expression compares the full UPN to the Region column, which likely contains only the region name.
D.The RLS rule is not applied to the semantic model.
AnswerC

The RLS predicate uses USERPRINCIPALNAME(), which returns the complete user principal name including the domain suffix, for example alice@west.contoso.com. If the Region column stores only simple region values such as 'West' or 'Central', a direct equality comparison will never match because 'West' is not equal to 'alice@west.contoso.com'. Therefore, every row is filtered out and the table appears empty.

Why this answer

The correct answer is C: the filter expression compares the full UPN to the Region column, which likely contains only the region name. USERPRINCIPALNAME() returns the entire sign-in name such as user@west.contoso.com, so an equality test against a Region value like "West" will never match and no rows are filtered. The rule should instead extract the subdomain or use a mapping table (for example, using SEARCH or PATHITEM-style parsing) to derive the region before comparing.

Option A is unlikely because the scenario states the rule is intended to restrict by region and the failure is that it filters nothing, which points to a value mismatch rather than a missing column. Option B is false because USERPRINCIPALNAME() is supported in Power BI for RLS. Option D is incorrect because if the rule were not applied at all, that would be a deployment issue, but the question focuses on the rule's expression logic.

78
MCQmedium

You have a Power BI data model with a table that contains duplicate rows. You want to remove duplicates in Power Query. Which transformation should you use?

A.Replace Values
B.Remove Duplicates
C.Filter Rows
D.Group By
AnswerB

Remove Duplicates is the dedicated Power Query transformation that removes rows with identical values across all selected columns, retaining only the first occurrence. By default, it considers all columns, and if a table contains duplicate records, selecting this option from the context menu or the ribbon will directly reduce the row count to only unique combinations. This operation is case-sensitive and treats nulls as values to compare, making it the correct and intended method for eliminating duplicate tabular data.

Why this answer

The correct option is B, Remove Duplicates, because it is the Power Query transformation specifically designed to eliminate duplicate rows from a table by comparing all columns (or selected columns) and keeping only the first occurrence of each unique row. In this scenario, the table contains duplicate rows, so applying Remove Duplicates directly addresses the requirement without altering the underlying data values. Replace Values (A) only substitutes specific text or numbers and does not remove rows.

Filter Rows (C) excludes rows based on conditions but cannot identify duplicates across all columns. Group By (D) aggregates rows and would change the table structure rather than simply removing duplicate rows.

79
MCQeasy

You are building a Power BI semantic model that includes a Customers table and a Sales table. The Customers table has a unique CustomerID column. The Sales table has a CustomerID column that references the Customers table. You need to create a relationship between the two tables. Which type of relationship should you create?

A.Many-to-many relationship between Customers and Sales.
B.One-to-many relationship with Customers as the one side and Sales as the many side.
C.One-to-one relationship between Customers and Sales.
D.Many-to-one relationship with Sales as the one side and Customers as the many side.
AnswerB

This is the correct relationship because each customer appears once in the Customers table but can have multiple sales transactions in the Sales table. A one-to-many relationship from Customers to Sales ensures that filtering on Customers propagates to Sales, which is typical for a dimension-to-fact relationship in a star schema.

Why this answer

The correct relationship is one-to-many from Customers to Sales because each customer is unique in the Customers table and can have multiple related rows in the Sales table. This is the standard dimension-to-fact relationship in a star schema, enabling efficient filtering and aggregation.

Exam trap

The trap here is confusing the direction of the relationship or assuming a many-to-many relationship is needed when unique keys exist.

80
MCQhard

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?

A.The Customer and Date tables are not related to each other.
B.The relationship between Orders and Date is inactive.
C.The relationships are set to single direction, so filters from Date do not propagate to Orders.
D.The measure might be using ALL or ALLEXCEPT that removes the filter context from the Date table.
AnswerD

A measure that uses ALL('Date') or ALLEXCEPT('Date') inside CALCULATE explicitly removes the filter context from the entire Date table or from all Date columns except those specified. For instance, CALCULATE(SUM(Orders[Amount]), ALL('Date')) would ignore a slicer on Date[Year], because ALL('Date') clears every filter applied to the Date table, including the Year column. ALLEXCEPT('Date', 'Date'[Month]) would preserve a Month filter but still ignore Year if Year is not in the exceptions list. This is the classic cause when a measure appears unresponsive to slicer selections, even though the underlying relationships and directions are perfectly normal.

Why this answer

The measure likely uses ALL or ALLEXCEPT, which removes the filter context from the Date table. Even though the relationships are correctly configured and filters from the Date slicer propagate to Orders via the single-direction relationship, if the measure explicitly ignores those filters using a function like ALL(Date[Year]) or ALLEXCEPT(Orders, ...), the Date slicer will have no effect on the measure. This is a common DAX mistake where filter removal functions override slicer selections.

Exam trap

The trap here is that candidates often assume filter propagation direction is the problem, but the real issue is that DAX filter removal functions like ALL or ALLEXCEPT can silently override slicer filters, making it appear as though the relationship is broken.

How to eliminate wrong answers

Option A is wrong because the Customer and Date tables do not need to be directly related; filters propagate independently through their respective relationships to the Orders table. Option B is wrong because the relationship between Orders and Date is explicitly described as active (many-to-one, single direction), so it is not inactive. Option C is wrong because single-direction relationships do allow filters from the Date table to propagate to Orders; the issue is not with direction but with the measure overriding the filter context.

81
MCQeasy

You have a date table with columns: Date, Year, Month, Quarter, Day. To enable time intelligence functions like TOTALYTD, what is the minimum requirement?

A.A separate date table with a continuous range of dates and a relationship to the fact table.
B.Mark the date table as a date table in Power BI.
C.Combine date and fact tables into one table.
D.A single date column in the fact table.
AnswerA

This is the minimum requirement for correct time intelligence in Power BI. A separate date table must include every date in the range spanning the fact table's dates, with no gaps, and be marked as a date table; critically, it must also have a relationship (typically one-to-many) to the fact table's date column so that filters propagate correctly. With this structure, DAX functions such as TOTALYTD, SAMEPERIODLASTYEAR, and DATEADD can safely rely on the continuous calendar to compute period-over-period comparisons. Note that marking the table as a date table is also mandatory, but the separate table and relationship are the foundational prerequisite.

Why this answer

The correct answer is A: a separate date table with a continuous range of dates and a relationship to the fact table. Time intelligence functions like TOTALYTD require a dedicated date table that contains an unbroken sequence of dates (no gaps) and is related to the fact table, so the engine can correctly filter and aggregate across time periods. Option B is insufficient because marking a table as a date table is a helpful setting but does not by itself satisfy the structural requirement of a continuous date range and relationship.

Option C is wrong because merging date and fact tables into one table breaks the star schema and does not provide the separate date dimension time intelligence needs. Option D is wrong because a single date column in the fact table lacks the continuous, dedicated date dimension required for functions like TOTALYTD.

82
Multi-Selectmedium

Which TWO of the following are valid reasons to use a calculated table in Power BI instead of a table from the source?

Select 2 answers
A.To create a bridge table for many-to-many relationships
B.To aggregate data from the source before loading
C.To create a date table for time intelligence
D.To enable incremental data refresh
E.To reduce the overall storage size of the model
AnswersA, C

Calculated tables are evaluated in DAX at model load time, making them ideal for constructing a bridge table when two dimension tables have a many-to-many relationship. You can generate the unique key combinations using functions like DISTINCT or SUMMARIZECOLUMNS and store that result physically in the model. This approach resolves ambiguity at the relationship level without requiring changes to your source schema.

Why this answer

Option A is correct because a calculated table can be built with DAX (e.g., DISTINCT or SUMMARIZE over the two related tables) to produce a bridge table that resolves a many-to-many relationship, something a raw source table cannot do without additional modeling. Option C is correct because a calculated table can be generated with DAX functions like CALENDAR or CALENDARAUTO to create a dedicated date table, which is required for time intelligence functions such as TOTALYTD and SAMEPERIODLASTYEAR. Option B is not a valid reason because aggregation before loading is performed in Power Query or at the source, not by a calculated table, which is computed after data is loaded into the model.

Option D is not valid because incremental refresh is configured on the table's refresh policy and requires a source-side filter, not a calculated table. Option E is not valid because calculated tables are materialized in memory and typically increase, rather than reduce, the model's storage size.

83
MCQeasy

You need to create a hierarchy in Power BI that allows drilling down from Year to Quarter to Month. What is the correct approach?

A.Create separate measures for each level
B.Use the Drillthrough feature
C.Use the DATESYTD function
D.Create a hierarchy in the Date table using Year, Quarter, Month columns
AnswerD

Creating a hierarchy in the Date table by placing Year above Quarter above Month defines a parent-child level structure that visuals can traverse. When a report field includes this hierarchy, Power BI automatically adds drill-down and expand controls, letting you move from annual to quarterly to monthly detail in the same chart.

Why this answer

The correct option is D: create a hierarchy in the Date table using the Year, Quarter, and Month columns. In Power BI, a hierarchy is built by dragging fields onto each other in the Fields pane, so placing Year above Quarter above Month in a date table produces exactly the Year → Quarter → Month drill-down path required. The other options do not fit: A (separate measures) produces independent calculations, not a drillable hierarchy; B (Drillthrough) navigates to a separate report page filtered by a selected value, not down levels within a visual; and C (DATESYTD) is a time-intelligence function that returns year-to-date totals, not a hierarchy.

84
MCQmedium

You have a Power BI data model with a fact table and multiple dimension tables. You notice that many-to-many relationships cause ambiguous results. What is the best practice to resolve this?

A.Change the relationship to one-to-one
B.Use a bidirectional cross-filter direction
C.Create a calculated table to merge the dimensions
D.Add a bridge table with appropriate relationships
AnswerD

A bridge table is the standard pattern for handling many-to-many relationships in Power BI: it holds unique combinations of the involved keys and connects to the fact table via one-to-many relationships to each dimension. This normalizes the originally ambiguous many-to-many relationship into two clear one-to-many paths, allowing filters from either dimension to propagate correctly without duplicating fact rows. It preserves each dimension's granularity and ensures that measures aggregate exactly once per relevant fact record, making it the correct modeling solution.

Why this answer

In Power BI, many-to-many relationships between fact and dimension tables can produce ambiguous results because the model cannot determine a unique filter propagation path. The best practice is to introduce a bridge table that resolves the many-to-many relationship into two one-to-many relationships, ensuring unambiguous filter context and correct aggregations.

Exam trap

The trap here is that candidates often confuse bidirectional cross-filter direction as a quick fix for many-to-many relationships, but Microsoft explicitly warns that bidirectional filtering can lead to ambiguous results and performance degradation, whereas a bridge table is the recommended pattern.

How to eliminate wrong answers

Option A is wrong because changing the relationship to one-to-one is rarely feasible in real-world data models where multiple facts naturally relate to multiple dimensions, and forcing a one-to-one would require data duplication or loss of granularity. Option B is wrong because bidirectional cross-filter direction can cause ambiguous filter propagation and performance issues, and it does not resolve the underlying logical many-to-many relationship; it often leads to circular dependencies or unexpected results. Option C is wrong because creating a calculated table to merge dimensions does not address the many-to-many relationship; it simply combines dimension attributes without resolving the cardinality mismatch, and it can introduce redundancy and maintenance challenges.

85
MCQmedium

You are modeling data from multiple sources: a SQL Server database for sales, an Excel file for budget, and a SharePoint list for product targets. You need to combine these into a single Power BI report. What is the recommended approach for handling data refresh?

A.Import each source into separate Power BI Desktop files and manually update.
B.Use Excel Online as the single source and import all data into it first.
C.Use Power Query to combine data from all sources into a single dataset, then schedule a daily refresh in the Power BI service.
D.Create separate datasets for each source and use composite models with DirectQuery.
AnswerC

Power Query (Get Data) provides native connectors and a rich transformation environment to merge, append, and shape datasets from disparate sources into a single, consistent model. Publishing that model once and configuring a daily scheduled refresh in the Power BI service centralizes maintenance and ensures all visuals receive updated data automatically. This approach aligns with best practices for scalable self-service BI because the refresh burden is handled by the service, not a user.

Why this answer

Power Query (Get Data) in Power BI Desktop is designed to connect to and combine data from multiple heterogeneous sources—SQL Server, Excel, and SharePoint—into a single dataset. After publishing to the Power BI service, you can configure a scheduled refresh (via an on-premises data gateway for on-premises sources) to keep the dataset up to date automatically, which is the recommended approach for recurring refreshes.

Exam trap

The trap here is that candidates often confuse composite models (DirectQuery) with import mode, thinking they can combine sources with DirectQuery and still schedule a refresh, but DirectQuery does not support scheduled refresh—it queries the source live, which is not the recommended approach for combining multiple sources into a single refreshable dataset.

How to eliminate wrong answers

Option A is wrong because manually updating separate Power BI Desktop files defeats the purpose of automation and introduces data inconsistency and extra overhead; Power BI is built for scheduled, centralized refresh. Option B is wrong because using Excel Online as an intermediary adds unnecessary complexity, potential data duplication, and a single point of failure; Power Query can directly ingest each source without an intermediate layer. Option D is wrong because composite models with DirectQuery are intended for real-time or large-scale scenarios where you need to keep data in the source, not for combining multiple sources into a single refreshable dataset; scheduled refresh is not supported with DirectQuery sources in the same way as import mode.

86
MCQmedium

You are developing a Power BI semantic model for an e-commerce company. The source data comes from a CSV file containing order details: OrderID, OrderDate, CustomerID, ProductID, Quantity, UnitPrice, Discount, and ShippingCost. The file is updated daily. You need to model the data to support the following analyses: 1) Total sales amount (Quantity * UnitPrice - Discount) by product and month. 2) Average shipping cost per order by customer region (CustomerRegion is in a separate table). 3) Year-over-year comparison of sales. You need to create the measures and ensure optimal performance. What should you do?

A.Use Power Query to add a calculated column for sales amount and shipping cost per order, then import.
B.Create a single table by appending the customer region to each row in the CSV using Power Query, then import.
C.Use DirectQuery on the CSV file to avoid storing data in Power BI.
D.Import both tables into Power BI, create a date table, and build measures using SUMX and time intelligence.
AnswerD

Importing both tables gives in-memory performance, and a dedicated date table enables time intelligence for year-over-year comparisons. SUMX iterates at row level to compute Quantity * UnitPrice - Discount correctly, satisfying the sales, shipping and YoY requirements.

Why this answer

Importing both tables into Power BI and creating a star schema with a central fact table (Orders) and dimension tables (CustomerRegion, Date) enables efficient measure calculation. The measures can use SUMX to compute sales amount (SUMX(Orders, Orders[Quantity] * Orders[UnitPrice] - Orders[Discount])) and average shipping cost per order filtered by region via relationships. A separate date table is required for time intelligence functions like SAMEPERIODLASTYEAR for year-over-year comparison.

Option A is suboptimal because adding calculated columns in Power Query increases storage and processing time; measures are preferable. Option B creates a flat denormalized table which duplicates customer region data, leading to larger model and slower performance. Option C is incorrect because DirectQuery is not supported on CSV files; Power BI requires data import or a connection to a database.

Therefore, Option D is the best approach.

87
Multi-Selecthard

Which THREE factors should you consider when designing a star schema in Power BI?

Select 3 answers
A.A separate date table should be created for time intelligence.
B.Use natural keys instead of surrogate keys in dimension tables.
C.Fact tables should contain only foreign keys and numeric measures.
D.Use a snowflake schema to reduce data redundancy.
E.Dimension tables should be denormalized.
AnswersA, C, E

A dedicated date table enables time-based calculations.

Why this answer

A separate date table is required for time intelligence functions in Power BI because DAX time intelligence functions (e.g., TOTALYTD, SAMEPERIODLASTYEAR) rely on a continuous, contiguous date range with no gaps. Power BI automatically marks a table as a date table only if it contains a complete set of dates from the earliest to the latest transaction, enabling functions like DATEADD and DATESBETWEEN to work correctly across all granularities.

Exam trap

The trap here is that candidates confuse the theoretical normalization benefits of a snowflake schema (reducing redundancy) with the practical performance requirements of Power BI, where denormalization and surrogate keys are essential for optimal query execution and time intelligence calculations.

88
Multi-Selectmedium

Which THREE of the following are valid reasons to create a calculated table in Power BI?

Select 3 answers
A.To add a column that computes a value based on other columns in the same table.
B.To combine two tables by merging columns from one table into another.
C.To create a date table that is not available in the data source.
D.To create a disconnected table for use in what-if analysis (e.g., parameter slicers).
E.To create a summary table that pre-aggregates data for better performance.
AnswersC, D, E

Calculated tables are created using DAX expressions, letting you generate data absent from any source system. A date table built this way provides the continuous calendar required for time intelligence, which source data often lacks, satisfying the need for a complete date dimension.

Why this answer

Option C is correct because calculated tables are commonly used to generate a date table with DAX functions like CALENDAR or CALENDARAUTO when no date dimension exists in the source, enabling time intelligence. Option D is correct because calculated tables can create disconnected tables (e.g., via GENERATESERIES or DATATABLE) that serve as slicers or inputs for what-if parameters, which have no relationship to the model. Option E is correct because calculated tables can materialize pre-aggregated summaries using SUMMARIZE or GROUPBY, reducing query-time computation and improving report performance.

Option A is not a valid reason because adding a computed column to an existing table is done with a calculated column, not a calculated table. Option B is not a valid reason because merging columns from one table into another is accomplished in Power Query (Merge Queries) or via relationships, not by creating a calculated table.

Exam trap

The trap here is that candidates often confuse calculated tables with calculated columns or Power Query merges, thinking any table-like operation qualifies, but Power BI strictly distinguishes between row-level calculations (calculated columns) and table-level transformations (calculated tables).

89
Multi-Selectmedium

Which THREE of the following are benefits of using a star schema in Power BI? (Select three.)

Select 3 answers
A.Simplified DAX formulas
B.Supports many-to-many relationships natively
C.Improved query performance
D.Increased data redundancy
E.Easier for business users to understand
AnswersA, C, E

A star schema's single-hop relationship between each dimension and the fact table means measures written in DAX do not need to traverse multiple relationship levels or perform context transitions across a snowflake chain. Because each filter propagation follows one predictable path, CALCULATE and FILTER functions operate against a well-defined filter context, resulting in shorter, more maintainable measures that are easier to debug and audit. This simplicity directly reduces the amount of DAX needed to create accurate totals and percentage calculations.

Why this answer

Option A (Simplified DAX formulas) is correct because a star schema separates quantitative facts from descriptive dimensions, so measures typically aggregate a single fact table and filter through one-to-many relationships, avoiding complex bidirectional or multi-table filter logic in CALCULATE and RELATED calls. Option C (Improved query performance) is correct because the Power BI engine (VertiPaq) compresses and scans narrow dimension tables and a single fact table efficiently, and one-to-many relationships let the engine use simpler, faster join paths than snowflaked or normalized models. Option E (Easier for business users to understand) is correct because dimensions map to familiar business entities (Customer, Product, Date) and facts to measurable events, making the model intuitive for self-service report authors.

Option B is not correct because star schemas rely on one-to-many relationships; many-to-many relationships are not native to the star design and require bridge tables or special handling. Option D is not correct because increased data redundancy is a drawback of denormalization, not a benefit—star schemas actually reduce redundancy compared with fully normalized models while accepting controlled duplication in dimensions.

Exam trap

The trap here is that candidates confuse star schemas with snowflake schemas or assume that many-to-many relationships are a native benefit, when in fact star schemas rely on one-to-many relationships for optimal performance and simplicity.

90
MCQeasy

A company has a Power BI semantic model that uses Import mode. The model contains a table with 10 million rows. The data source is a SQL Server view that takes 5 minutes to execute. The scheduled refresh is set to every hour. What is the likely impact on refresh performance?

A.Refresh will fail due to timeout on the gateway.
B.The model will automatically use incremental refresh to split the load.
C.Refresh will complete in parallel with the view execution.
D.Refresh will take at least 5 minutes plus data loading time.
AnswerD

The view execution is a fixed prerequisite for the refresh: the Power BI engine must run the source query and wait for the full 5-minute execution to complete before it receives any data to load. Only after the view returns can the data loading phase, including any transformations, indexing, and storage into the in-memory columnstore, take place. Therefore, the absolute minimum refresh duration is 5 minutes, with the actual time being that 5 minutes plus the entire downstream loading and processing time.

Why this answer

The refresh process must first execute the SQL Server view to retrieve data, which takes at least 5 minutes, and then load that data into the Import mode model. The total refresh time is the sum of the query execution time and the data loading time, so it will be at least 5 minutes plus additional time for loading 10 million rows.

Exam trap

The trap here is that candidates may assume the gateway has a default 5-minute timeout, leading them to choose Option A, but the actual default timeout is 10 minutes, and the question does not specify any custom timeout settings.

How to eliminate wrong answers

Option A is wrong because the default gateway timeout for SQL Server is 10 minutes, which is longer than the 5-minute view execution time, so a timeout is unlikely unless other factors like network latency or resource contention exist. Option B is wrong because incremental refresh is not automatic; it must be manually configured by the model designer using Power Query date-range parameters and policy settings, and it does not automatically split the load for a view that takes 5 minutes. Option C is wrong because refresh is a sequential process: the view must finish executing before any data loading can begin; there is no parallel execution between the view query and the data load in Import mode.

91
MCQeasy

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?

A.Use DirectQuery for both sources and create relationships in the model.
B.Use Power Query in Power BI Desktop to import both sources and merge/append queries as needed.
C.Use Power BI dataflows to ingest both sources and then reference them in a dataset.
D.Create a composite model using DirectQuery for SQL Server and Import for Salesforce.
AnswerB

Power Query in Power BI Desktop allows importing data from both on-premises SQL Server and cloud-based Salesforce, enabling merging/append operations to shape data into a star schema. This in-memory model supports all relationships and calculations needed.

Why this answer

Power Query in Power BI Desktop is the appropriate tool to import data from both an on-premises SQL Server database and a cloud-based Salesforce instance, allowing the developer to merge or append queries as needed to shape the data into a star schema. This approach supports combining disparate sources into a single import model, which is essential for creating a star schema with fact and dimension tables. Using Power Query ensures that all data is loaded into memory, enabling fast query performance and full modeling capabilities.

Exam trap

The trap here is that candidates may think a composite model (Option D) is the best approach for combining on-premises and cloud sources, but the question specifically asks for creating a star schema, which is most easily achieved by importing all data into a single in-memory model using Power Query, avoiding the limitations and complexity of mixed storage modes.

How to eliminate wrong answers

Option A is wrong because using DirectQuery for both sources would prevent the developer from merging or appending data at query time; DirectQuery sends queries directly to the source and does not support combining data from multiple sources in a single query unless a composite model is used, and it limits star schema design due to performance constraints. Option C is wrong because Power BI dataflows are used for data preparation and storage in the Power BI service, but they are not the primary tool for combining data within a single Power BI Desktop model; referencing dataflows in a dataset still requires import or DirectQuery, and the question asks for the approach to combine data in the model, not just ingest it. Option D is wrong because creating a composite model with DirectQuery for SQL Server and Import for Salesforce would allow combining data, but it introduces complexity with mixed storage modes, potential performance issues, and limitations on relationships (e.g., many-to-many relationships require specific configurations), and it is not the simplest or most straightforward approach for building a star schema; importing both sources is preferred for full control over data shaping.

92
MCQhard

You are a Power BI data analyst for a financial services company. Your semantic model contains a fact table named Transactions with columns TransactionID, AccountID, TransactionDate, and Amount. You also have a dimension table named Accounts with AccountID, AccountType, and OpeningDate. You need to create a calculated column in the Transactions table that returns the account type for each transaction. Which DAX function should you use?

A.LOOKUPVALUE(Accounts[AccountType], Accounts[AccountID], Transactions[AccountID])
B.RELATED(Accounts[AccountType])
C.USERELATIONSHIP(Accounts[AccountID], Transactions[AccountID])
D.CALCULATE(MAX(Accounts[AccountType]), RELATEDTABLE(Accounts))
AnswerB

RELATED is used in a calculated column on the many side of a relationship to fetch a value from the related table on the one side. Since Transactions is related to Accounts via AccountID, RELATED(Accounts[AccountType]) returns the account type for each transaction. This function leverages the existing relationship and is efficient for row-level lookups.

Why this answer

RELATED is the correct function to retrieve a value from the one side of a relationship in a calculated column on the many side. It uses the existing relationship between Transactions and Accounts to return the account type for each transaction. LOOKUPVALUE is a fallback when no relationship exists, while CALCULATE and USERELATIONSHIP serve different purposes.

Exam trap

The trap here is choosing LOOKUPVALUE because it seems straightforward, but it ignores the existing relationship that RELATED can leverage more efficiently and with less code.

93
Multi-Selectmedium

Which THREE are best practices for managing relationships in Power BI? (Select exactly 3.)

Select 3 answers
A.Use many-to-many relationships whenever possible to simplify the model
B.Hide foreign key columns in dimension tables to prevent misuse
C.Use single-direction cross-filtering unless bidirectional is required
D.Always set cross-filter direction to both to allow full interactivity
E.Ensure that the data types of related columns match
AnswersB, C, E

Hiding foreign key columns in dimension tables stops report authors dragging surrogate keys into visuals, which would produce meaningless aggregations. This satisfies the stem's relationship-management constraint by keeping filtering flowing through the defined relationship rather than raw key values, reducing accidental many-to-many ambiguity and incorrect totals.

Why this answer

Option B is correct because hiding foreign key columns in dimension tables keeps the model clean and prevents report authors from accidentally using these technical keys in visuals instead of the proper dimension attributes. Option C is correct because single-direction cross-filtering is the default and preferred approach; bidirectional filtering should only be enabled when a specific requirement demands it, since it can introduce ambiguity, performance degradation, and unexpected results. Option E is correct because related columns must share the same data type for the relationship to be created and to filter correctly; mismatched types cause errors or force Power BI to create an inactive relationship.

Option A is incorrect because many-to-many relationships should be avoided when possible, as they complicate the model, can produce ambiguous results, and are harder to optimize. Option D is incorrect because setting all relationships to bidirectional cross-filtering is not a best practice; it can create ambiguous filter paths, circular dependencies, and performance issues.

Exam trap

PL-300 often tests the misconception that bidirectional and many-to-many relationships are always better for interactivity — candidates pick them for 'full interactivity' when best practice is to use them only when required.

94
MCQmedium

You are designing a Power BI model that includes a fact table with sales data and a dimension table for customers. Each customer can have multiple addresses, but you only need the primary address for analysis. The source system has a 'CustomerAddress' table with a 'IsPrimary' flag. What is the best approach to bring this into the model?

A.Use a DAX measure to filter the address table dynamically.
B.Import the entire CustomerAddress table and create an active relationship on the CustomerID column.
C.In Power Query, filter the CustomerAddress table to only include rows where IsPrimary = True, then merge with Customer.
D.Create a calculated table using SUMMARIZE to get the primary address per customer.
AnswerC

Filtering CustomerAddress to IsPrimary = True in Power Query before merging into Customer loads only one address per customer, eliminating fan-out and reducing model size. The merge creates a clean dimension table with the primary address attributes, allowing a single active relationship from the fact table to each customer's primary location. This ETL approach minimizes storage and prevents the need for complex DAX or inactive-relationship tricks.

Why this answer

It uses Power Query to filter the CustomerAddress table to only primary addresses before merging with the Customer dimension. This ensures that only the necessary rows are imported into the model, reducing data volume and avoiding complex DAX or relationship overhead. The result is a clean, single-row-per-customer dimension that directly supports analysis without runtime filtering.

Exam trap

The trap here is that candidates often choose Option B, thinking that importing the full table and using a relationship is simpler, but they overlook the need to enforce a single primary address per customer, which requires additional filtering logic that complicates the model and degrades performance.

How to eliminate wrong answers

Option A is wrong because a DAX measure cannot filter a table at the model level; it only applies dynamic filters at query time, which would not resolve the need for a single primary address per customer in the dimension table and would cause performance issues with repeated evaluation. Option B is wrong because importing the entire CustomerAddress table with an active relationship on CustomerID would create a one-to-many relationship from Customer to multiple addresses, requiring additional logic (e.g., a DAX filter or a calculated table) to isolate the primary address, which defeats the goal of a clean dimension. Option D is wrong because using SUMMARIZE to create a calculated table in DAX would work but is less efficient than Power Query filtering; it adds a calculated table to the model that is computed at refresh time and cannot leverage Power Query's native data transformation capabilities, and it may introduce subtle issues with blank rows or performance if the source table is large.

95
MCQhard

You are building a data model for a retail company. The 'Sales' fact table has a column 'Discount' that is a percentage (0 to 1). You create a measure 'Total Discount Amount' = SUM(Sales[Discount]) * SUM(Sales[Quantity]) * SUM(Sales[UnitPrice]). However, the measure returns incorrect results when multiple discount percentages exist in the same filter context. What is the issue?

A.The measure contains a circular dependency.
B.The measure is performing aggregations at the wrong granularity; it should use SUMX to iterate over each row.
C.The measure is referencing columns from different tables without proper relationships.
D.The Discount column should be of type Decimal instead of Percentage.
AnswerB

The measure is performing aggregations at the wrong granularity; it should use SUMX to iterate over each row. Using a simple SUM for the revenue calculation multiplies the total sales by the total discount rate, rather than computing the discounted amount for each individual transaction. SUMX creates a row context, evaluates the expression for every row (e.g., Sales[SalesAmount] * (1 - Sales[Discount])), and then sums those intermediate results, ensuring accurate row-level arithmetic before aggregation.

Why this answer

The measure uses SUM on each column individually, which aggregates all values in the filter context before multiplying. When multiple discount percentages exist, this incorrectly multiplies the total of all discounts by the total of all quantities and total of all unit prices, rather than computing discount per row. The correct approach is to use SUMX to iterate over each row of the Sales table, calculating Discount * Quantity * UnitPrice per row and then summing those row-level results, ensuring accurate granularity.

Exam trap

The trap here is that candidates often assume SUM works correctly for all multiplicative measures, overlooking that SUM aggregates before multiplication, while SUMX is required for row-by-row calculations in DAX.

How to eliminate wrong answers

Option A is wrong because a circular dependency occurs when a measure or column references itself directly or indirectly, which is not the case here; the measure simply uses SUM on three columns. Option C is wrong because the measure references columns only from the Sales table, so no cross-table relationship issue exists. Option D is wrong because the data type of Discount (Percentage vs Decimal) does not affect the aggregation logic; the core problem is the aggregation granularity, not the column type.

96
MCQhard

You are a Power BI developer for a financial services company. The company has a large transactional database in Azure Synapse Analytics. The database contains a table 'Transactions' with 2 billion rows. The table includes columns: TransactionID, AccountID, TransactionDate, Amount, Type (Deposit/Withdrawal), Status (Pending/Completed). You need to build a Power BI semantic model that allows executives to analyze monthly trends of completed deposit amounts by account type (e.g., Savings, Checking). The account type is in a separate 'Accounts' table (1 million rows) with columns: AccountID, AccountType, CustomerID. The model must refresh within 2 hours. Due to the large data volume, you cannot import the entire Transactions table. What should you do?

A.Use incremental refresh to import only recent data, and use DirectQuery for older data.
B.Import only the necessary columns and use Power BI aggregations to pre-aggregate.
C.Use DirectQuery on the full Transactions table and rely on the Synapse query optimizer.
D.Create an aggregated table in Synapse that pre-aggregates data at the month and account type level, then use DirectQuery on the aggregated table, and use a composite model with the detail table for drill-through.
AnswerD

Pre-aggregating in Synapse—for example via CTAS to create a month/account-type grain—shrinks the dataset from tens of billions of rows to a few thousand, so a DirectQuery connection to that aggregate answers all high-level visuals with near-instant response times. The composite model adds the original detail table (imported in a reduced form or also DirectQuery) strictly for drill-through when a user clicks a specific period/account; because drill-through filters to a single account and month first, the detail query touches a modest subset. This is the classic navigation strategy: use aggregated DirectQuery tables for high-cardinality facts, and keep fine-grained details available only when needed, which balances performance, freshness, and interactivity.

Why this answer

Option D is correct because it pre-aggregates the 2 billion-row Transactions table in Synapse at the month and account type grain, which drastically reduces the data volume Power BI must query, and then uses DirectQuery on that small aggregated table so refreshes complete well within the 2-hour window; the composite model with the detail table preserves drill-through to transaction-level detail when needed. Option A is wrong because mixing incremental refresh (Import) with DirectQuery for older data still requires importing large volumes and does not aggregate the 2 billion rows, so it will not reliably meet the 2-hour refresh. Option B is wrong because Power BI aggregations still depend on importing or querying the underlying detail, and importing only necessary columns from 2 billion rows remains too large for the refresh SLA.

Option C is wrong because DirectQuery over the full 2 billion-row Transactions table pushes all aggregation work to Synapse at query time, producing slow executive reports and no pre-aggregation benefit.

Exam trap

The trap is that candidates may think Power BI aggregations (Option B) are sufficient, but they do not reduce the data volume for import; the correct approach is to pre-aggregate at the source (Synapse) and use a composite model for drill-through.

97
MCQeasy

You need to create a calculated column in Power BI that categorizes sales amounts as 'Low', 'Medium', or 'High' based on the value. The column should be evaluated row by row. Which DAX function should you use?

A.SWITCH
B.IF
C.CALCULATE
D.FORMAT
AnswerA

SWITCH is the correct choice because it evaluates a single expression against a list of possible values and returns the corresponding result, making it ideal for creating multi-category calculated columns such as 'Low', 'Medium', or 'High'. Unlike nested IF functions, SWITCH keeps the logic linear and readable, and it can evaluate true/false conditions when used with a leading TRUE(), providing a clean row-level classification without context transition complexity.

Why this answer

SWITCH is the correct DAX function because it evaluates an expression (the sales amount) against a series of conditions and returns a corresponding result for each condition. In this scenario, you can use SWITCH(TRUE(), [Sales] < 1000, 'Low', [Sales] < 5000, 'Medium', 'High') to create a calculated column that categorizes values row by row. SWITCH is designed for multiple conditional branches, making it the most efficient and readable choice for this three-tier categorization.

Exam trap

The trap here is that candidates often choose IF because they are familiar with it from Excel, but SWITCH is the preferred DAX function for multiple conditions in Power BI, and the exam tests this distinction to see if you understand DAX-specific best practices.

How to eliminate wrong answers

Option B is wrong because IF is a nested function that becomes cumbersome and error-prone when handling more than two conditions; using IF for three categories would require nested IF statements, which is less efficient and harder to maintain than SWITCH. Option C is wrong because CALCULATE modifies filter context and evaluates an expression in a modified context, but it does not perform row-by-row conditional logic for categorizing values in a calculated column. Option D is wrong because FORMAT is used to convert a value to text based on a format string, not to evaluate logical conditions and return custom categories.

98
MCQeasy

A company has a Power BI semantic model that uses DirectQuery to a SQL Server database. The model contains a large fact table with sales data. Users report that reports using this model are slow. Which design change would most improve query performance?

A.Remove all relationships between tables.
B.Switch the model to Import mode.
C.Remove unnecessary columns from the fact table.
D.Disable the 'Reduce queries' option in report settings.
AnswerC

Removing unnecessary columns from the fact table is correct because DirectQuery operates by pushing queries back to the source, and every extraneous column widens the SELECT statement, increasing network transfer and source-side processing. A narrower fact table means fewer columns are scanned and materialized for each visual interaction, which directly reduces query latency and memory overhead. This is a standard column-pruning practice for DirectQuery performance tuning.

Why this answer

Removing unnecessary columns from the fact table reduces the amount of data that must be transferred from SQL Server to Power BI for each query. In DirectQuery mode, every report interaction sends a query to the source database, so fewer columns mean smaller result sets and faster query execution. This directly addresses the performance bottleneck caused by a large fact table without changing the underlying storage mode.

Exam trap

The trap here is that candidates often assume switching to Import mode is always the best performance fix, but the question specifically asks for a design change that improves query performance in DirectQuery mode, where reducing column count is a more targeted and less disruptive solution.

How to eliminate wrong answers

Option A is wrong because removing all relationships between tables would break the model's ability to filter and aggregate data across tables, making reports unusable and not improving query performance. Option B is wrong because switching to Import mode would require loading the entire large fact table into memory, which could cause memory pressure and long refresh times, and it does not address the root cause of slow queries in DirectQuery mode. Option D is wrong because disabling the 'Reduce queries' option in report settings would actually increase the number of queries sent to the source, making performance worse, not better.

99
MCQmedium

A data model contains a table 'Sales' with columns: Date, ProductID, Quantity, Amount. There is a 'Products' table with columns: ProductID, ProductName, CategoryID. A measure 'Total Sales' = SUM(Sales[Amount]) returns correct values. However, when a user creates a visual with CategoryID from 'Products' and 'Total Sales', some categories show blank. What is the most likely cause?

A.There are ProductID values in Sales that do not exist in Products table.
B.The 'Total Sales' measure is not properly referencing the Sales table.
C.The relationship between Sales and Products is set to many-to-one, single direction.
D.The relationship is set to both directions (bidirectional).
AnswerA

In a one-to-many relationship between Products and Sales, every ProductID in Sales must have a matching ProductID in Products for the related attribute (e.g., Category) to be populated. If Sales contains ProductID values not present in Products, those rows participate in the relationship as unmatched orphans, so the lookup column from Products is blank. As a result, any visual that slices or groups by Category shows a blank bucket that aggregates the sales from those orphaned ProductID values.

Why this answer

When ProductID values in the Sales table do not have matching entries in the Products table, the relationship between the two tables will result in blank CategoryID values for those unmatched rows. In Power BI, a many-to-one relationship (the default) filters from the 'one' side (Products) to the 'many' side (Sales), but if a Sales row has a ProductID not present in Products, it cannot be matched, and any column from Products (like CategoryID) will appear as blank in visuals. This is a classic data integrity issue where the fact table contains orphaned foreign keys.

Exam trap

The trap here is that candidates often assume the relationship direction or cross-filter setting is the culprit, but the real issue is data integrity—orphaned foreign keys in the fact table—which is a common data modeling pitfall tested in the PL-300 exam.

How to eliminate wrong answers

Option B is wrong because the measure 'Total Sales' = SUM(Sales[Amount]) explicitly references the Sales table, and the question states it returns correct values, so the measure definition is not the issue. Option C is wrong because a many-to-one, single-direction relationship is the default and correct configuration for this scenario; it does not cause blanks for unmatched rows—it simply means the filter context flows from Products to Sales, but orphaned Sales rows still produce blanks in Products columns. Option D is wrong because bidirectional cross-filtering would not fix the blank issue; it would allow filters to flow in both directions but still cannot match a Sales row with a ProductID that has no corresponding row in Products.

100
MCQhard

You are creating a Power BI report that uses a composite model (DirectQuery for large tables and Import for small dimension tables). You want to ensure that measures referencing the DirectQuery tables are responsive. Which of the following design choices should you avoid?

A.Use complex time intelligence measures that iterate over the fact table
B.Use measures that aggregate columns rather than rows
C.Create a date dimension table imported from the source
D.Create user-defined aggregations for the DirectQuery table
AnswerA

Correct. In a composite model, the large fact table typically remains in DirectQuery to avoid memory pressure, but measures that iterate row-by-row (e.g., SUMX, or time-intelligence functions that scan a period) will force the DAX engine to issue multiple or very broad SQL queries against the remote source. Each iteration may expand into a separate query or pull large result sets, causing severe latency and poor report responsiveness. Time intelligence that needs to re-evaluate the fact table for each date context is especially costly and should be avoided in DirectQuery-heavy models.

Why this answer

The design choice to avoid is A: complex time intelligence measures that iterate over the fact table, because in a composite model the DirectQuery fact table is queried remotely, and row-by-row iteration (e.g., SUMX over the fact table) forces expensive, non-foldable queries that hurt responsiveness. Measures that aggregate columns (B) can often be folded into a single SQL GROUP BY, so they are efficient. Importing a date dimension (C) is a recommended pattern because it keeps time intelligence calculations local and foldable.

User-defined aggregations (D) are also recommended, as they cache pre-aggregated DirectQuery data and improve query performance.

101
MCQeasy

You have a Power BI data model with a 'Date' table that contains continuous dates from January 1, 2020, to December 31, 2025. The 'Sales' table has a relationship with the 'Date' table. You need to create a measure that calculates the total sales for the last 12 months from the current context. Which DAX function should you use?

A.PREVIOUSMONTH
B.DATEADD
C.DATESINPERIOD
D.SAMEPERIODLASTYEAR
AnswerC

DATESINPERIOD returns a table of contiguous dates starting from a specified start date and extending for a given number of intervals (months, quarters, or years), either forward or backward. For a rolling 12-month calculation, you can use CALCULATE(SUM(Sales[Amount]), DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -12, MONTH)) to include exactly the trailing 12 months up to and including the current maximum date. This function is purpose-built for arbitrary date ranges anchored on a single date, making it the correct choice for this scenario.

Why this answer

The DATESINPERIOD function is correct because it returns a contiguous set of dates from a specified start date (the last date in the current context) going back a given number of intervals (12 months). This allows the measure to dynamically calculate total sales for the trailing 12 months relative to any filter context, such as a specific year or month.

Exam trap

The trap here is that candidates often confuse SAMEPERIODLASTYEAR (which compares a fixed prior period) with a rolling 12-month calculation, not realizing that DATESINPERIOD is the correct function for a dynamic trailing window.

How to eliminate wrong answers

Option A is wrong because PREVIOUSMONTH only returns the single previous month, not a rolling 12-month period. Option B is wrong because DATEADD shifts a set of dates by a specified number of intervals but requires an existing date range to shift; it does not inherently create a rolling 12-month window from the current context. Option D is wrong because SAMEPERIODLASTYEAR returns the exact same period one year prior, which is a fixed comparison (e.g., January 2023 vs.

January 2022), not a trailing 12-month calculation.

102
MCQmedium

You are a data analyst at a healthcare organization. You have a Power BI semantic model with a fact table named Visits that includes a column PatientID and a dimension table named Patients with a column PatientID. The Visits table has 10 million rows, and the Patients table has 500,000 rows. You need to ensure that when users filter the Patients table by patient demographics, the Visits table is filtered accordingly, and that the relationship behaves as expected. What should you do?

A.Create a one-to-many relationship from Visits[PatientID] to Patients[PatientID] with a single filter direction.
B.Create a one-to-many relationship from Patients[PatientID] to Visits[PatientID] with a single filter direction.
C.Create a one-to-many relationship from Patients[PatientID] to Visits[PatientID] with a bidirectional filter direction.
D.Create a many-to-many relationship between Patients[PatientID] and Visits[PatientID] with a single filter direction.
AnswerB

This is correct because the dimension table Patients should filter the fact table Visits. A one-to-many relationship from the dimension to the fact table with a single filter direction is the standard star schema design. It ensures that filters on patient demographics propagate to Visits, and it avoids ambiguity and performance issues associated with bidirectional filtering.

Why this answer

The correct design is a one-to-many relationship from the dimension table to the fact table with a single filter direction. This enforces referential integrity, ensures filters on Patients propagate to Visits, and maintains optimal performance. Reversing the direction or using many-to-many or bidirectional filtering would not meet the requirement and could introduce issues.

Exam trap

The trap here is confusing the direction of the relationship; many candidates mistakenly think the fact table should filter the dimension table.

103
Multi-Selecthard

Which TWO actions can improve performance of a Power BI DirectQuery model?

Select 2 answers
A.Switch the model to Import mode
B.Enable bidirectional cross-filtering on all relationships
C.Ensure proper indexing in the source database
D.Use calculated columns with complex logic
E.Reduce the number of columns in the query
AnswersC, E

Indexing speeds up query execution.

Why this answer

Proper indexing in the source database reduces the query execution time for DirectQuery models. DirectQuery sends queries to the source database in real-time, so efficient indexes on columns used in filters, joins, and aggregations minimize table scans and improve retrieval speed.

Exam trap

The trap here is that candidates often confuse performance improvements that apply to Import mode (like reducing columns) with those that are specific to DirectQuery, or they assume bidirectional filtering is always beneficial without considering its overhead on query generation.

104
MCQmedium

You have a Power BI model with a table 'Sales' and a related 'Product' table. You want to count the number of distinct products sold. Which DAX expression should you use?

A.COUNTROWS(Sales)
B.COUNT(Sales[ProductID])
C.DISTINCTCOUNT(Sales[ProductID])
D.COUNTA(Sales[ProductID])
AnswerC

DISTINCTCOUNT(Sales[ProductID]) evaluates the ProductID column within the current filter context and returns the number of unique, non-blank values. It automatically removes duplicates and ignores blanks, providing the exact cardinality of products sold. This is the standard DAX function for 'count of distinct instances' in scenarios like this, and it respects the existing relationship filtering from related tables.

Why this answer

DISTINCTCOUNT(Sales[ProductID]) returns the number of unique ProductID values in the Sales table, which directly answers the requirement to count distinct products sold. This function counts each distinct value in the specified column, ignoring duplicates, and is the standard DAX measure for distinct count calculations.

Exam trap

The trap here is that candidates often confuse COUNT, COUNTA, and COUNTROWS with DISTINCTCOUNT, mistakenly thinking any counting function will yield distinct values, but only DISTINCTCOUNT explicitly removes duplicates.

How to eliminate wrong answers

Option A is wrong because COUNTROWS(Sales) counts all rows in the Sales table, including duplicate sales of the same product, not distinct products. Option B is wrong because COUNT(Sales[ProductID]) counts only non-blank numeric values in the column, but it does not eliminate duplicates, so it returns the total number of sales transactions with a ProductID, not distinct products. Option D is wrong because COUNTA(Sales[ProductID]) counts non-blank values of any data type, but like COUNT, it does not deduplicate, so it also returns the total count of non-blank ProductID entries, not distinct products.

105
MCQmedium

You are designing a data model for a report that shows sales by product category and by month. Which table configuration is most efficient?

A.Two fact tables: one for date and one for product.
B.A date dimension table, a product dimension table, and a sales fact table.
C.A single table with all columns.
D.One dimension table containing date and product attributes.
AnswerB

A star schema with a sales fact table at the center and separate date and product dimension tables around it is the optimal relational design for this reporting scenario. The fact table stores quantitative measures (e.g., sales amount, quantity) and foreign keys to each dimension, creating one-to-many relationships that let Power BI filter and group by date or product efficiently. This design avoids data redundancy, supports correct grain granularity, and ensures the model can answer time-based and product-based questions independently or together. It also aligns with Power BI's VertiPaq columnar storage, which compresses dimensions well and speeds up aggregation.

Why this answer

Option B is correct because a star schema with a date dimension, a product dimension, and a sales fact table is the most efficient design for reporting sales by product category and by month. The fact table stores numeric measures such as sales amount at the grain of each transaction or monthly aggregate, while the dimension tables provide descriptive attributes for filtering and grouping. This separation reduces redundancy, improves query performance, and supports clean time intelligence and category-level analysis.

Option A is wrong because date and product are descriptive dimensions, not fact tables. Option C is wrong because a single wide table causes redundancy and poor scalability. Option D is wrong because combining date and product attributes into one dimension creates a snowflake-like or denormalized structure that complicates grouping and time analysis.

106
Multi-Selectmedium

Which TWO actions are best practices for optimizing Power BI data models?

Select 2 answers
A.Replace text-based relationship columns with integer keys.
B.Use calculated columns instead of measures where possible.
C.Hide columns that are not used in reports.
D.Remove columns that are not used in reports.
E.Use many-to-many relationships instead of bridge tables.
AnswersA, D

Integer keys improve join performance.

Why this answer

Replacing text-based relationship columns with integer keys (surrogate keys) reduces storage size and improves join performance. Power BI's VertiPaq engine compresses integer columns far more efficiently than text columns, leading to faster query execution and smaller memory footprint.

Exam trap

The trap here is that candidates often confuse 'hiding' columns (which only affects report visibility) with 'removing' columns (which actually reduces model size and improves performance), leading them to select Option C instead of D.

107
Multi-Selectmedium

Which TWO approaches can you use to implement row-level security (RLS) in Power BI?

Select 2 answers
A.Assign users to security groups in the dataset.
B.Use column-level security to restrict row visibility.
C.Use object-level security to restrict rows.
D.Create roles with static filters.
E.Use dynamic filters based on USERNAME().
AnswersD, E

Static row-level security is implemented by creating one or more roles whose DAX filters use constant values, such as [Country] = "USA". Every user assigned to a specific role receives exactly the same filtered view; to grant different views, you must create separate roles for each distinct filter value. This approach is predictable and easy to audit, but it becomes cumbersome when many user groups need different subsets of rows.

Why this answer

Option D is correct because creating roles with static filters is a core RLS implementation method in Power BI: in Power BI Desktop you define roles in Manage Roles and add DAX filter expressions on tables (for example, [Region] = "West"), then assign users or groups to those roles in the Power BI service, so each user sees only the rows matching the filter. Option E is correct because dynamic filters based on USERNAME() (or USERPRINCIPALNAME()) implement RLS by evaluating the signed-in user at query time, typically via a relationship to a security/identity table, so row visibility adapts automatically without creating a separate static role per user. Option A is not a valid RLS approach because assigning users to security groups in the dataset is a membership/administration step, not a row-filtering mechanism by itself.

Option B is wrong because column-level security restricts which columns are visible, not which rows. Option C is wrong because object-level security restricts access to tables and columns (metadata), not rows.

Exam trap

A common trap is confusing static RLS (fixed filters in roles) with dynamic RLS (using USERNAME() or USERPRINCIPALNAME() to filter by user).

108
MCQhard

You are designing a star schema for a sales analysis report. The source data includes Order Details, Products, Customers, and Dates. Which table should be the fact table?

A.Dates
B.Customers
C.Order Details
D.Products
AnswerC

Order Details is the correct fact table because each row represents a line item from an order, the lowest grain of the sales process, and it holds numeric measures like quantity, unit price, and discount that can be aggregated with SUM and similar functions. It also contains foreign key columns (OrderID, ProductID, CustomerID, etc.) that link to the surrounding dimension tables, creating the star schema. The presence of both additive measures and multiple dimension keys is the defining property of a fact table.

Why this answer

In a star schema, the fact table stores quantitative, measurable data (metrics) and foreign keys linking to dimension tables. Order Details contains sales transactions with measures like quantity and revenue, making it the correct fact table for sales analysis.

Exam trap

The trap here is that candidates often mistake dimension tables like Dates or Products as the fact table because they appear frequently in reports, but the fact table must contain the measurable events (e.g., sales transactions) that drive the analysis.

How to eliminate wrong answers

Option A is wrong because Dates is a dimension table providing time attributes (year, month, day) for filtering and grouping, not transactional measures. Option B is wrong because Customers is a dimension table storing descriptive attributes (name, region) for slicing data, not numeric facts. Option D is wrong because Products is a dimension table containing product attributes (category, price) for analysis, not the core transactional data.

109
MCQmedium

You have a Power BI model with a 'Date' table marked as a date table. You need to create a measure that calculates the running total of sales over the last 12 months. Which DAX function should you use?

A.PREVIOUSYEAR
B.DATESYTD
C.DATESINPERIOD
D.DATEADD
AnswerC

DATESINPERIOD is a general-purpose time intelligence function that returns a table of dates from an initial start date and moves a specified number of intervals (such as -12 months) into the past or future. When used with a start date of the current context date and an interval of -12 MONTH, it dynamically constructs the exact trailing 12-month period, including all dates from the current date going back one year. This makes it the correct choice for a last-12-months measure because it directly defines the rolling window based on the current filter context.

Why this answer

DATESINPERIOD, is correct because it allows you to define a dynamic window of dates—specifically, the last 12 months ending with the latest date in the current filter context. When used with a measure like CALCULATE(SUM(Sales[Amount]), DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -12, MONTH)), it shifts the date range backward by 12 months from the last visible date, making it ideal for a rolling 12-month total. The 'Date' table being marked as a date table ensures that time intelligence functions respect the continuous date range.

Exam trap

The trap here is that candidates often confuse DATESYTD (which is for year-to-date, not rolling) with a trailing 12-month calculation, or they mistakenly think PREVIOUSYEAR can handle a dynamic window, when in fact it only returns a fixed prior calendar year.

How to eliminate wrong answers

Option A is wrong because PREVIOUSYEAR returns the entire previous calendar year (e.g., all of 2023) relative to the current context, not a rolling 12-month window that moves with each period. Option B is wrong because DATESYTD calculates a year-to-date total from the start of the calendar year to the last date in context, which is a fixed annual accumulation, not a trailing 12-month period. Option D is wrong because DATEADD shifts a set of dates by a specified interval (e.g., -1 year) but returns a set of dates shifted from the original, not a contiguous 12-month window ending at the current context; it requires additional logic to create a rolling total.

110
MCQhard

You have the above measure in a Power BI model. The 'Date' table is marked as a date table and has a relationship to Sales[OrderDate]. The measure returns blank for all months. What is the most likely cause?

A.The Date table does not contain all dates in the continuous range
B.The relationship is set to filter in the wrong direction
C.The measure uses incorrect syntax for DATESYTD
D.The 'Date' table is not marked as a date table
AnswerA

DATESYTD requires a gapless, contiguous set of dates spanning the entire year because it internally constructs a date range from January 1 through the last visible date in the filter context. If the Date table has missing dates—for example, only trading days or a subset of dates—the year-to-date calculation cannot include those gaps, causing blanks or understated totals. A properly built continuous date table with every calendar date is mandatory for time intelligence functions.

Why this answer

The correct answer is A: the Date table does not contain all dates in the continuous range. Time-intelligence functions like DATESYTD require a Date table with an unbroken, continuous sequence of dates covering the full period being analyzed; if any dates are missing, the function returns blank for the affected months. A wrong filter direction (B) would typically produce incorrect aggregation rather than blank results, and DATESYTD syntax errors (C) would raise an error, not silently return blank.

The table is already marked as a date table per the scenario, so D is not the cause.

111
Multi-Selecthard

Which THREE of the following are valid considerations when using Power BI DirectQuery mode?

Select 3 answers
A.Data is imported into the Power BI dataset.
B.You cannot create relationships between tables.
C.Queries are sent to the underlying data source in real time.
D.Row-level security (RLS) can be applied.
E.Some DAX functions are not supported.
AnswersC, D, E

A defining characteristic of DirectQuery is that report interactions—such as filtering, slicing, or simply changing a page—are translated in real time into native queries executed directly against the underlying data source. This ensures that the report always shows the current state of the source, but it also means query performance depends heavily on the source's responsiveness and indexing. Since no snapshot is taken, any change in the source is immediately reflected in the report.

Why this answer

Option C is correct because DirectQuery does not cache or import data into Power BI; instead, every visual interaction generates a query that is passed through to the underlying source (e.g., SQL Server, Azure Synapse, Oracle) in real time, so results reflect the source's current state. Option D is correct because row-level security can be defined in the Power BI model and, for DirectQuery sources, the RLS filters are translated into the native query sent to the data source, restricting the rows each user can see. Option E is correct because DirectQuery must translate DAX into the source's query language, so certain DAX functions and constructs (for example, some time intelligence and parent-child functions) are unsupported or behave differently, and Power BI will flag them as not supported in DirectQuery mode.

Option A is wrong because importing data describes Import mode, not DirectQuery, which leaves the data in the source. Option B is wrong because relationships between tables can still be created in a DirectQuery model; they are simply used to generate the appropriate joins in the queries sent to the source.

Exam trap

The trap here is that candidates often confuse DirectQuery with Import mode, assuming data is still cached locally, or mistakenly think relationships cannot be created because they are not enforced at the dataset level, when in fact they are supported but with limitations.

112
Multi-Selecthard

A company has a Power BI semantic model that uses DirectQuery to a SQL Server database. The model includes a large fact table with 100 million rows. Users are experiencing slow report performance. Which TWO actions should the developer take to improve query performance?

Select 2 answers
A.Configure incremental refresh to limit data retrieved per query.
B.Create indexes on columns used in filters and relationships.
C.Remove unused columns from the fact table.
D.Hide columns that are not needed in reports.
E.Add calculated columns to precompute aggregations.
AnswersB, C

In DirectQuery mode, Power BI sends every visual query directly to the underlying SQL Server, so query performance depends on the source engine's ability to return results quickly. Creating indexes on columns used in filters and relationship joins lets SQL Server use efficient lookup and merge operations instead of full table scans, dramatically reducing query latency. Without appropriate indexes, even simple filter operations can force the database to scan millions of rows, which directly degrades the Power BI report experience.

Why this answer

In DirectQuery mode, incremental refresh is not supported (option A is incorrect). Creating indexes on columns used in filters and relationships (option B) speeds up query execution on SQL Server. Removing unused columns from the fact table (option C) reduces the amount of data transferred per query.

Hiding columns (option D) does not affect the data retrieved by queries. Adding calculated columns (option E) increases query overhead and degrades performance.

Exam trap

Candidates often think hiding unused columns improves performance, but in DirectQuery it does not reduce query size. They also mistakenly believe calculated columns are beneficial, whereas they add overhead.

113
MCQeasy

You are designing a Power BI semantic model for an e-commerce company. You have a fact table with OrderID, CustomerID, OrderDate, and SalesAmount. You also have a Customers table with CustomerID, CustomerName, and CustomerSegment. You need to ensure that filters on CustomerSegment propagate to the SalesAmount measure. What should you do?

A.Use the LOOKUPVALUE function in a calculated column.
B.Create a one-to-many relationship from Customers[CustomerID] to Sales[CustomerID].
C.Merge the Customers and Sales tables into a single table in Power Query.
D.Create a snowflake schema by adding a separate Segment table.
AnswerB

Creating a one-to-many relationship from Customers[CustomerID] to Sales[CustomerID] is the correct star schema design. This relationship lets filter context flow from the dimension table (Customers) to the fact table (Sales), enabling correct aggregations like total sales by customer name. It also uses Power BI's optimized VertiPaq engine to join tables only when needed, reducing memory and improving query performance compared with calculated columns or merged tables. The cardinality is correctly specified because one customer can appear in many sales records.

Why this answer

Option B is correct because creating a one-to-many relationship from Customers[CustomerID] to Sales[CustomerID] establishes the Customers table as the lookup (dimension) table and Sales as the related (fact) table, so filter context applied to Customers[CustomerSegment] flows down to the Sales table and affects the SalesAmount measure. This is the standard star-schema filter propagation behavior in Power BI. Option A does not propagate filters; LOOKUPVALUE merely retrieves a value row-by-row in a calculated column and cannot drive cross-table filtering.

Option C would work functionally but destroys the dimensional model and is not the recommended design. Option D adds a Segment table but does not by itself create the needed relationship from Customers to Sales, so segment filters would not reach SalesAmount.

114
Multi-Selecthard

Which THREE considerations are important when implementing row-level security (RLS) in Power BI? (Select exactly 3.)

Select 3 answers
A.Roles can use DAX expressions to define filters
B.RLS can filter data based on the user's identity
C.RLS is automatically applied when using Analyze in Excel
D.RLS in DirectQuery mode pushes filters to the source database
E.RLS can restrict access to specific measures
AnswersA, B, D

Roles in Power BI define row-level security by using DAX expressions as filter predicates. For example, a role can be configured with a DAX filter like `[SalesRegion] = "North"` or a more complex FILTER expression that returns a table of allowed rows. These expressions are evaluated within the filter context of each row, and only rows that return TRUE for the predicate become visible to users assigned to that role. This makes DAX the core mechanism for implementing custom, flexible row-level security in Power BI.

Why this answer

Option A is correct because RLS roles in Power BI define filters using DAX expressions (for example, [Region] = "West" or USERPRINCIPALNAME()), which is the core mechanism for row-level filtering. Option B is correct because RLS is designed to filter data based on the user's identity, typically via functions like USERNAME() or USERPRINCIPALNAME() mapped to a security table. Option D is correct because in DirectQuery mode, RLS filters are translated and pushed down to the source database as part of the query, so the source must be able to process them.

Option C is not correct because RLS is not automatically applied in Analyze in Excel; the connection must use a role or the user must be a member of a role, and behavior depends on the connection method. Option E is not correct because RLS filters rows, not measures; restricting access to specific measures is handled through object-level security (OLS), not RLS.

115
MCQeasy

You are building a Power BI semantic model that includes a Date table. Which of the following is a best practice for creating a Date table?

A.Mark the date table as a date table in Power BI Desktop.
B.Create relationships from the date table to every fact table column that contains dates.
C.Use the CALENDARAUTO function to automatically generate dates.
D.Use a date table that includes only dates that exist in the fact tables.
AnswerA

Marking a table as a date table in Power BI Desktop (via Table tools > Mark as date table) establishes it as the model's official calendar source. This designation is required for time intelligence functions like TOTALYTD, SAMEPERIODLASTYEAR, and DATESBETWEEN to operate correctly. Power BI validates that the chosen date column contains continuous, unique dates and automatically uses it for date-based calculations and hierarchy generation.

Why this answer

Option A is correct because marking a table as a date table in Power BI Desktop (via Table tools > Mark as date table) designates it as the model's official date table, enabling built-in time intelligence functions to work correctly and ensuring the table meets the requirements of a contiguous, unique date column. This is a documented best practice for any semantic model that uses time intelligence. Option B is wrong because relationships should be created between the date table and the date columns of fact tables, not to every date-bearing column, and a single active relationship per fact table is typical.

Option C is not a best practice because CALENDARAUTO generates dates based on the model's data range, which can produce an unpredictable or incomplete range; a manually or Power Query–built date table with a fixed, contiguous range is preferred. Option D is wrong because a date table must contain a continuous, unbroken sequence of dates, not just the dates present in fact tables, so that time intelligence calculations over gaps work properly.

116
MCQmedium

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?

A.Create a measure: SUM(Sales[SalesAmount]) - SUM(Sales[Discount])
B.Add a calculated column in Power Query: NetAmount = Quantity * UnitPrice - Discount, then create a measure: SUM(Sales[NetAmount])
C.Create a measure: SUMX(Sales, Sales[Quantity] * Sales[UnitPrice] - Sales[Discount])
D.Create a measure: SUM(Sales[Quantity] * Sales[UnitPrice]) - SUM(Sales[Discount])
AnswerB

Creating a calculated NetAmount column in Power Query (M) evaluates Quantity * UnitPrice - Discount once at refresh time, storing the result as a static column in the data model. The subsequent measure SUM(Sales[NetAmount]) simply aggregates those pre-computed values, avoiding row-by-row evaluation at report time and improving query performance for large fact tables. Because the calculation is pushed to the query engine instead of the DAX engine, it also keeps the code simpler and avoids iterator overhead during visual rendering.

Why this answer

It performs the net amount calculation at the row level in Power Query (M), which is computed during data refresh and stored in the table. This avoids runtime row-by-row iteration in DAX, making the measure SUM(Sales[NetAmount]) a simple, highly efficient aggregation. It ensures both performance and accuracy, as the discount is applied per transaction before aggregation.

Exam trap

The trap here is that candidates often assume a DAX measure using SUMX or a simple subtraction of aggregated columns is equivalent in performance, but the exam tests the understanding that pre-calculating row-level logic in Power Query (M) is the most performant approach for large fact tables, while also ensuring mathematical accuracy.

How to eliminate wrong answers

Option A is wrong because subtracting SUM(Discount) from SUM(SalesAmount) is mathematically incorrect when discounts are stored as absolute values per row; it would only work if Discount were a total discount amount per row, but here it is a per-row value that should be subtracted from the row’s net amount, not aggregated separately. Option C is wrong because SUMX iterates over the entire table row by row at query time, which is slower than a pre-calculated column, especially for large fact tables; it also forces the calculation engine to evaluate the expression for every row during measure execution. Option D is wrong because SUM(Sales[Quantity] * Sales[UnitPrice]) is invalid syntax in DAX—SUM expects a single column reference, not an expression; this would cause a syntax error or unexpected behavior, and even if corrected, it would still suffer from the same aggregation-order issue as Option A.

117
MCQmedium

You are modeling data from a SQL database that has a table with columns: OrderID, CustomerID, OrderDate, ProductID, Quantity, and Price. You want to create a star schema in Power BI. Which columns should you move to dimension tables?

A.OrderDate, Quantity, Price
B.Quantity, Price, OrderID
C.CustomerID, ProductID, OrderDate
D.OrderID, Quantity, Price
AnswerC

CustomerID, ProductID, and OrderDate are all foreign keys that establish relationships to the Customer, Product, and Date dimension tables. In a proper star schema, these keys should be replaced with dimension attributes such as CustomerName, ProductCategory, and OrderMonth during reporting. This replacement makes reports readable and lets users filter and group by meaningful descriptions instead of opaque ID numbers.

Why this answer

Option C (CustomerID, ProductID, OrderDate) is correct because in a star schema these columns are foreign keys or attributes that belong in dimension tables: CustomerID links to a Customer dimension, ProductID links to a Product dimension, and OrderDate links to a Date dimension for time-based analysis. The fact table should retain the numeric measures and the order identifier, so Quantity, Price, and OrderID stay in the fact table. Option A incorrectly moves Quantity and Price, which are measures, into dimensions.

Option B incorrectly moves Quantity and Price and keeps CustomerID/ProductID out of dimensions. Option D incorrectly moves Quantity and Price while leaving the dimension keys in the fact table.

118
MCQeasy

You are a Power BI data analyst for a retail company. You have a semantic model with a Sales fact table and a Products dimension table. You need to create a measure that calculates total sales amount. Which DAX function should you use?

A.SUM(Sales[SalesAmount])
B.COUNT(Sales[SalesAmount])
C.SUMX(Sales, Sales[SalesAmount])
D.CALCULATE(SUM(Sales[SalesAmount]))
AnswerA

SUM is the correct DAX function to add all values in a numeric column, such as Sales[SalesAmount]. It aggregates the column across the filter context, providing the total sales amount. This is a fundamental aggregation function for measures and is efficient because it operates on a single column without iterating rows.

Why this answer

The SUM function is designed to add all numbers in a single column, making it the simplest and most efficient choice for total sales amount. SUMX is for row-by-row expressions, CALCULATE is for filter manipulation, and COUNT tallies non-blank values. For a straightforward total, SUM is correct.

Exam trap

The trap here is overcomplicating a simple aggregation by using an iterator like SUMX or wrapping SUM in CALCULATE, when a basic SUM is sufficient and more efficient.

119
Multi-Selecteasy

Which TWO of the following are valid DAX functions for time intelligence?

Select 2 answers
A.TOTALYTD
B.RANKX
C.SUM
D.CALCULATE
E.SAMEPERIODLASTYEAR
AnswersA, E

TOTALYTD is a DAX time intelligence function that evaluates an expression over the year-to-date period based on a given date column. It returns a scalar value representing the cumulative total from the start of the year to the latest date in the current filter context. This function is specifically designed for time-based calculations, making it a valid answer.

Why this answer

TOTALYTD is a valid DAX time intelligence function that calculates the year-to-date value of an expression, typically used with a date column to aggregate data from the start of the year to the current context. It requires a properly marked date table with continuous dates to function correctly.

Exam trap

Microsoft often tests the distinction between general DAX functions (like CALCULATE and SUM) and dedicated time intelligence functions, trapping candidates who assume any function that works with dates qualifies as time intelligence.

120
MCQeasy

You have two tables: 'Orders' and 'Customers'. You want to create a relationship where each order is linked to one customer, but a customer can have many orders. Which cardinality should you choose?

A.Many-to-many (*:*)
B.Many-to-one (*:1) from Orders to Customers
C.One-to-many (1:*) from Orders to Customers
D.One-to-one (1:1)
AnswerB

The many-to-one (*:1) relationship from Orders to Customers is correct because the Orders table contains many rows that reference the same single customer row through the customer key. Each order belongs to exactly one customer, so the CustomerID column is not unique in Orders but is unique in Customers. This is the standard fact-to-dimension relationship in Power BI, where filtering from Customers to Orders yields all orders for that customer.

Why this answer

The correct choice is B, many-to-one (*:1) from Orders to Customers, because each individual order row references exactly one customer row, while the same customer key can appear in many order rows — which is precisely the *:1 direction when viewed from Orders toward Customers. In relational terms this is implemented by placing a foreign key in Orders pointing to the Customers primary key, enforcing referential integrity without duplicating customer data. Option A (*:*) is wrong because many-to-many requires a junction table and would let one order map to multiple customers, contradicting the scenario.

Option C (1:* from Orders to Customers) reverses the direction, implying one order relates to many customers. Option D (1:1) is wrong because it would restrict each customer to at most one order.

121
Multi-Selecthard

Which THREE of the following are valid reasons to use a composite model (mixed storage mode) in Power BI?

Select 3 answers
A.To enable real-time data from a DirectQuery source while using imported historical data.
B.To use aggregations on large fact tables while keeping other tables imported.
C.To improve relationship performance between tables.
D.To create calculated tables based on DirectQuery sources.
E.To combine data from a DirectQuery source with imported tables.
AnswersA, B, E

This is a correct use case for composite models. In Power BI, a composite model allows you to combine tables from different storage modes in a single data model. A DirectQuery table can be configured to always pull the latest data from the source, while historical tables can be imported and refreshed on a schedule. This hybrid approach gives you real-time visibility into current transactions without giving up the performance benefits of pre-loaded historical data.

Why this answer

Option A is correct because a composite model lets some tables use DirectQuery (for real-time or frequently changing data) while other tables remain in Import mode, so you can blend live DirectQuery data with imported historical data in one model. Option B is correct because composite models support aggregation tables, allowing you to keep large fact tables in DirectQuery (or as detail tables) while importing pre-aggregated summary tables to accelerate queries. Option E is correct because the core purpose of a composite model is to combine DirectQuery sources with imported tables in the same semantic model, which is otherwise impossible in a pure Import or pure DirectQuery model.

Option C is not a valid reason: composite storage mode does not inherently improve relationship performance, and relationship performance depends on cardinality, cross-filter direction, and model design rather than storage mode. Option D is not a valid reason: calculated tables are created with DAX and are always stored in Import mode, so they cannot be based directly on DirectQuery sources as a benefit of using a composite model.

122
Multi-Selectmedium

Which THREE considerations are important when designing a Power BI data model for large datasets?

Select 3 answers
A.Store calculated columns in the fact table for quick access.
B.Include as many columns as possible in fact tables for flexibility.
C.Disable the auto-date/time feature.
D.Use a star schema design.
E.Use integer keys for relationships instead of text.
AnswersC, D, E

Power BI's auto-date/time feature silently creates hidden date tables for every date column, inflating model size and creating extra relationships that can confuse the report layer. Disabling this option forces you to use an explicit date table, giving you control over data type, granularity, and contiguous date ranges, which improves time-intelligence performance and reduces memory footprint.

Why this answer

Option C is correct because Power BI's Auto date/time feature creates a hidden calculated date table for every date column, which adds memory overhead and can bloat a large model, so disabling it (via Options or Tabular Editor) keeps the model lean. Option D is correct because a star schema with a central fact table surrounded by dimension tables produces efficient, simple relationships that the VertiPaq engine compresses and queries faster than snowflake or normalized designs. Option E is correct because integer keys consume less memory and compress better than text keys, and integer-to-integer relationships are processed more efficiently during query execution.

Option A is not appropriate because calculated columns are stored and compressed in the model, consuming memory and increasing refresh time, so measures or calculated tables should be preferred where possible. Option B is not appropriate because adding unnecessary columns increases model size, hurts compression, and slows processing, so fact tables should contain only the columns needed for analysis.

Exam trap

The trap here is that candidates often think calculated columns in fact tables improve performance (Option A) or that more columns provide flexibility (Option B), but in reality both degrade performance and violate star schema best practices.

123
MCQhard

You are building a Power BI model that includes a table 'Orders' with columns: OrderID, CustomerID, OrderDate, and TotalAmount. You also have a table 'Customers' with columns: CustomerID, CustomerName, and Segment. You need to create a relationship between Orders and Customers on CustomerID. Which relationship configuration should you choose to ensure that filtering Customers by Segment correctly filters Orders?

A.One-to-many relationship from Customers to Orders
B.Many-to-one relationship from Orders to Customers
C.Many-to-many relationship with a bridge table
D.One-to-one relationship
AnswerA

This is the canonical star-schema relationship. A single customer can appear in many orders, so Customers is the 'one' side and Orders is the 'many' side. By placing the relationship from Customers to Orders, customer attributes (region, segment, etc.) automatically filter and slice all related order rows, enabling correct aggregations in measures. This relationship uses the dimension table as the lookup table and the fact table as the data table, which is the preferred pattern for performance and intuitive filtering.

Why this answer

In a star schema, the dimension table (Customers) has a unique CustomerID and the fact table (Orders) has many rows per customer, so the relationship is one-to-many from Customers to Orders. Power BI's default filter direction is single, meaning Customers filters Orders, which is exactly what is needed for filtering Orders by Segment. This is the standard dimensional modeling pattern.

Exam trap

PL-300 often tests the direction confusion between 'one-to-many from Customers to Orders' and 'many-to-one from Orders to Customers' — candidates pick the many-to-one wording even though it describes the same relationship from the wrong side.

How to eliminate wrong answers

Option B is wrong because 'many-to-one from Orders to Customers' is the same physical relationship described from the opposite direction — Power BI defines it as one-to-many from the 'one' side (Customers) to the 'many' side (Orders); choosing the many-to-one wording as the configuration is misleading and not how the relationship is set up. Option C is wrong because many-to-many with a bridge table is only needed when both sides have duplicate keys (e.g., orders with multiple customers or many-to-many dimensions) — here CustomerID is unique in Customers, so a bridge is unnecessary and adds complexity. Option D is wrong because one-to-one would require a unique CustomerID in both tables, but Orders has multiple rows per customer.

124
MCQeasy

You have a Power BI model with a table named Orders that contains columns OrderDate, ShipDate, and CustomerID. You need to create a calculated column that computes the number of days between OrderDate and ShipDate. Which DAX expression should you use?

A.DATEDIFF(Orders[OrderDate], Orders[ShipDate], DAY)
B.DATEADD(Orders[OrderDate], 1, DAY)
C.DAY(Orders[ShipDate] - Orders[OrderDate])
D.NETWORKDAYS(Orders[OrderDate], Orders[ShipDate])
AnswerA

DATEDIFF(Orders[OrderDate], Orders[ShipDate], DAY) is correct because the DATEDIFF function in DAX returns the number of interval boundaries crossed between a start date and an end date, with the third argument specifying the interval unit. Here, DAY asks for whole calendar days, so the result is an integer representing the total days from OrderDate to ShipDate. This is the intended calculation for order-to-ship time.

Why this answer

The DATEDIFF function in DAX calculates the interval between two dates in the specified unit (DAY). This directly computes the number of days between OrderDate and ShipDate, which is the required result for the calculated column.

Exam trap

The trap here is that candidates might confuse DATEDIFF with DATEADD (which shifts dates) or incorrectly use DAY() on a date difference, thinking it extracts the number of days, when DAY() actually returns the day of the month (1–31).

How to eliminate wrong answers

Option B is wrong because DATEADD shifts a date by a specified number of intervals (e.g., adds 1 day to OrderDate), not the difference between two dates. Option C is wrong because DAY extracts the day-of-month component from a date, not the interval between dates; subtracting two dates in DAX returns a decimal representing days, but wrapping it in DAY returns an incorrect integer (the day number of the difference). Option D is wrong because NETWORKDAYS calculates the number of whole working days between two dates, excluding weekends and optionally holidays, not the total calendar days.

125
MCQmedium

You are a data analyst for a retail company. You have a Power BI semantic model that includes a fact table named Sales with columns: Date, ProductID, StoreID, Quantity, and Amount. You also have dimension tables: Product, Store, and Date. The Date table is marked as a date table. You need to create a measure that calculates the running total of sales amount over the last 12 months, including the current month. The measure should be dynamic based on the filter context. Which DAX expression should you use?

A.CALCULATE(SUM(Sales[Amount]), DATESBETWEEN(Date[Date], DATE(2024,1,1), MAX(Date[Date])))
B.CALCULATE(SUM(Sales[Amount]), PARALLELPERIOD(Date[Date], -12, MONTH))
C.CALCULATE(SUM(Sales[Amount]), DATESINPERIOD(Date[Date], MAX(Date[Date]), -12, MONTH))
D.TOTALYTD(SUM(Sales[Amount]), Date[Date])
AnswerC

DATESINPERIOD correctly constructs a contiguous range of dates ending at MAX(Date[Date]) and extending backward 12 months using the MONTH interval. This creates a filter context containing approximately 365 days that includes the current month and the preceding 11 months, so the CALCULATE SUM aggregates all sales attributable to that trailing twelve-month window. Because the end date is dynamically determined by the active filter context and the interval is relative, the measure automatically updates as the user selects different time periods, making it the accurate rolling 12-month total.

Why this answer

Option C is correct because DATESINPERIOD(Date[Date], MAX(Date[Date]), -12, MONTH) returns a rolling 12-month window ending at the last date in the current filter context, and wrapping it in CALCULATE makes the running total dynamic as slicers or visuals change. This matches the requirement to include the current month and the preceding 11 months. Option A uses hard-coded dates from 2024-01-01, so it is not dynamic and may not cover the last 12 months.

Option B uses PARALLELPERIOD, which shifts the entire period back 12 months rather than accumulating a rolling 12-month total. Option D uses TOTALYTD, which calculates a year-to-date total from the start of the fiscal or calendar year, not a rolling 12-month total.

126
MCQhard

A Power BI developer is troubleshooting a report that uses a calculated table. The calculated table is defined as: 'Sales Summary = SUMMARIZE(Sales, Sales[ProductID], "Total Sales", SUM(Sales[Amount]))'. Users report that the 'Total Sales' column shows incorrect values when slicers are applied to the report. What is the most likely cause?

A.The calculated table lacks a relationship to the Sales table.
B.Calculated tables are static and do not respond to slicer selections.
C.The SUMMARIZE function syntax is incorrect.
D.The calculated table is not marked as a date table.
AnswerB

A calculated table in DAX is materialized in memory when the model is refreshed, meaning its rows and values are stored as static data in the VertiPaq engine. Slicer selections generate a filter context at query time and can only filter visuals over existing rows; they cannot re-execute the table expression for each selection. To make a summary respond to slicers, the aggregation must be defined as a measure or use a dynamic technique such as a disconnected table with measures.

Why this answer

Calculated tables in Power BI are evaluated at data refresh time and stored in the model as static data. They do not respond to slicer selections or any other report-level filters because they are not recalculated in the query context. Therefore, the 'Total Sales' column in the 'Sales Summary' table will always show the same aggregated values regardless of slicer interactions, which is why users see incorrect values when applying slicers.

Exam trap

The trap here is that candidates often confuse calculated tables with calculated columns or measures, assuming that all DAX expressions are dynamic and respond to slicers, but calculated tables are static and only evaluated at refresh time.

How to eliminate wrong answers

Option A is wrong because a calculated table defined with SUMMARIZE on the Sales table does not require a separate relationship to the Sales table; it inherits the data directly from the source table and any existing relationships in the model are irrelevant to the static nature of calculated tables. Option C is wrong because the SUMMARIZE function syntax is correct: it groups by Sales[ProductID] and creates a new column 'Total Sales' with the sum of Sales[Amount]; there is no syntax error. Option D is wrong because marking a table as a date table is only relevant for time intelligence functions and date-based filtering, not for the static behavior of calculated tables or their response to slicers.

127
MCQhard

You are a data analyst at a global retail company. You are building a Power BI semantic model to analyze sales performance across 50 countries. The data source is an Azure SQL Database with tables: Sales (SalesID, ProductID, StoreID, DateKey, Quantity, Amount), Products (ProductID, ProductName, CategoryID), Stores (StoreID, StoreName, CountryID), Countries (CountryID, CountryName), and Dates (DateKey, Date, Year, Month, Quarter). The model must support: 1) Hierarchical drill-down from Year to Quarter to Month. 2) Slicers for Country and Product Category. 3) Measures for Total Sales, Year-over-Year growth, and Moving Average (last 12 months). 4) The ability to filter by date range (e.g., last 3 months) while preserving the ability to show YoY growth for the selected period. The database contains 500 million rows in the Sales table. The company has strict performance requirements: report pages must load within 5 seconds. You need to design the model in Power BI Desktop. Which approach should you take?

A.Use DirectQuery storage mode for all tables to ensure real-time data and aggregate queries at the source.
B.Use a composite model: Import for dimension tables and DirectQuery for Sales table to balance freshness and performance.
C.Use Import storage mode for all tables with incremental refresh policy on the Sales table to load only the last 5 years of data.
D.Use Import mode but do not create a date table; instead use the DateKey column from Sales for time intelligence.
AnswerC

Importing all tables into memory and applying an incremental refresh policy to the Sales table to keep only the last 5 years is the correct approach because it reduces the 500M-row table to a manageable subset that leverages the VertiPaq columnstore engine for in-memory aggregations. Incremental refresh uses RangeStart/RangeEnd parameters to filter historical data during each refresh, while keeping the model's date table and time-intelligence functions intact. This delivers fast, consistent performance and satisfies the requirement for a date hierarchy without sacrificing freshness of the most recent data.

Why this answer

Option C is correct because Import mode with incremental refresh on the 500-million-row Sales table delivers the sub-5-second report performance required, while the incremental refresh policy limits data loaded to the last 5 years and only refreshes changed partitions. Import mode also fully supports the required Year→Quarter→Month hierarchy, Country and Category slicers, and DAX time-intelligence measures like YoY growth and a 12-month moving average, provided a proper Dates table is related to Sales. Option A is wrong because DirectQuery for all tables pushes every visual query to Azure SQL, which will not reliably meet the 5-second page load requirement at this data volume.

Option B is wrong because DirectQuery on the large Sales table still incurs slow remote queries for aggregations and time intelligence. Option D is wrong because using DateKey from Sales without a dedicated date table prevents correct time-intelligence functions such as SAMEPERIODLASTYEAR and DATESINPERIOD.

← PreviousPage 2 of 2 · 127 questions total

Ready to test yourself?

Try a timed practice session using only Model the data questions.