Courseiva

CCNA Model the data Questions

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

1
MCQeasy

A company has a fact table with sales data and multiple dimension tables. They want to create a measure that calculates the total sales amount for the current year, but the measure returns incorrect results when used in a visual with a date hierarchy. What is the most likely cause?

A.The date table is not marked as a date table in Power BI.
B.The fact table is not in a star schema; it is snowflaked.
C.The relationship between the date table and the fact table is inactive.
D.The relationship between the date table and the fact table is set to bidirectional cross-filtering.
AnswerC

If the relationship between the date table and the fact table is inactive, the date table's columns will not automatically filter the fact table because an inactive relationship is ignored during normal filter propagation. A visual that uses a date hierarchy from the date table will still display dates, but the measure values will be evaluated without that date context—often showing the grand total or a blend of all dates—so the results appear correct in shape but are numerically wrong. The only way to apply the filter is to explicitly activate the relationship in DAX using USERELATIONSHIP, which the user has evidently not done.

Why this answer

If the relationship between the date table and the fact table is inactive, measures that rely on time intelligence functions (like TOTALYTD, SAMEPERIODLASTYEAR, or a simple SUM with date filtering) will not automatically propagate filters from the date hierarchy to the fact table. In Power BI, only one active relationship can exist between two tables; inactive relationships require explicit activation via USERELATIONSHIP in DAX. Without that, the measure ignores the date filter and returns incorrect or blank results.

Exam trap

The trap here is that candidates often assume any relationship between tables will automatically filter, but Power BI requires exactly one active relationship per pair of tables, and inactive relationships are ignored unless explicitly activated in DAX.

How to eliminate wrong answers

Option A is wrong because marking a table as a date table is not required for basic time intelligence; it only enables automatic date hierarchy creation and certain time intelligence functions to work correctly, but it does not cause incorrect results in a visual with a date hierarchy if the relationship is active. Option B is wrong because a snowflake schema does not inherently break time intelligence; it may affect performance or model complexity, but it does not cause a measure to return incorrect results due to filter propagation. Option D is wrong because bidirectional cross-filtering would actually strengthen filter propagation, not cause incorrect results; it might lead to ambiguity or unexpected filtering, but it would not cause the measure to ignore the date filter entirely.

2
Multi-Selectmedium

Which TWO DAX functions can be used to create a calculated table in Power BI?

Select 2 answers
A.SELECTEDVALUE
B.FILTER
C.CALCULATE
D.SUMMARIZECOLUMNS
E.SUMX
AnswersB, D

FILTER returns a table that contains only the rows from its first argument that satisfy the Boolean condition provided as the second argument. This table-returning behavior makes it a valid DAX function for creating a calculated table, such as a filtered subset of a fact or dimension table. For example, FILTER('Sales', 'Sales'[Amount] > 1000) yields a table that can be stored as a calculated table.

Why this answer

FILTER (B) is correct because it is a table-returning DAX function that produces a filtered table, which can be used as the expression of a calculated table (e.g., a table defined as FILTER(Sales, Sales[Amount] > 1000)). SUMMARIZECOLUMNS (D) is also correct because it returns a table grouped by specified columns with aggregated values, making it a valid expression for creating a calculated table. Both functions return table values, which is the requirement for a calculated table's definition.

SELECTEDVALUE (A) returns a scalar value from a single-column context, not a table, so it cannot define a calculated table. CALCULATE (C) modifies filter context and returns a scalar value, not a table, so it is invalid here. SUMX (E) is an iterator that returns a scalar aggregate, not a table, so it also cannot create a calculated table.

3
Multi-Selectmedium

You are preparing a Power BI semantic model for a retail chain. The model contains a Products dimension and a Sales fact table. Management wants to analyze sales by product category and also by product subcategory, which is stored in a separate Subcategory table that relates to Products. You need to decide which relationship and modeling choices let filters flow from Subcategory through Products to Sales. (Choose two.)

Select 2 answers
A.Ensure the Products table has a unique value for the subcategory key on the one side of the relationship.
B.Set the relationship between Subcategory and Products to bidirectional cross-filtering to guarantee filters reach Sales.
C.Mark the Subcategory table as a date table so it participates in time intelligence.
D.Create a one-to-many relationship from Subcategory to Products on the subcategory key, with single-direction filtering from Subcategory to Products.
E.Hide the subcategory key columns in both tables so users interact only with the descriptive names.
AnswersA, D

A one-to-many relationship requires the one side to contain unique values; if the products table's subcategory key repeated, the relationship could not be created as one-to-many and would either fail or become many-to-many. Uniqueness on the one side guarantees correct filter propagation from Subcategory to Products and onward to Sales.

Why this answer

Filter propagation through a snowflaked dimension depends on a correctly defined one-to-many relationship with unique values on the one side and single-direction filtering along the hierarchy. Hiding keys, forcing bidirectional filtering, or marking an unrelated table as a date table does not enable the required filter flow and can introduce ambiguity or validation errors.

Exam trap

The trap here is assuming bidirectional cross-filtering is needed to push filters through a snowflake, when single-direction relationships along the hierarchy already propagate them.

4
MCQmedium

Your Power BI model includes a calculated column that concatenates first and last name. Users report that the column shows blank for some rows. The data source has no nulls. What is the most likely cause?

A.Data type mismatch between the two columns
B.The columns are from different tables without a relationship
C.The relationship between tables is set to single direction
D.One of the columns contains only spaces
AnswerD

If one column contains only spaces (for example, a person's last name field holding `" "`), the concatenated result is a string composed entirely of whitespace. Because DAX does not automatically trim leading or trailing spaces in concatenation, the resulting column looks empty in visuals and may be treated as blank by later functions, even though it is not a true BLANK. This explains why the calculated column appears blank while actually holding a space-only value.

Why this answer

If a source column contains only spaces (or empty strings that appear as spaces), concatenating it with another column can produce a result that appears blank or contains only spaces. Power BI's concatenation does not trim whitespace, so the resulting column may display as blank in visuals.

Exam trap

PL-300 often tests the misconception that blank results in calculated columns are due to data type or relationship issues, when the actual cause is often whitespace or empty strings in the source data that are not visually obvious.

How to eliminate wrong answers

Option A is wrong because a data type mismatch would typically cause an error or coercion, not a blank result; Power BI would either convert types or show an error, not silently blank the column. Option B is wrong because calculated columns operate within a single table; if the columns are from different tables, the DAX would need RELATED, but the question states the column concatenates first and last name, implying they are in the same table or accessible. Option C is wrong because relationship direction affects filter propagation, not the concatenation of two columns within a row; it would not cause blanks in a calculated column.

5
MCQeasy

You are a data analyst for a manufacturing company. You have a Power BI semantic model with a table named Production that includes a column ProductionDate of data type Date/Time. You need to create a calculated column that returns the year from ProductionDate. Which DAX function should you use?

A.YEAR(Production[ProductionDate])
B.FORMAT(Production[ProductionDate], "YYYY")
C.DATEVALUE(Production[ProductionDate])
D.EXTRACT(YEAR FROM Production[ProductionDate])
AnswerA

The YEAR function extracts the year from a date column and returns an integer. It is the correct function for this requirement. It works on a column reference and can be used in a calculated column. This is a straightforward and efficient way to get the year component from a date.

Why this answer

The YEAR function is the correct DAX function to extract the year from a date column. It returns an integer and is efficient. The other options either return text, convert text to date, or are not valid DAX functions.

Using YEAR is the standard approach for creating a year calculated column.

Exam trap

The trap here is using FORMAT to extract the year, which returns a text string and can cause sorting issues.

6
MCQhard

You are reviewing a Power Query M script used to create a table in Power BI. The script imports data from SQL Server, filters for orders in 2022, groups by ProductID to sum revenue, sorts descending, and takes the top 10. However, the table loads slowly. You need to improve performance. Which change should you make?

A.Add a Table.Buffer step before the filter to speed up subsequent operations.
B.Remove the sorting step because it is unnecessary for the final table.
C.Modify the script to use a native SQL query that performs the filtering and aggregation on the server side.
D.Combine the filter, group, and sort into a single step using Table.Buffer.
AnswerC

Rewriting the M script to embed filtering and aggregation in a native SQL query pushes all heavy lifting to the source database engine, which is optimized for set-based operations and can use indexes, statistics, and parallelism. Only the aggregated, filtered result set is sent to Power Query, drastically reducing data transfer and memory usage while also enabling full query folding so the output is computed server-side. This is the correct approach because it minimizes the data volume that Power Query must load and process.

Why this answer

Pushing filtering, grouping, and aggregation to SQL Server via a native query reduces the volume of data transferred to Power BI and leverages the database engine's optimized execution. This minimizes memory and processing overhead in Power Query, directly addressing the slow load time caused by performing these operations on imported data.

Exam trap

The trap here is that candidates often assume buffering (Table.Buffer) or combining steps improves performance, when in reality the key performance gain comes from pushing transformations to the source database (query folding) to minimize data movement.

How to eliminate wrong answers

Option A is wrong because Table.Buffer only caches data in memory after it has already been loaded from SQL Server, which does not reduce data transfer or improve the initial load performance; it may even increase memory pressure. Option B is wrong because removing the sort step would change the result (top 10 requires sorted order), and sorting is not the primary cause of slowness; the bottleneck is the volume of data processed client-side. Option D is wrong because combining steps with Table.Buffer does not reduce the amount of data imported; it still requires all rows to be loaded into Power Query memory before any transformation, and buffering does not push computation to the server.

7
Multi-Selectmedium

Which TWO actions should you take to improve the performance of a DirectQuery model in Power BI? (Select two.)

Select 2 answers
A.Limit the columns selected to only those needed in the report.
B.Use calculated columns instead of measures to precompute values.
C.Push filters to the source database as much as possible.
D.Create aggregations on the imported tables.
E.Implement row-level security filters on the fact table.
AnswersA, C

Limiting columns to only those needed reduces the amount of data loaded into the model and the size of each query. In both Import and DirectQuery modes, cutting unused columns decreases memory consumption, storage, and network transfer, which directly lowers query execution time. This is a recommended first step for any performance optimization because it has no downside other than losing access to fields that aren't used.

Why this answer

Option A is correct because a DirectQuery model translates each visual into a query against the source, so limiting the columns selected to only those needed in the report reduces the width of the generated SQL and the volume of data transferred, lowering query cost and latency. Option C is correct because pushing filters to the source database as much as possible lets the backend engine apply its own indexing and query optimization, so less data is returned to Power BI and processing is done where it is most efficient. Option B is wrong because calculated columns in a DirectQuery table are computed at query time and can force row-by-row evaluation or even prevent query folding, which typically hurts rather than helps performance.

Option D is wrong because aggregations on imported tables apply to Import mode tables, not to a DirectQuery model's source tables. Option E is wrong because row-level security filters add predicates to every DirectQuery query and increase complexity and overhead rather than improving performance.

8
Multi-Selectmedium

Which TWO of the following are best practices when designing star schemas in Power BI? (Select two.)

Select 2 answers
A.Store numeric measures in fact tables.
B.Use calculated columns in fact tables for row-level security.
C.Place descriptive attributes in dimension tables.
D.Include many columns in fact tables for filtering.
E.Normalize dimension tables to reduce redundancy.
AnswersA, C

Fact tables are the correct home for numeric, additive measures such as sales amount, quantity, or margin. These values represent the measurable business event at the grain of each fact row and are intended to be aggregated across dimensions. Placing measures in fact tables leverages Power BI's columnar storage and compression, enabling fast DAX calculations and efficient summarization. A well-designed fact table contains only foreign keys and numeric measures, keeping it narrow and high-performing.

Why this answer

Option A is correct because fact tables should contain numeric, additive measures (such as Sales Amount or Quantity) that can be aggregated by the Power BI engine, which is the core purpose of a star schema fact table. Option C is correct because descriptive attributes (such as Product Name, Category, or Customer City) belong in dimension tables, where they serve as the "by" fields for slicing and filtering the numeric measures in the fact table. Option B is not a best practice because row-level security should be implemented with DAX filter expressions on dimension tables (or via roles), not by adding calculated columns to fact tables, which bloats the model and hurts performance.

Option D is wrong because fact tables should stay narrow and contain only keys and measures; adding many columns for filtering increases model size and degrades compression and query performance. Option E is incorrect because star schemas deliberately use denormalized, flattened dimension tables to reduce the number of joins and improve query performance in Power BI.

Exam trap

The trap here is that candidates often confuse normalization (Option E) as a best practice from transactional databases, but Power BI star schemas require denormalized dimensions for optimal performance, and they may also mistakenly think calculated columns in fact tables (Option B) are acceptable for RLS, ignoring the performance and design implications.

9
MCQeasy

You need to create a relationship between two tables in Power BI. Table A has a column 'ProductID' with unique values. Table B has a column 'ProductID' with duplicate values. Which relationship cardinality should you choose?

A.Many-to-one (Table A to Table B)
B.One-to-many (Table A to Table B)
C.One-to-one
D.Many-to-many
AnswerB

Correct because Table A (dimension) has unique values on the key column, and Table B (fact) contains many rows referencing that key. Power BI will filter Table B by selections in Table A. This is the standard star-schema relationship.

Why this answer

The correct choice is B, One-to-many (Table A to Table B), because Table A's ProductID column contains unique values, making it the 'one' side, while Table B's ProductID column has duplicates, making it the 'many' side; in Power BI this is the standard star-schema relationship where the unique-key table filters the fact table. A one-to-many relationship from Table A to Table B correctly reflects that each ProductID in A can match multiple rows in B. Option A (many-to-one) reverses the direction and would require Table B to be the unique side.

Option C (one-to-one) is invalid because Table B has duplicate ProductID values. Option D (many-to-many) is unnecessary and would not be the appropriate model when one side is already unique.

10
MCQmedium

You are designing a data model for a report that shows sales by region and product category. The source data includes a table 'Sales' with columns: Region, Category, SalesAmount. You also have separate tables 'Regions' and 'Categories' that contain additional attributes. You need to create a star schema. What should you do with the 'Region' and 'Category' columns in the 'Sales' table?

A.Remove them from the Sales table and use foreign keys to link to the dimension tables
B.Keep them in the Sales table as attributes for simplicity
C.Merge the Regions and Categories tables into the Sales table
D.Mark the Sales table as a date table
AnswerA

This is the correct star schema approach. Remove region and category descriptive text from the Sales table and replace them with foreign key columns (e.g., RegionID, CategoryID) that reference the primary keys of dedicated dimension tables. This normalizes the fact table, eliminates redundant string storage, and enables DAX filter and slicer operations to traverse relationships efficiently. It also simplifies future updates to dimension attributes without rewriting historical sales rows.

Why this answer

In a star schema, dimension tables (Regions, Categories) contain descriptive attributes, and the fact table (Sales) stores foreign keys referencing those dimensions. Removing the Region and Category columns from the Sales table and replacing them with foreign keys (e.g., RegionID, CategoryID) normalizes the model, reduces data redundancy, and enables efficient filtering and slicing by region and category attributes. This approach aligns with best practices for Power BI data modeling, ensuring optimal query performance and maintainability.

Exam trap

The trap here is that candidates often think keeping attributes in the fact table is simpler and faster, not realizing that a normalized star schema with foreign keys actually improves performance and scalability in Power BI.

How to eliminate wrong answers

Option B is wrong because keeping Region and Category as attributes in the Sales table violates star schema principles, leading to data duplication, larger table size, and inefficient filtering when dimension attributes change. Option C is wrong because merging the Regions and Categories tables into the Sales table creates a wide, denormalized flat table, which defeats the purpose of a star schema and increases storage and refresh overhead. Option D is wrong because marking the Sales table as a date table is irrelevant; date tables are used for time intelligence functions, and Sales is a fact table, not a date dimension.

11
MCQeasy

You have a Power BI model with a table 'Sales' that contains a column 'OrderDate'. You need to create a calculated column that extracts the year from OrderDate. Which DAX expression should you use?

A.DATEPART("year", Sales[OrderDate])
B.YEAR(Sales[OrderDate])
C.CALENDAR(YEAR(Sales[OrderDate]), YEAR(Sales[OrderDate]))
D.FORMAT(Sales[OrderDate], "yyyy")
AnswerB

YEAR(Sales[OrderDate]) correctly uses the DAX YEAR function, which takes a date or datetime value and returns the corresponding four-digit year as an integer. Because Sales[OrderDate] is a date column, the function evaluates the date part of each row and yields a scalar numeric value, e.g., 2024. This is an efficient, type-safe way to create a Year column or measure for grouping, sorting, and filtering in Power BI.

Why this answer

The correct option is B, YEAR(Sales[OrderDate]), because DAX provides the YEAR() function specifically to extract the integer year from a date column, which is exactly what is needed for a calculated column on Sales[OrderDate]. Option A is invalid because DATEPART is a T-SQL function, not a DAX function, so it would not work in a Power BI calculated column. Option C, CALENDAR(YEAR(...), YEAR(...)), returns a single-column table of dates rather than a scalar year value, so it cannot be used as a calculated column expression.

Option D, FORMAT(Sales[OrderDate], "yyyy"), returns the year as a text string rather than a numeric value, which is less appropriate for extracting the year for typical numeric or sorting use.

12
MCQmedium

You are designing a star schema for a sales data model. Which table should be defined as a dimension table?

A.TransactionID
B.OrderQuantity
C.SalesAmount
D.Date
AnswerD

Date is a classic dimension in a star schema because it provides the descriptive context necessary for time-based analysis, such as year, quarter, month, and day attributes. The Date dimension is placed in a separate table from the fact table to avoid repeating date attributes across fact rows, thereby reducing redundancy and enabling efficient filtering, grouping, and time intelligence calculations like year-to-date or period-over-period comparisons. Its role as a conformed dimension allows multiple fact tables (e.g., sales, orders) to share the same date dimension, making it a fundamental and correct choice for this design.

Why this answer

Option D, Date, is correct because a dimension table stores descriptive attributes used to filter, group, and label facts, and a Date dimension provides calendar attributes such as year, quarter, month, and day for slicing sales measures. In a star schema, the fact table holds numeric measures and foreign keys, while dimensions like Date supply the context for analysis. TransactionID, OrderQuantity, and SalesAmount are not dimension tables: TransactionID is typically a fact table key or degenerate dimension, and OrderQuantity and SalesAmount are numeric measures that belong in the fact table.

Therefore, Date is the only appropriate dimension table among the listed options.

13
Multi-Selecthard

You are a data analyst for a manufacturing company. You have a Power BI semantic model that imports data from an Azure SQL Database. The model contains a fact table named Production and a dimension table named Products. The Products table has columns ProductID, ProductName, Category, and Subcategory. You need to reduce the model size and improve query performance. Which two actions should you take? (Choose two.)

Select 2 answers
A.Change the data type of ProductID from Text to Whole Number.
B.Enable 'Auto date/time' for the Production table.
C.Remove unused columns from the Products table.
D.Create a hierarchy for Category and Subcategory.
E.Set the Category and Subcategory columns to use the 'Summarize by: Don't summarize' property.
AnswersA, C

ProductID is likely a numeric identifier. Storing it as a whole number instead of text reduces storage because numeric data types compress better and require less memory. This improves performance and reduces model size, assuming the values are indeed numeric and used as a key.

Why this answer

Removing unused columns and converting numeric keys stored as text to whole numbers both reduce the model's memory footprint and improve query performance. Unused columns add unnecessary cardinality and storage, while text columns are less efficient than numeric types. The other options either affect only metadata or increase model size.

Exam trap

The trap here is assuming that cosmetic settings like 'Don't summarize' or hierarchies affect performance, when they are purely metadata or usability features.

14
Multi-Selecteasy

Which TWO are valid reasons to use a date table in a Power BI semantic model? (Select two.)

Select 2 answers
A.To allow users to drill down into non-date hierarchies.
B.To automatically generate date hierarchies in visuals.
C.To enable time intelligence functions like TOTALYTD and SAMEPERIODLASTYEAR.
D.To improve the performance of relationships between tables.
E.To ensure consistent date filtering across multiple fact tables.
AnswersC, E

DAX time intelligence functions such as TOTALYTD and SAMEPERIODLASTYEAR require a continuous, contiguous set of dates and a proper filter context over a date column. A date table marked as a date table in Power BI Desktop fulfills this by providing an unambiguous date column and a relationship to your fact tables, ensuring the functions return accurate results. Without a marked date table, these functions may produce incorrect or missing values, especially when your fact dates are sparse or discontinuous.

Why this answer

Option C is correct because time intelligence DAX functions such as TOTALYTD, SAMEPERIODLASTYEAR, DATESYTD, and DATEADD require a contiguous, marked date table with a Date column at day granularity; without a proper date table these functions return incorrect or blank results. Option E is correct because a single shared date table can be related to multiple fact tables, letting one slicer or filter on the date dimension consistently filter all facts instead of relying on each fact's own date column. Options A, B, and D are not valid reasons: drill-down works with any hierarchy, not specifically a date table; Power BI can auto-generate date hierarchies from a date field without a dedicated date table; and relationship performance depends on cardinality, cross-filter direction, and model design rather than on the presence of a date table.

15
Multi-Selecthard

Which THREE of the following are best practices for designing a Power BI data model?

Select 3 answers
A.Use composite keys in relationships for better performance
B.Enable bidirectional cross-filtering by default
C.Implement business logic in measures rather than calculated columns
D.Use a star schema design with dimension and fact tables
E.Use surrogate keys for dimension tables
AnswersC, D, E

Measures are evaluated within the current filter context at query time, so they compute values dynamically and consume no physical memory for storage beyond their definition. Calculated columns, on the other hand, are computed during data refresh and stored in the model, increasing model size and refresh time. By implementing business logic in measures, you gain greater flexibility—logic can change without triggering a full refresh, and the same measure can respond differently based on how users filter or slice data, which is the intended DAX pattern.

Why this answer

Option C is correct because measures are evaluated at query time and do not consume memory or storage in the model, whereas calculated columns are materialized during refresh, increasing model size and refresh time; pushing business logic into measures therefore improves performance and flexibility. Option D is correct because a star schema with dimension and fact tables is the recommended Power BI modeling pattern: it produces simpler relationships, more efficient DAX and VertiPaq compression, and better query performance than snowflaked or flat designs. Option E is correct because surrogate keys (meaningless integer keys) in dimension tables keep relationships narrow and integer-based, which compresses better and performs faster than natural or string keys, and they insulate the model from changes in source business keys.

Option A is not a best practice because composite keys in relationships are not supported for all cardinalities and generally add complexity and overhead; a single surrogate key is preferred. Option B is not a best practice because bidirectional cross-filtering by default can introduce ambiguous filter paths, degrade performance, and cause unexpected results; it should be enabled only when a specific requirement demands it.

16
MCQeasy

You are modeling a many-to-many relationship between 'Student' and 'Class' tables. Which approach should you use in Power BI to handle this?

A.Merge both tables into one
B.Use bidirectional cross-filtering
C.Add a bridge table with composite keys
D.Create a single one-to-many relationship
AnswerC

Adding a bridge table with composite keys decomposes the many-to-many relationship into two separate one-to-many relationships: each original table relates to the bridge table on its respective key, and the bridge table stores only valid combinations. This makes the relationship graph acyclic and unambiguous, so filter propagation follows clear paths from one dimension through the bridge to the other dimension without double-counting. Composite keys in the bridge ensure that the join preserves the exact pairing of rows, which is the standard star-schema pattern for resolving many-to-many cardinality in Power BI.

Why this answer

A many-to-many relationship in Power BI requires a bridge (or junction) table that contains composite keys (e.g., StudentID and ClassID) to resolve the relationship into two one-to-many relationships. This allows Power BI to properly filter and aggregate data across both tables without ambiguity.

Exam trap

The trap here is that candidates often confuse bidirectional cross-filtering (Option B) as a direct solution for many-to-many relationships, but Power BI requires a bridge table to properly resolve the cardinality, as bidirectional filtering alone does not create the necessary intermediate structure.

How to eliminate wrong answers

Option A is wrong because merging both tables into one would create a flat, denormalized table that duplicates data and loses the relational structure, making it impossible to maintain separate granularities for students and classes. Option B is wrong because bidirectional cross-filtering can cause ambiguous filtering and performance issues in many-to-many scenarios, and it does not resolve the underlying cardinality mismatch without a bridge table. Option D is wrong because a single one-to-many relationship cannot represent a many-to-many relationship; it would force a one-to-many direction that incorrectly assumes each student belongs to only one class or vice versa.

17
MCQeasy

You are importing data from a SQL Server database into Power BI. The source table has a column 'OrderDate' of type DATETIME. You want to filter data based on the date only, ignoring time. What is the most efficient approach?

A.Change the data type of the OrderDate column to 'Date' in Power Query.
B.Create a calculated column in DAX using DATEVALUE(OrderDate).
C.Create a new column in Power Query using Date.From(OrderDate).
D.Use the 'Split Column' feature in Power Query to separate date and time.
AnswerA

Changing the data type of the OrderDate column to 'Date' in Power Query is the most efficient solution because it performs the conversion directly on the existing column during data load, using Power Query's native type system. This eliminates the time portion without adding a new column or increasing model size, and it ensures the column is properly date-typed for all downstream reports. The statement about being less explicit is misleading; altering the data type is the standard approach when you need to discard the time component.

Why this answer

Changing the data type of the OrderDate column to 'Date' in Power Query is the most efficient approach. This modifies the existing column directly, avoiding the storage of an additional column and reducing memory usage. Unlike creating a new column with Date.From(), which keeps both the original datetime and the new date column, changing the data type is simpler and more memory-efficient.

Power Query transformations like changing data type are applied during data load, making them more performant than DAX calculated columns, which are computed after data is loaded.

Exam trap

The trap is that candidates often assume creating a new column with Date.From() in Power Query is equally efficient, but changing the data type of the existing column is more memory-efficient because it avoids storing an extra column.

How to eliminate wrong answers

Option A is wrong because changing the data type to 'Date' in Power Query modifies the source column permanently, which may lose time information needed for other analyses and requires reloading data if the original datetime is needed later. Option C is wrong because creating a new column in Power Query using Date.From(OrderDate) is functionally similar to Option A but adds an extra column, increasing data model size and processing overhead without performance benefit over a DAX calculated column. Option D is wrong because using 'Split Column' to separate date and time is inefficient and unnecessary, as it creates two columns and adds complexity, whereas a simple DAX calculated column achieves the same result with less overhead.

18
MCQmedium

You are reviewing the partition configuration for a Power BI Import model as shown in the exhibit. The table Sales is partitioned by year. You need to modify the model to improve incremental refresh performance. What change should you make?

A.Increase the number of partitions to monthly
B.Configure incremental refresh policy
C.Remove all partitions and load data as a single table
D.Change the storage mode to DirectQuery
AnswerB

Configuring an incremental refresh policy is the correct approach because it automatically creates and manages partitions based on a date range, typically using RangeStart and RangeEnd parameters. During each refresh, only the data that has changed or is new within the sliding window is processed, while historical partitions remain untouched, significantly reducing refresh time and resource consumption. This also enables query pruning in the Power BI service, as only relevant partitions are scanned when building visuals, making it the most efficient way to optimize refresh performance for large fact tables.

Why this answer

Configuring an incremental refresh policy (Option B) is the correct approach because it automatically manages partition creation and refresh for the Sales table based on a date/time column. This improves performance by refreshing only the most recent data (e.g., last 5 years) while keeping historical partitions unchanged, reducing refresh time and resource consumption compared to manual yearly partitions.

Exam trap

The trap here is that candidates may think increasing partition count (Option A) always improves performance, but in Power BI, too many partitions increase metadata overhead and refresh orchestration time, making incremental refresh policies the correct solution for efficient, automated partition management.

How to eliminate wrong answers

Option A is wrong because increasing partitions to monthly would create more granular partitions, which can actually degrade refresh performance due to overhead from managing many small partitions, and it does not address the need for incremental refresh logic. Option C is wrong because removing all partitions and loading data as a single table would force a full refresh of the entire Sales table every time, eliminating any performance gains from partitioning and incremental refresh. Option D is wrong because changing the storage mode to DirectQuery would bypass the Import model entirely, which is not an incremental refresh improvement and could introduce query performance issues due to live querying of the source.

19
Multi-Selecthard

Which TWO of the following are true about the Power BI composite model?

Select 2 answers
A.Composite models do not support many-to-many relationships.
B.All tables in a composite model must use the same storage mode.
C.A composite model can combine DirectQuery and Import tables.
D.Relationships can be created between tables from different source groups.
E.Calculated tables are not supported in composite models.
AnswersC, D

This is a key feature of composite models.

Why this answer

A composite model in Power BI allows mixing DirectQuery and Import tables within the same data model. This enables you to leverage the performance of in-memory Import storage for some tables while using DirectQuery to access large or real-time data sources without duplicating data.

Exam trap

The trap here is that candidates often assume composite models require uniform storage modes or cannot handle many-to-many relationships, but Power BI's composite model is designed to flexibly mix storage modes and supports many-to-many relationships through proper configuration.

20
MCQeasy

You have a Power BI model with a fact table 'Sales' and a dimension table 'Product'. The Product table contains columns: ProductID, ProductName, Category, and Subcategory. You want to create a hierarchy for drill-down in reports: Category > Subcategory > ProductName. What is the correct way to define this hierarchy?

A.In Model view, right-click 'Category' > 'Create hierarchy', then add Subcategory and ProductName as levels.
B.In Power Query, merge the Category, Subcategory, and ProductName columns into one.
C.Create a calculated column using CONCATENATE to combine the levels.
D.In Report view, add all three columns to a visual's Values well.
AnswerA

This is the correct approach because a hierarchy created in Model view is a model-level object that explicitly defines parent-child relationships among the columns. Right-clicking Category and selecting 'Create hierarchy' places Category as the top level, after which you add Subcategory and ProductName as child levels, preserving each column's own granularity. A true hierarchy enables drill-down in visuals by expanding one level to the next, and it also supports functions like ISINSCOPE in DAX for level-aware calculations.

Why this answer

Power BI's Model view allows you to create a hierarchy by right-clicking a column (e.g., Category) and selecting 'Create hierarchy', then adding Subcategory and ProductName as child levels. This defines a natural drill-down path for visuals, enabling users to navigate from Category to Subcategory to ProductName without modifying the data model or using workarounds.

Exam trap

The trap here is that candidates often confuse flattening data (merging or concatenating) with creating a true hierarchy, leading them to choose options B or C, which break drill-down functionality.

How to eliminate wrong answers

Option B is wrong because merging columns in Power Query creates a single text field, destroying the individual column granularity and preventing proper drill-down behavior in visuals. Option C is wrong because a calculated column using CONCATENATE also flattens the hierarchy into a single string, losing the ability to drill down stepwise through distinct levels. Option D is wrong because adding all three columns to a visual's Values well does not create a hierarchy; it treats each column as a separate measure or axis, not a structured drill-down path.

21
MCQeasy

A data model has a table 'Orders' with columns: OrderID, CustomerID, OrderDate, Amount. There is a 'Customers' table with columns: CustomerID, CustomerName. To analyze orders by customer, what is the best practice for modeling the relationship?

A.Create a one-to-many relationship from Customers to Orders with single direction.
B.Create a one-to-one relationship between Customers and Orders based on CustomerID.
C.Create an inactive relationship and use USERELATIONSHIP in measures.
D.Create a many-to-one relationship from Orders to Customers with both directions.
AnswerA

This is the correct star schema design. The Customers table is a dimension with a unique CustomerID per row, while Orders is a fact table that can contain many rows per CustomerID. A one-to-many relationship from Customers to Orders lets filters applied to customers (e.g., region, segment) automatically propagate to their orders in visualizations and measures. The single cross-filter direction ensures one-way filtering from the dimension to the fact, which is the standard, repeatable pattern that avoids ambiguity and keeps DAX calculations predictable.

Why this answer

In a star schema, the Customers table (dimension) should have a one-to-many relationship to the Orders table (fact) filtered from the dimension side. This single-direction filter propagation ensures that when a customer is selected, only their orders are shown, while preventing unwanted cross-filtering from orders back to customers. This is the standard best practice for modeling dimension-to-fact relationships in Power BI.

Exam trap

The trap here is that candidates often confuse the direction of the relationship (thinking the fact table should be on the 'one' side) or overcomplicate the model by using inactive relationships or bidirectional filtering when a simple single-direction one-to-many is the correct and efficient choice.

How to eliminate wrong answers

Option B is wrong because a one-to-one relationship between Customers and Orders would require each CustomerID to appear only once in Orders, which is unrealistic for a transactional fact table where one customer can have many orders. Option C is wrong because an inactive relationship with USERELATIONSHIP is only used when you need multiple relationships between the same two tables (e.g., OrderDate and ShipDate), not for the primary dimension-to-fact relationship which should always be active. Option D is wrong because a many-to-one relationship from Orders to Customers with both directions would create ambiguous cross-filtering and potential performance issues; bidirectional filtering is reserved for specific scenarios like many-to-many relationships, not for standard star schema modeling.

22
Multi-Selecthard

Which THREE of the following are best practices when designing a Power BI data model for performance?

Select 3 answers
A.Hide columns that are not needed in reports.
B.Avoid bi-directional cross-filtering unless necessary.
C.Use star schema design with dimension and fact tables.
D.Use many-to-many relationships directly without bridge tables.
E.Use calculated columns instead of measures for aggregations.
AnswersA, B, C

Marking unused columns as hidden simplifies the report field list and keeps users focused on the required metrics, which lowers the apparent model complexity and reduces the risk of building visuals on irrelevant data. Because hidden columns remain resident in the Tabular engine unless physically removed, this practice works hand-in-hand with deleting never-used columns to actually shrink the model and speed up refresh. It is a core modeling hygiene step that also makes column-level security and role definitions easier to audit.

Why this answer

Option A is correct because hiding unused columns reduces the model's exposed surface and prevents report authors from accidentally dragging unnecessary fields into visuals, which keeps the VertiPaq engine from scanning and materializing columns that add no analytical value. Option B is correct because bi-directional cross-filtering forces the engine to propagate filter context in both directions, which can create ambiguous filter paths, increase query complexity, and degrade performance; single-direction relationships should be the default unless a specific requirement demands otherwise. Option C is correct because a star schema with dimension and fact tables minimizes relationship hops, keeps filter propagation simple, and lets the VertiPaq engine compress and scan narrow fact tables efficiently, which is the recommended modeling pattern for Power BI performance.

Option D is not correct because many-to-many relationships without bridge tables introduce ambiguity and expensive filter propagation; the best practice is to resolve many-to-many with a bridge table and single-direction relationships. Option E is not correct because calculated columns are computed at refresh time and stored in the model, consuming memory and increasing refresh cost, whereas measures are evaluated at query time and are the preferred approach for aggregations in a performant model.

23
MCQmedium

You are a Power BI data analyst at a healthcare provider. Your semantic model contains a fact table named Visits with columns VisitID, PatientID, ProviderID, VisitDate, and ChargeAmount. You also have a dimension table named Patients with PatientID, PatientName, and PrimaryCareProviderID. You need to create a relationship between Visits and Patients so that filtering Patients by PrimaryCareProviderID correctly filters Visits. However, you discover that the Visits table has multiple rows per PatientID, and the Patients table has a unique PatientID. Which relationship should you create?

A.Create a many-to-many relationship between Visits[PatientID] and Patients[PatientID].
B.Create a many-to-one relationship from Visits[PatientID] (many side) to Patients[PatientID] (one side) and set the cross-filter direction to Both.
C.Create a one-to-many relationship from Visits[PatientID] (one side) to Patients[PatientID] (many side).
D.Create a one-to-many relationship from Patients[PatientID] (one side) to Visits[PatientID] (many side).
AnswerD

Because Patients[PatientID] is unique and Visits[PatientID] repeats, the correct cardinality is one-to-many from Patients to Visits. This relationship ensures that filtering Patients by PrimaryCareProviderID propagates to Visits, enabling accurate aggregation of ChargeAmount. It also avoids ambiguity and supports efficient query performance, as the one side acts as the lookup dimension.

Why this answer

The relationship must be one-to-many from Patients to Visits because Patients[PatientID] is unique and Visits[PatientID] has duplicates. This allows filters on Patients, such as PrimaryCareProviderID, to propagate to Visits and correctly aggregate ChargeAmount. A many-to-many or reversed cardinality would not enforce referential integrity and could yield incorrect results.

Exam trap

The trap here is assuming that because Visits has many rows per patient, the relationship must be many-to-many or bidirectional, overlooking that a simple one-to-many from the unique dimension table is sufficient.

24
MCQmedium

You have a Power BI model with a table named 'Orders' that contains columns: OrderID, CustomerID, OrderDate, and TotalAmount. You need to create a measure that calculates the total sales amount for orders placed in the last 30 days, but only for customers who have placed more than 5 orders in total. What is the most efficient DAX measure?

A.TotalSalesLast30Days = CALCULATE(SUM(Orders[TotalAmount]), FILTER(Orders, Orders[OrderDate] > TODAY() - 30), FILTER(Orders, CALCULATE(COUNTROWS(Orders), ALLEXCEPT(Orders, Orders[CustomerID])) > 5))
B.TotalSalesLast30Days = CALCULATE(SUM(Orders[TotalAmount]), KEEPFILTERS(Orders[OrderDate] > TODAY() - 30), KEEPFILTERS(CALCULATE(COUNTROWS(Orders), ALLEXCEPT(Orders, Orders[CustomerID])) > 5))
C.TotalSalesLast30Days = SUMX(FILTER(Orders, Orders[OrderDate] > TODAY() - 30 && CALCULATE(COUNTROWS(Orders), ALLEXCEPT(Orders, Orders[CustomerID])) > 5), Orders[TotalAmount])
D.TotalSalesLast30Days = CALCULATE(SUM(Orders[TotalAmount]), DATESINPERIOD(Orders[OrderDate], TODAY(), -30, DAY))
AnswerC

This is the correct answer because it uses a single SUMX iterator over a FILTERed table, where the filter expression evaluates both conditions in one row context. Inside the filter, `CALCULATE(COUNTROWS(Orders), ALLEXCEPT(Orders, Orders[CustomerID]))` correctly counts all rows for the same customer, avoiding any interference from the date filter on the outer row, and the AND ensures only customers with more than five orders and a recent order date are included. SUMX then sums the TotalAmount across those qualifying rows, directly matching the requirement while remaining efficient and maintainable.

Why this answer

It iterates over filtered rows where both conditions are met using a single FILTER and SUMX, which is syntactically valid and more efficient than multiple FILTER iterators. Option B is invalid because KEEPFILTERS expects a filter expression, not a scalar boolean result from CALCULATE(...) > 5.

Exam trap

The trap here is that candidates often choose Option B because they think KEEPFILTERS can wrap a scalar boolean condition such as CALCULATE(COUNTROWS(...)) > 5. That is invalid; KEEPFILTERS expects a filter expression, not a boolean scalar. The correct approach uses SUMX with a single FILTER to apply both row-level conditions efficiently.

How to eliminate wrong answers

Option A is wrong because it uses two separate FILTER iterators over the Orders table, which forces a nested row context and can lead to incorrect results due to context transition; the second FILTER attempts to evaluate a CALCULATE with ALLEXCEPT inside a row context, which may not correctly count orders per customer. Option C is wrong because SUMX with a FILTER that includes a CALCULATE inside the logical expression causes context transition for each row, leading to poor performance and potentially incorrect customer-level aggregation; it also applies the date filter row-by-row rather than as a filter argument. Option D is wrong because it only filters by date using DATESINPERIOD and completely omits the customer condition (more than 5 orders), so it does not meet the requirement.

25
MCQeasy

You have a table with a column 'Date' and a measure 'Total Sales'. You want to calculate the cumulative total of sales over time. Which DAX function should you use?

A.SUM(Sales[Amount])
B.DATESYTD('Date'[Date])
C.CALCULATE(SUM(Sales[Amount]), ALL(Sales))
D.TOTALYTD(SUM(Sales[Amount]), 'Date'[Date])
AnswerD

TOTALYTD(SUM(Sales[Amount]), 'Date'[Date]) is the correct time intelligence function because it evaluates the sum of Amount for dates from the start of the year up to the last date in the current filter context. It respects the Date table's continuous date range and requires a proper relationship between the Date and Sales tables. This yields a cumulative year-to-date total that updates dynamically as the user browses different dates.

Why this answer

TOTALYTD(SUM(Sales[Amount]), 'Date'[Date]) is correct because it is a time-intelligence function that evaluates the sum expression over the year-to-date period ending at the latest date in the current filter context, producing a cumulative total over time. It takes the aggregation and a date column as arguments and automatically applies the necessary date filtering. SUM(Sales[Amount]) alone returns only the total for the current context, not a cumulative value.

DATESYTD returns a table of dates rather than a scalar cumulative total, and CALCULATE(SUM(Sales[Amount]), ALL(Sales)) removes filters to give a grand total, not a running cumulative total.

26
Multi-Selecteasy

Which TWO of the following are valid DAX functions for time intelligence? (Select two.)

Select 2 answers
A.RANKX
B.DATEADD
C.CONCATENATEX
D.MINX
E.TOTALYTD
AnswersB, E

DATEADD shifts a date column by a specified interval, returning dates offset by days, months, quarters or years. It is a genuine time-intelligence function, satisfying the stem because it operates on dates rather than aggregating values like SUM or COUNT.

Why this answer

DATEADD is a valid DAX time intelligence function that shifts dates forward or backward by a specified number of intervals (days, months, quarters, years). TOTALYTD is also a valid time intelligence function that calculates the year-to-date value of an expression. Both are part of the dedicated time intelligence function set in DAX, which requires a properly marked date table with continuous dates.

Exam trap

Microsoft often tests the distinction between iterator functions (like RANKX, MINX, CONCATENATEX) and dedicated time intelligence functions (like DATEADD, TOTALYTD), causing candidates to confuse functions that perform row-by-row operations with those that manipulate date ranges.

27
MCQhard

You are building a Power BI report for a multinational corporation. The data model includes a fact table named Orders with columns: OrderID, CustomerID, OrderDate, ProductID, Quantity, UnitPrice, and Discount. The Customer dimension contains columns: CustomerID, CustomerName, Country, and Segment. The Product dimension contains: ProductID, ProductName, Category, Subcategory, and Price. You need to create a calculated column in the Orders table that calculates the net amount after discount for each order line (Quantity * UnitPrice * (1 - Discount)). You also need to ensure that the column is stored in the model for high-performance filtering. Which DAX expression should you use?

A.NetAmount = SUMX(Orders, Orders[Quantity] * Orders[UnitPrice] * (1 - Orders[Discount]))
B.NetAmount = Orders[Quantity] * Orders[UnitPrice] * (1 - Orders[Discount])
C.NetAmount = CALCULATE(SUM(Orders[Quantity]) * SUM(Orders[UnitPrice]) * (1 - SUM(Orders[Discount])))
D.NetAmount = Orders[Quantity] * Orders[UnitPrice] - Orders[Discount]
AnswerB

This is the correct calculated column expression because it uses direct column references in row context, so for each order row it computes Quantity multiplied by UnitPrice, then multiplies by (1 - Discount) to apply the discount proportionally. The calculation respects the percentage nature of the discount and yields the net amount for that individual line item. The result is evaluated row by row and stored physically in the table, making it available for use as a column in reports.

Why this answer

Option B is correct because a calculated column in the Orders table must use row context, and the expression Orders[Quantity] * Orders[UnitPrice] * (1 - Orders[Discount]) evaluates row by row and is stored in the model for high-performance filtering. Option A is wrong because SUMX is an iterator that returns a scalar aggregate, not a row-level calculated column, and it would not produce a per-order-line value. Option C is wrong because CALCULATE with SUM aggregates the entire table and also misapplies the discount logic, rather than computing each row's net amount.

Option D is wrong because it subtracts the discount value directly instead of applying the percentage discount to Quantity * UnitPrice.

28
MCQmedium

You are building a star schema model in Power BI. You have a fact table of sales transactions and dimension tables for Date, Customer, Product, and Store. The Date table contains a column 'FiscalYear' that you want to use for time intelligence calculations. What is the best practice for handling the Date relationship?

A.Create a separate fiscal date table and relate it to the fact table using the FiscalYear column.
B.Use the built-in DATESYTD function directly on the OrderDate column from the fact table.
C.Create a composite key using FiscalYear and Quarter columns in the Date table and relate to the fact table.
D.Mark the Date table as a date table using the Calendar icon in the Table tools ribbon and set a relationship on the Date column.
AnswerD

Marking the Date table as a date table using the Calendar icon in the Table tools ribbon is the correct approach because it explicitly identifies the Date column as the continuous set of dates that Power BI uses to enable time intelligence functions like DATESYTD, TOTALYTD, and SAMEPERIODLASTYEAR. Setting a relationship on the Date column—which is unique and contiguous—ensures proper filtering from the date dimension to the fact table, following the star schema design principle. This allows DAX calculations to correctly respect the user's selected date range and fiscal calendar, making it the only option that fully supports robust time-based reporting.

Why this answer

Marking the Date table as a date table (via the Calendar icon in Table tools) and creating a relationship on the Date column is the best practice for time intelligence in Power BI. This ensures that DAX time intelligence functions (e.g., TOTALYTD, SAMEPERIODLASTYEAR) work correctly by using a single, continuous date column that aligns with the fact table's date column. It also avoids the need for composite keys or separate fiscal tables, maintaining a clean star schema.

Exam trap

The trap here is that candidates often think they need a separate fiscal table or composite keys to handle fiscal years, but Power BI's date table marking feature inherently supports fiscal calendars through the 'Mark as Date Table' option and the 'Start of Fiscal Year' setting, making those workarounds unnecessary and incorrect.

How to eliminate wrong answers

Option A is wrong because creating a separate fiscal date table related via FiscalYear would break the star schema's simplicity and prevent proper time intelligence, as DAX functions require a continuous date column, not a fiscal year column. Option B is wrong because DATESYTD requires a date column from a properly marked date table, not a direct call on a fact table column, and it would ignore the fiscal year context. Option C is wrong because a composite key using FiscalYear and Quarter would not provide a continuous date range for time intelligence, and Power BI relationships should be on a single, unique column (typically the date) to avoid ambiguity and support proper filtering.

29
MCQhard

You are designing a Power BI semantic model for a retail company. The model includes a Sales table (50 million rows) and a Product table (10,000 rows). You need to create a measure that calculates the average sales amount per product category. The Product table has a column 'Category' with 20 distinct values. To optimize performance, what should you do?

A.Add a calculated column to Sales that looks up the category using RELATED.
B.Summarize the Sales table to the category level in Power Query.
C.Create a separate calculated table for categories and link it to Sales.
D.Create a relationship between Sales and Product on ProductID, and use Product[Category] in the measure.
AnswerD

Creating a relationship from Sales to Product on ProductID and using Product[Category] inside the measure is the correct star-schema design. When the measure evaluates, category filters from the Product table propagate down the one-to-many relationship to Sales, and PowerPoint BI's in-memory engine pushes that filtering efficiently to the compressed fact table. This preserves the 50-million-row fact table at its lowest grain while allowing any product attribute to be used in measures without extra storage or materialization, making it ideal for performance and maintainability.

Why this answer

Option D is correct because creating a relationship between Sales and Product on ProductID and then using Product[Category] in the measure lets the VertiPaq engine aggregate the 50 million Sales rows through the dimension, which is the standard star-schema approach and performs best. The relationship filters Sales by category at query time, so no row-level lookups or duplicated category values are stored in the large fact table. Option A is wrong because a calculated column using RELATED materializes the category on all 50 million Sales rows, increasing model size and refresh time.

Option B is wrong because summarizing Sales to category level in Power Query destroys the detail needed for other measures and prevents dynamic slicing. Option C is wrong because a separate calculated table would not be related to Sales on ProductID and would not correctly filter the fact table.

Exam trap

Candidates often default to adding calculated columns or summarizing tables, but the most performant approach in Power BI is to use relationships and let the engine handle aggregation dynamically.

30
MCQeasy

A company has a Power BI semantic model with a table named 'Sales' that contains columns: OrderDate, ShipDate, Quantity, and Revenue. The company wants to create a measure that calculates the total revenue for orders shipped within 7 days of the order date. Which DAX expression should be used?

A.CALCULATE(SUM(Sales[Revenue]), DATEDIFF(Sales[OrderDate], Sales[ShipDate], DAY) <= 7)
B.SUMX(FILTER(Sales, Sales[ShipDate] - Sales[OrderDate] <= 7), Sales[Revenue])
C.CALCULATE(SUM(Sales[Revenue]), DATEDIFF(Sales[OrderDate], Sales[ShipDate], DAY) <= 7)
D.CALCULATE(SUM(Sales[Revenue]), Sales[ShipDate] - Sales[OrderDate] <= 7)
AnswerA, C

This expression is syntactically and functionally identical to the other correct option, and its presence as a duplicate answer choice is a common exam design to test your ability to recognize a valid pattern when it appears more than once. The DATEDIFF function with DAY computes the number of day boundaries between the two dates, returning an integer that does not depend on any time portion, so the filter condition in CALCULATE correctly identifies all sales where the ship-date-to-order-date span is exactly seven days or less. Since CALCULATE applies its filter arguments as a row-level condition over the current filter context, the SUM of Revenue is computed only for that subset, yielding the desired total. Recognizing that this version is correct, despite being repeated, reinforces the key rule: use DATEDIFF for date-difference comparisons, not arithmetic subtraction on datetime columns.

Why this answer

Options A and C contain the same valid DAX expression: CALCULATE(SUM(Sales[Revenue]), DATEDIFF(Sales[OrderDate], Sales[ShipDate], DAY) <= 7). This expression correctly uses CALCULATE to modify the filter context, applying DATEDIFF to compute the day difference between OrderDate and ShipDate, and filtering for orders shipped within 7 days. Both are correct because they are identical.

Option B uses SUMX with FILTER, but direct date subtraction (Sales[ShipDate] - Sales[OrderDate]) in DAX treats dates as serial numbers with time components, which can lead to inaccurate day counts and is not recommended. Option D also uses direct date subtraction in a filter argument, which is similarly incorrect. Therefore, A and C are correct.

Exam trap

The trap here is that candidates often assume direct date subtraction works the same in DAX as in Excel or SQL, but DAX treats date subtraction as a datetime operation, not a simple day count, leading to incorrect results or errors.

How to eliminate wrong answers

Option B is wrong because it uses a direct subtraction `Sales[ShipDate] - Sales[OrderDate]`, which in DAX does not return a number of days but rather a date/time value (the difference in days as a decimal), leading to incorrect or unexpected results. Option C is wrong because it is syntactically identical to Option A but is listed as a separate answer; the question expects the correct expression, and Option C is a duplicate of A, not a distinct wrong answer. Option D is wrong because it uses direct subtraction `Sales[ShipDate] - Sales[OrderDate] <= 7`, which in DAX does not evaluate as a day count comparison; it compares a date/time value to the number 7, which is invalid and will cause an error or incorrect filtering.

31
MCQeasy

A company has a Power BI dataset that contains a date table with columns: Date, Year, Month, Quarter, Day. The data model also includes a sales fact table with a SalesDate column. To enable time intelligence functions like TOTALYTD, what is the minimum requirement for the relationship between these tables?

A.Create a calculated column in the sales table to extract the date part and relate it to the date table.
B.Create a one-to-many relationship from the date table to the sales table and mark the date table as a date table.
C.Create a many-to-many relationship between the date table and the sales table.
D.Create a one-to-many relationship from the sales table to the date table with bidirectional cross-filtering.
AnswerB

This is the correct design: Power BI time intelligence functions (e.g., DATESYTD, DATEADD) rely on a date table that is explicitly marked with the Mark as Date Table option, and a one-to-many relationship from the date table to the sales table ensures each date filters its associated sales rows unambiguously. Marking the date table lets the engine identify the date column for time-based calculations, while the one-to-many cardinality matches the logical model where each calendar day can appear in many fact records. This star-schema pattern supports reliable, accurate time-series reporting.

Why this answer

Time intelligence functions like TOTALYTD require a properly configured date table marked as a date table, with a one-to-many relationship from the date table to the sales fact table. This ensures that the date table provides a continuous, unique set of dates that Power BI can use for time-based calculations, and marking it as a date table enables the engine to recognize it as the primary date dimension for time intelligence.

Exam trap

The trap here is that candidates often think any relationship between a date table and a fact table is sufficient, but they overlook the critical step of marking the date table as a date table, which is mandatory for time intelligence functions to work correctly.

How to eliminate wrong answers

Option A is wrong because creating a calculated column in the sales table to extract the date part is unnecessary and does not establish the required relationship; time intelligence functions rely on a dedicated date table with a marked date column, not on derived columns in the fact table. Option C is wrong because a many-to-many relationship between the date table and sales table would violate the requirement that the date table must have unique dates (one side) to support time intelligence, and it would introduce ambiguity in filter propagation. Option D is wrong because a one-to-many relationship from the sales table to the date table reverses the correct direction; the date table must be on the one side and the sales table on the many side, and bidirectional cross-filtering is not required for time intelligence functions.

32
MCQeasy

When creating a many-to-many relationship between two tables, what is a common approach to model this in Power BI?

A.Use the CROSSJOIN DAX function in calculated tables.
B.Merge both tables into a single table.
C.Introduce a bridge table that contains the unique combinations.
D.Create a direct many-to-many relationship in the model.
AnswerC

Introducing a bridge table (also called a junction or associative table) is the standard way to model a many-to-many relationship in Power BI: it stores one row for each unique pair of keys from the two original tables, and then you create two one-to-many relationships with the bridge table as the 'many' side on both. This configuration allows filter context to flow from either original table through the bridge to the other, resolving the many-to-many condition without ambiguity. For correctness, the bridge table must contain distinct composite keys and may include additional attribute columns such as weight or validity dates, and you must be careful with cross-filter direction to avoid fan-out and double-counting in measures.

Why this answer

The correct answer is C: introduce a bridge table that contains the unique combinations, because Power BI's recommended pattern for many-to-many relationships is to create a junction (bridge) table with one row per unique pairing of the two entity keys, then relate each original table to the bridge via one-to-many relationships. This keeps the model star-schema-like, avoids ambiguous filter paths, and lets DAX propagate filters correctly across both dimensions. Option A is wrong because CROSSJOIN in a calculated table just produces a Cartesian product of all rows and does not establish a proper relational model.

Option B is wrong because merging both tables into one denormalized table destroys the separate entities and causes duplication and aggregation errors. Option D is wrong because although Power BI can technically create a direct many-to-many relationship, it is not the common or recommended modeling approach and can produce ambiguous or incorrect results.

33
MCQeasy

You have the above calculated column in a Power BI model. Some rows show blank values for Profit Margin even though Profit and SalesAmount are not blank. What is the most likely cause?

A.The calculated column syntax is incorrect
B.The columns are not numeric
C.The DIVIDE function cannot handle large numbers
D.SalesAmount is zero for those rows
AnswerD

When DIVIDE is used without an optional third argument, it returns BLANK if the denominator is zero. For these rows, SalesAmount equals zero, making the denominator of the division zero, so the result is blank rather than a numeric value. This is the intended behavior of DIVIDE and is why the column appears blank only for those specific rows.

Why this answer

The correct answer is D: SalesAmount is zero for those rows. In DAX, a calculated column for Profit Margin typically uses DIVIDE(Profit, SalesAmount), and DIVIDE returns BLANK when the denominator is zero (or BLANK), which explains why Profit and SalesAmount appear non-blank yet Profit Margin shows blank. Options A and B do not fit because a syntax error would prevent the column from being created or would error, and non-numeric columns would cause type/aggregation errors rather than selective blanks.

Option C is incorrect because DIVIDE handles large numbers fine; its blank behavior is driven by a zero or blank denominator, not magnitude.

34
MCQmedium

You are modeling data from an Azure SQL Database into Power BI. The source table 'Sales' contains 10 million rows. You need to ensure that the data model supports fast query performance for a report that shows sales by month and product category. The report uses a slicer for year. What is the best practice for improving performance?

A.Disable the auto-date/time feature.
B.Increase the data load frequency to every 15 minutes.
C.Use DirectQuery mode to query the source database directly.
D.Create an aggregate table in Power BI that pre-aggregates sales by month and product category.
AnswerD

Creating an aggregate table in Power BI that pre-aggregates sales by month and product category is the correct approach because it reduces the fact table to a much coarser grain, shrinking the number of rows that report queries must scan. By configuring this aggregate table as an aggregation group in the model, Power BI can automatically route high-level visual queries to the small summary table while reserving the detailed fact table for drill-down operations. This leverages the storage engine's in-memory columnar compression and accelerates time-intelligence calculations such as year-over-year month comparisons, directly addressing the performance bottleneck caused by large transaction-level data.

Why this answer

Creating an aggregate table in Power BI that pre-aggregates sales by month and product category drastically reduces the number of rows the report must scan, from 10 million to a much smaller set of aggregated rows. This enables fast query performance for the slicer and visual-level filters, as Power BI can leverage the aggregate table via its aggregation feature, which automatically redirects queries to the pre-summarized data when possible.

Exam trap

The trap here is that candidates often confuse DirectQuery (option C) as a performance optimization for large data volumes, but in reality, DirectQuery offloads processing to the source and can be slower for aggregated reports, whereas pre-aggregating in Power BI (option D) is the correct approach for fast in-memory query performance.

How to eliminate wrong answers

Option A is wrong because disabling the auto-date/time feature reduces model size and improves load times, but it does not address the core performance bottleneck of scanning 10 million rows for every report interaction; it is a general best practice, not a solution for large-table aggregation. Option B is wrong because increasing data load frequency to every 15 minutes improves data freshness but has no impact on query performance against the existing 10 million rows; it may even degrade performance by causing more frequent refreshes. Option C is wrong because DirectQuery mode sends queries directly to the Azure SQL Database, which would still require scanning 10 million rows on each interaction, and it introduces network latency and dependency on source database performance, often resulting in slower report responsiveness compared to an in-memory aggregated model.

35
MCQmedium

You need to create a calculated column that categorizes products based on price: 'Low' (<$10), 'Medium' ($10-$50), 'High' (>$50). Which DAX expression should you use?

A.SWITCH(Product[Price], <10, "Low", <=50, "Medium", "High")
B.LOOKUPVALUE(Category, Product[Price], Product[Price])
C.SWITCH(TRUE(), Product[Price] < 10, "Low", Product[Price] <= 50, "Medium", "High")
D.IF(Product[Price] < 10, "Low", Product[Price] <= 50, "Medium", "High")
AnswerC

This is the canonical SWITCH(TRUE()) pattern for multi-condition categorization. The first argument TRUE() is a literal value, and each subsequent argument is a Boolean condition; DAX evaluates them left-to-right and returns the result associated with the first condition that evaluates to TRUE. The final trailing value 'High' acts as the default/else clause because it has no accompanying condition. This syntax is both valid and efficiently conveys readable business logic in a calculated column.

Why this answer

Option C is correct because SWITCH(TRUE(), ...) evaluates each condition in order and returns the first TRUE result, so Product[Price] < 10 yields "Low", Product[Price] <= 50 yields "Medium", and the fallback "High" covers prices above 50. This pattern is the standard DAX way to implement multi-branch conditional logic with range comparisons. Option A is wrong because SWITCH with a scalar expression compares for equality, not ranges, so <10 and <=50 are not valid match values.

Option B is wrong because LOOKUPVALUE retrieves a value from another table by matching columns and does not perform range-based categorization. Option D is wrong because DAX IF only takes three arguments (condition, true result, false result), so passing five arguments is invalid.

36
Multi-Selecteasy

You are creating a star schema in Power BI. Which TWO tables are typically dimension tables?

Select 2 answers
A.TransactionDetails
B.Product
C.Date
D.InventoryTransactions
E.Sales
AnswersB, C

Product is a classic dimension table. It contains descriptive attributes like product key, name, category, subcategory, color, and size, and is related to fact tables through a one-to-many relationship. Because it provides the contextual attributes used for slicing and grouping transactional data, Product belongs in the dimension layer, not the fact layer, and is correctly selected here.

Why this answer

In a star schema, dimension tables hold descriptive attributes used to slice and filter facts, so B (Product) is correct because it stores descriptive product attributes like name, category, and subcategory that relate to fact tables. C (Date) is also correct because a date/calendar table provides time attributes (year, quarter, month, day) for time intelligence and filtering, making it a classic dimension. By contrast, A (TransactionDetails), D (InventoryTransactions), and E (Sales) are transactional or event-level tables that store measures and foreign keys, so they are fact tables rather than dimensions.

37
Multi-Selecteasy

Which TWO of the following are true about calculated columns in Power BI?

Select 2 answers
A.Calculated columns cannot be used in relationships.
B.Calculated columns are evaluated at query time.
C.Calculated columns are computed using DAX formulas.
D.Calculated columns consume memory because they are stored as part of the model.
E.Calculated columns are stored on disk and loaded on demand.
AnswersC, D

Calculated columns are indeed created with DAX formulas, so this statement is true. You write an expression such as Amount * Rate in the formula bar, and DAX evaluates that formula once for each row in the table when the model is refreshed. The expression can reference columns from the same table, related columns in other tables, and basic DAX functions. Therefore, DAX is the required formula language for defining calculated columns in Power BI.

Why this answer

Option C is correct because calculated columns are created by writing Data Analysis Expressions (DAX) formulas in the Power BI model, and their values are computed row by row using that DAX expression. Option D is correct because calculated columns are materialized and persisted in the model (in-memory in the VertiPaq engine), so they consume memory and increase the model size. Option A is incorrect because calculated columns can absolutely be used as the key on one side of a relationship, provided their values are unique and valid.

Option B is incorrect because calculated columns are evaluated at data refresh/processing time, not at query time; it is measures that are evaluated at query time. Option E is incorrect because calculated columns are not stored on disk and loaded on demand — they are stored in memory as part of the model, unlike DirectQuery or some other storage behaviors.

Exam trap

The trap here is that candidates often confuse calculated columns with measures, mistakenly thinking calculated columns are evaluated at query time (Option B) or that they are not stored in memory (Option E), when in fact calculated columns are materialized during refresh and consume RAM.

38
MCQeasy

You have a Power BI data model with a table 'Orders' that has columns: 'OrderID', 'OrderDate', 'CustomerName', 'Region', 'Product', 'Quantity', 'UnitPrice'. You want to create a measure that calculates total sales amount. Which DAX expression should you use?

A.Total Sales = COUNTROWS(Orders)
B.Total Sales = AVERAGE(Orders[Quantity]) * AVERAGE(Orders[UnitPrice])
C.Total Sales = SUM(Orders[Quantity] * Orders[UnitPrice])
D.Total Sales = SUMX(Orders, Orders[Quantity] * Orders[UnitPrice])
AnswerD

SUMX(Orders, Orders[Quantity] * Orders[UnitPrice]) is the correct way to compute total sales because it iterates over each row of the Orders table, evaluates the expression Quantity * UnitPrice for that row, and then sums all the row-level results. This preserves the row context and correctly handles varying quantities and prices across different orders. It is the standard pattern for row-by-row multiplication followed by aggregation, avoiding the pitfalls of using SUM with an expression or multiplying aggregates.

Why this answer

SUMX is an iterator function that evaluates the expression `Orders[Quantity] * Orders[UnitPrice]` for each row in the Orders table and then sums the results. This is necessary because DAX does not support direct multiplication of two columns inside SUM; SUM expects a single column reference, not an expression. SUMX performs row-by-row evaluation, which correctly computes the total sales amount as the sum of (Quantity × UnitPrice) across all orders.

Exam trap

The trap here is that candidates mistakenly think SUM can handle a column expression like `Quantity * UnitPrice` directly, but DAX requires an iterator function like SUMX for row-level arithmetic, and they may also confuse the product of averages with the sum of products.

How to eliminate wrong answers

Option A is wrong because COUNTROWS(Orders) returns the number of rows in the Orders table, which is a row count, not a monetary total. Option B is wrong because AVERAGE(Quantity) * AVERAGE(UnitPrice) computes the product of the averages, which is not the same as the sum of products (it ignores the correlation between quantity and unit price per row, leading to an incorrect total). Option C is wrong because SUM(Orders[Quantity] * Orders[UnitPrice]) is syntactically invalid in DAX; SUM cannot accept an expression that multiplies two columns — it only accepts a single column reference.

39
Multi-Selectmedium

Which TWO of the following are true about using the 'Mark as Date Table' feature in Power BI?

Select 2 answers
A.It is required for any relationship involving a date column
B.The date column can contain duplicate dates
C.The date table must have a column with unique date values
D.It automatically creates all date hierarchy columns (Year, Quarter, Month, Day)
E.It enables time intelligence functions like TOTALYTD
AnswersC, E

Marking a table as a date table requires a column of data type Date containing unique, contiguous values with no blanks. This uniqueness constraint is what Power BI validates, allowing the engine to treat that column as the authoritative calendar for time-based relationships.

Why this answer

Option C is correct because 'Mark as Date Table' requires you to designate a column that contains unique, contiguous date values with no gaps or duplicates, which Power BI uses as the basis for time-based calculations. Option E is correct because marking a table as a date table lets Power BI apply built-in time intelligence functions such as TOTALYTD, SAMEPERIODLASTYEAR, and DATESYTD correctly against that table's date column. Option A is wrong because marking a date table is not required for every relationship involving a date column; it is only needed when you want proper time intelligence behavior.

Option B is wrong because the marked date column must contain unique values, so duplicates are not allowed. Option D is wrong because 'Mark as Date Table' does not generate Year, Quarter, Month, or Day columns; those must already exist in the table or be created separately.

Exam trap

PL-300 often tests the requirements for marking a date table, so candidates mistakenly believe it auto-creates hierarchies or is required for all date relationships.

40
MCQeasy

You have a table with columns 'Product', 'Category', and 'Sales'. You want to create a hierarchy that allows users to drill down from Category to Product. Which is the correct order to create the hierarchy?

A.Product -> Category -> Sales
B.Product -> Category
C.Category -> Product
D.Sales -> Product -> Category
AnswerC

This is the only arrangement that correctly reflects the relationship between the two attributes and matches Power BI's drill-down semantics. Category is the broader grouping, and Product is the more detailed level, so the hierarchy starts at Category and descends to Product. When a user clicks the drill-down arrow, Power BI moves from the top level (Category) to the next level (Product), revealing the underlying data at the product granularity. This structure also supports roll-up (drill-up) back from Product to Category, which is the standard behavior in matrixes and charts.

Why this answer

In Power BI, a hierarchy is built from the highest (most aggregated) level to the lowest (most granular) level. To allow drill-down from Category to Product, Category must be the top level and Product the child level. Option C correctly orders Category → Product, enabling users to expand from category-level totals to individual product sales.

Exam trap

The trap here is that candidates often confuse the drill-down direction, thinking the hierarchy should start with the most detailed level (Product) and end with the aggregated level (Category), but Power BI requires the top-down order from aggregate to detail.

How to eliminate wrong answers

Option A is wrong because it includes Sales as a hierarchy level, but Sales is a measure (numeric value) and cannot be part of a hierarchy used for drill-down; hierarchies are built from attribute columns only. Option B is wrong because it places Product above Category, which would force drill-down from Product to Category, the reverse of the required drill-down path. Option D is wrong because it starts with Sales (a measure) and then places Product above Category, violating both the measure-in-hierarchy rule and the required drill-down order.

41
MCQmedium

You have a data model with a Sales table and a Date table. You create a measure: Total Sales = SUM(Sales[Amount]). When you add a slicer for Date[Year], the measure does not filter correctly. What is the most likely cause?

A.The relationship is inactive
B.The Date table is not marked as a date table
C.The Sales table has no relationship to the Date table
D.The measure uses SUM instead of SUMX
AnswerA

A relationship marked as inactive does not automatically propagate filters during evaluation. Even though a physical relationship exists between Sales and Date, it is bypassed unless the measure explicitly invokes USERELATIONSHIP (e.g., CALCULATE(SUM(Sales[Amount]), USERELATIONSHIP(Sales[DateKey], Date[DateKey]))). Because that activation is missing, the slicer on Date does not filter the measure and every date shows the same grand-total value.

Why this answer

The most likely cause is that the relationship between the Sales table and the Date table is inactive. In Power BI, only one active relationship can exist between two tables; any additional relationships must be inactive. A slicer on Date[Year] will only filter through the active relationship.

If the active relationship is not the one intended for the measure, the slicer will not affect the measure's result. Using USERELATIONSHIP in the measure or setting the correct relationship as active would resolve this.

Exam trap

The trap here is that candidates often assume a slicer will automatically filter any measure referencing a related table, but they overlook that an inactive relationship requires explicit activation in the measure for filtering to work.

How to eliminate wrong answers

Option B is wrong because marking a table as a date table enables time intelligence functions and ensures continuous date ranges, but it does not affect whether a slicer filters a measure through a relationship. Option C is wrong because if there were no relationship between the Sales and Date tables, the slicer would have no effect at all, but the question states the measure does not filter correctly, implying some filtering occurs or a relationship exists. Option D is wrong because SUM and SUMX both aggregate values; the choice between them affects row context and calculation logic, not whether a slicer filters the measure through a relationship.

42
MCQeasy

You are creating a Power BI report for a small business. The data source is a Microsoft Access database with tables: Customers (CustomerID, CompanyName, City), Orders (OrderID, CustomerID, OrderDate, Amount). You need to model the data to analyze total orders by customer and by month. What is the most efficient approach?

A.Use DirectQuery on the Access database to avoid importing.
B.Create a single query in Power Query that joins the tables and import the result.
C.Migrate the Access database to SQL Server and then import.
D.Import both tables into Power BI and create a relationship between CustomerID columns.
AnswerD

Importing both tables into Power BI loads the data into the VertiPaq in-memory columnar store, which compresses values and delivers sub-second DAX aggregations even without external infrastructure. Creating a one-to-many relationship on CustomerID between the Customers dimension table and the Orders fact table enables standard star-schema filtering—measures like 'Total Revenue by Customer' work automatically via row context and filter propagation, with no need for explicit joins. This design keeps the model compact, avoids data duplication, and is the recommended pattern for small datasets in Power BI.

Why this answer

Option D is correct because importing both tables and creating a relationship between the CustomerID columns builds a proper star-schema-style model in Power BI, letting the Customers dimension filter the Orders fact table so totals by customer and by month can be computed efficiently with DAX. This approach leverages Power BI's in-memory VertiPaq engine and relationship-based filter propagation, which is the recommended modeling pattern for this kind of analysis. Option A does not fit because DirectQuery is not supported for Microsoft Access as a data source in Power BI, and even where DirectQuery applies it would not be more efficient here.

Option B is less flexible because pre-joining the tables in Power Query flattens the model and complicates month-level aggregation and reuse. Option C is unnecessary overhead for a small business scenario and adds migration effort without modeling benefit.

43
MCQeasy

You are creating a Power BI semantic model for a university. The model includes a Student table with columns StudentID, Name, and EnrollmentDate. You need to create a calculated column that categorizes students into 'New' if EnrollmentDate is within the last 30 days from today, otherwise 'Existing'. Which DAX formula should you use?

A.IF(Student[EnrollmentDate] >= TODAY() - 30, "Existing", "New")
B.IF(Student[EnrollmentDate] >= TODAY() - 30, "New", "Existing", "Unknown")
C.IF(Student[EnrollmentDate] >= DATEADD(TODAY(), -30, DAY), "New", "Existing")
D.IF(Student[EnrollmentDate] >= TODAY() - 30, "New", "Existing")
AnswerD

This formula uses the IF function to check if the EnrollmentDate is greater than or equal to the date 30 days ago from today. If true, it returns 'New'; otherwise, 'Existing'. The TODAY() function returns the current date, and subtracting 30 gives the date 30 days ago. This correctly categorizes students based on the last 30 days and is a valid calculated column expression.

Why this answer

The correct formula must compare the enrollment date to a date 30 days before today and return 'New' or 'Existing' accordingly. Using TODAY() minus 30 days provides the cutoff date. The IF function then evaluates each row and assigns the correct category, ensuring accurate classification based on the enrollment recency.

Exam trap

The trap here is confusing time intelligence functions like DATEADD, which require a date table or column, with scalar date arithmetic using TODAY(), leading to invalid syntax or incorrect logic.

44
MCQmedium

You are modeling data from multiple sales regions. Each region has a unique ID, but region names might be spelled inconsistently (e.g., 'North America' vs. 'N. America'). You need to create a single dimension table for regions. What is the best practice to handle this?

A.Keep both spellings in the dimension and use a many-to-many relationship
B.Use Power Query to clean and standardize region names before loading
C.Hide the region column and use only region ID in visuals
D.Use a bridge table to map both spellings to a single region ID
AnswerB

Use Power Query at the data preparation layer to apply transformations such as Trim, Proper, and Replace Values, or merge a supplementary mapping table into the dimension to consolidate spelling variants. By standardizing region names before the data is loaded, the dimension table contains a single canonical row per region, enabling correct one-to-many relationships and accurate aggregations in the star schema.

Why this answer

Option B is correct because Power Query is the proper ETL layer in Power BI for cleaning and standardizing inconsistent text values such as 'North America' vs. 'N. America' before the data reaches the model, ensuring a single conformed region name per region ID in the dimension table. This keeps the dimension table clean, avoids ambiguous relationships, and lets visuals aggregate correctly by region.

Option A is wrong because keeping duplicate spellings and a many-to-many relationship introduces ambiguity and incorrect totals rather than resolving the inconsistency. Option C is wrong because hiding the region column and using only region ID does not create a usable region name dimension and leaves the underlying inconsistency unresolved. Option D is wrong because a bridge table is used to resolve many-to-many relationships between dimensions and facts, not to fix spelling variants that should be standardized upstream.

45
MCQmedium

You have a Power BI data model with a Sales table and a Product table. You want to create a measure that calculates the percentage of total sales for each product category. Which DAX pattern should you use?

A.SUM(Sales[Amount]) / CALCULATE(SUM(Sales[Amount]), REMOVEFILTERS(Sales))
B.SUM(Sales[Amount]) / SUM(Sales[Amount])
C.DIVIDE(SUM(Sales[Amount]), CALCULATE(SUM(Sales[Amount]), ALLSELECTED()))
D.DIVIDE(SUM(Sales[Amount]), CALCULATE(SUM(Sales[Amount]), ALL(Product[Category])))
AnswerD

ALL(Product[Category]) inside CALCULATE removes only the active filter on the Product[Category] column, while all other filters in the current context (such as date, region, or store) are preserved. This gives a denominator that represents total sales across all product categories within the same filtering context, which is exactly the correct baseline for computing a category's percentage. DIVIDE also safely handles division by zero by returning BLANK instead of an error, making this the most accurate and robust option.

Why this answer

It uses DIVIDE for safe division and CALCULATE with ALL(Product[Category]) to remove the filter context on the Product[Category] column, allowing the measure to compute the percentage of total sales for each product category. This pattern ensures that the denominator represents the total sales across all categories, while the numerator respects the current filter context for the specific category.

Exam trap

The trap here is that candidates often confuse ALL() with ALLSELECTED() or REMOVEFILTERS(), not realizing that ALLSELECTED() preserves external slicer filters while ALL() removes all filters on the specified column, which is essential for calculating a true percentage of total within the current filter context.

How to eliminate wrong answers

Option A is wrong because REMOVEFILTERS(Sales) removes all filters from the entire Sales table, which may include unrelated filters and does not specifically target the Product[Category] column, leading to an incorrect denominator. Option B is wrong because SUM(Sales[Amount]) / SUM(Sales[Amount]) always equals 1 (or 100%) for each row, as both numerator and denominator are the same value, failing to calculate a percentage of total. Option C is wrong because ALLSELECTED() respects slicers and external filters but does not remove the filter on Product[Category] within the visual, so the denominator would still be filtered by the current category, resulting in 100% for each category.

46
MCQmedium

What is the most likely cause of the error in the DAX query shown in the exhibit?

A.The [Sales Amount] measure is returning multiple values or is not a valid scalar measure.
B.There is no relationship between Date and Product tables.
C.The SUMMARIZECOLUMNS function does not support multiple group-by columns.
D.The ORDER BY clause is not allowed in EVALUATE statements.
AnswerA

The error message indicates that the measure is not a valid scalar value. When a measure references a column without an aggregation function, such as Sales[SalesAmount] directly, or returns a table expression, SUMMARIZECOLUMNS fails because it expects a scalar for each column in its result set. Ensure the measure aggregates the underlying column using SUM, AVERAGE, or another scalar-returning function. Additionally, verify the measure is not using a calculated table or a row context that produces multiple results.

Why this answer

The error 'A single value for column 'Sales Amount' in table 'Sales' cannot be determined' occurs because the [Sales Amount] measure is being used in a context that expects a scalar value, but the measure is defined to return multiple values (e.g., using SUMX over a table that returns multiple rows without proper aggregation). In DAX, measures used in EVALUATE statements must return a single scalar value; if the measure is not properly aggregated or contains a many-to-many relationship, it can produce multiple values, causing this error.

Exam trap

The trap here is that candidates often misdiagnose the error as a missing relationship or syntax issue, when the root cause is a measure returning multiple values due to improper aggregation or context.

How to eliminate wrong answers

Option B is wrong because the error message specifically mentions a single value cannot be determined for a column, not a missing relationship; a missing relationship would cause a different error (e.g., 'No relationship found' or blank results). Option C is wrong because SUMMARIZECOLUMNS explicitly supports multiple group-by columns; it is designed to accept multiple columns in its group-by clause. Option D is wrong because ORDER BY is fully allowed in EVALUATE statements in DAX; it is a standard clause for sorting query results.

47
Multi-Selecteasy

Which TWO of the following are valid DAX functions for creating a calculated table?

Select 2 answers
A.SUM
B.COUNT
C.FILTER
D.CALENDAR
E.SELECTEDVALUE
AnswersC, D

FILTER is a table function that takes a table and a logical condition, and returns a subset of rows for which the condition evaluates to TRUE. It returns a table object, preserving the original columns and establishing row context for each row, so it can be used as a table expression or as a filter argument in CALCULATE. This makes FILTER a valid DAX function for creating table results.

Why this answer

FILTER (C) is correct because it is a DAX table function that returns a table filtered by a Boolean condition, making it valid for use in a calculated table definition such as CALCULATETABLE or a New Table expression. CALENDAR (D) is correct because it is a DAX table function that returns a single-column table of contiguous dates, which is a classic use case for building a date table via a calculated table. SUM (A) is a scalar aggregation function that returns a single numeric value, not a table, so it cannot define a calculated table.

COUNT (B) is likewise a scalar aggregation function returning a count value, not a table. SELECTEDVALUE (E) is a scalar function that returns a single value when a column is filtered to one distinct value, so it also cannot produce a calculated table.

48
MCQhard

You are modeling a fact table with granularity at the order line level. The table includes columns: OrderID, ProductID, Quantity, UnitPrice, Discount. You need to create a measure for total revenue considering discounts (Quantity * UnitPrice * (1 - Discount)). Some orders have no discount (null). What is the correct DAX for this measure?

A.SUM('Orders'[Quantity] * 'Orders'[UnitPrice])
B.SUMX('Orders', Orders[Quantity] * Orders[UnitPrice] * (1 - Orders[Discount]))
C.SUMX('Orders', DIVIDE(Orders[Quantity] * Orders[UnitPrice], 1 + Orders[Discount]))
D.SUMX('Orders', Orders[Quantity] * Orders[UnitPrice] * (1 - COALESCE(Orders[Discount], 0)))
AnswerD

This measure uses SUMX to evaluate the expression row by row, and COALESCE converts any BLANK discount into 0 so that missing values are handled gracefully. By using (1 - COALESCE(Orders[Discount], 0)), rows without a discount contribute their full quantity × unit price, while rows with a discount are reduced exactly as intended. This is the correct and robust way to account for nullable discount columns in a fact table.

Why this answer

Option D is correct because it uses SUMX to iterate the order-line rows and computes Quantity * UnitPrice * (1 - Discount) per row, while COALESCE(Orders[Discount], 0) replaces null discounts with 0 so lines without a discount are not excluded or turned into blanks. This matches the required revenue formula and handles the stated null-discount scenario. Option A is wrong because it multiplies column totals rather than row-level values and ignores Discount entirely.

Option B is wrong because a null Discount makes the whole row expression blank, dropping those order lines from the total. Option C is wrong because it divides by (1 + Discount) instead of multiplying by (1 - Discount), producing an incorrect revenue calculation.

49
MCQmedium

You are a data analyst for a healthcare provider. You have a Power BI semantic model with a fact table named Encounters and a dimension table named Patients. The Patients table contains a column PatientKey and a column MRN (medical record number). Some patients have multiple MRNs because they were registered at different clinics. You need to create a relationship between Encounters and Patients that ensures each encounter is attributed to exactly one patient record. What should you do?

A.Create a one-to-many relationship from Patients[PatientKey] to Encounters[PatientKey].
B.Create a many-to-many relationship between Patients[MRN] and Encounters[PatientKey].
C.Create a bidirectional many-to-many relationship between Patients[MRN] and Encounters[MRN].
D.Create a one-to-many relationship from Patients[MRN] to Encounters[PatientKey].
AnswerA

This is correct because PatientKey is the unique surrogate key in the Patients dimension and Encounters[PatientKey] is the foreign key. A one-to-many relationship from the dimension to the fact table enforces that each encounter relates to exactly one patient record, regardless of how many MRNs that patient has.

Why this answer

The Patients dimension has a unique PatientKey that is referenced by the Encounters fact table. Creating a one-to-many relationship from Patients[PatientKey] to Encounters[PatientKey] enforces referential integrity and ensures each encounter maps to exactly one patient row. Using MRN would be incorrect because it is not unique and is not present in the fact table.

Exam trap

The trap here is assuming that the natural business identifier (MRN) should be used for the relationship instead of the surrogate key that actually links the tables.

50
MCQhard

You are designing a data model for a financial analysis report. The source data includes a 'Budget' table with columns: Department, Account, Month, and BudgetAmount. The 'Actuals' table has the same structure. You need to create a combined measure that shows the variance (Actual - Budget) for each Department and Account. What is the best approach?

A.Create separate dimension tables for Department and Account, and create fact tables for Budget and Actuals with relationships
B.Create a single table by merging Budget and Actuals on Department, Account, and Month
C.Create a calculated table using SUMMARIZE and then use DAX measures
D.Use Power Query to append Budget and Actuals with a 'Type' column
AnswerA

This star schema design is optimal because Department and Account become conformed dimensions that can filter both fact tables without duplicating attributes. Budget and Actuals remain separate fact tables, enabling measures like SUM(Actuals[Amount]) and SUM(Budget[Amount]) to be compared directly using DAX, with relationships enforcing correct row context. This setup preserves referential integrity, supports drill-through, and lets the engine optimize query performance by navigating relationships rather than scanning stacked data.

Why this answer

Option A is correct because a star schema with shared Department and Account dimensions and separate Budget and Actuals fact tables lets each fact table relate to the same dimensions, so a DAX measure such as [Actual] - [Budget] can compute variance correctly at every Department/Account granularity and slice consistently. Keeping Budget and Actuals as distinct fact tables also preserves their different business meanings and avoids double-counting or ambiguous filter propagation. Option B is wrong because merging the two tables into one row-level table destroys the separate fact semantics and can misalign or duplicate rows when granularity differs.

Option C is wrong because a calculated SUMMARIZE table materializes data and is not the recommended way to model two fact sources for flexible variance analysis. Option D is wrong because appending Budget and Actuals with a Type column creates a single fact table whose measures must filter by Type, which is less clean and can produce incorrect aggregation across the combined rows.

51
MCQhard

You are reviewing the relationships in a Power BI data model as shown in the exhibit. The model has tables: Sales, Product, Customer, and Category. You need to evaluate the performance impact of the current configuration. Which relationship is most likely to cause performance issues?

A.All relationships are equally efficient
B.The relationship between Sales and Customer
C.The relationship between Product and Category
D.The relationship between Sales and Product
AnswerC

This is the correct answer because this relationship is the one configured with bidirectional filtering, a configuration known to degrade query performance. With bidirectional cross-filtering, a filter on Category flows to Product and then to Sales, but also filters on Product or Sales can propagate back to Category, causing extra dependency chains and potential ambiguity in filter context. This forces the query engine to evaluate additional row combinations and can make the model significantly less responsive. In contrast to unidirectional relationships, this bidirectional flow creates unnecessary complexity, so the Product–Category relationship is the least efficient.

Why this answer

The relationship between Product and Category is most likely to cause performance issues because it is a many-to-many relationship without a bridge table. In Power BI, many-to-many relationships require the engine to materialize cross-join-like intermediate tables in memory, increasing query complexity and reducing performance. This is especially problematic when filtering or aggregating across these tables, as the VertiPaq engine must resolve ambiguity by creating additional internal tables.

Exam trap

The trap here is that candidates often assume all relationships are equally performant if they are correctly defined, overlooking that many-to-many cardinality inherently requires more complex processing than one-to-many relationships.

How to eliminate wrong answers

Option A is wrong because not all relationships are equally efficient; many-to-many relationships are significantly more resource-intensive than one-to-many relationships. Option B is wrong because the relationship between Sales and Customer is typically a standard one-to-many relationship (many sales per customer), which is the most efficient cardinality for star schema design and does not cause inherent performance issues. Option D is wrong because the relationship between Sales and Product is also a standard one-to-many relationship (many sales per product), which is optimized by the VertiPaq engine and does not introduce the cross-join overhead seen in many-to-many relationships.

52
MCQhard

You are modeling data in Power BI that includes a table named SurveyResponses with columns: ResponseID, QuestionID, RespondentID, and AnswerText. Each respondent answers multiple questions. You need to create a measure that counts the number of unique respondents who answered a specific question. Which DAX measure should you use?

A.DISTINCTCOUNT(SurveyResponses[RespondentID])
B.COUNT(SurveyResponses[RespondentID])
C.COUNTROWS(SurveyResponses)
D.COUNTA(SurveyResponses[RespondentID])
AnswerA

DISTINCTCOUNT(SurveyResponses[RespondentID]) is correct because it evaluates the unique values in the RespondentID column, ignoring blanks and returning the number of distinct respondents. In a table where each row is a survey response, a single respondent may appear multiple times; distinct counting on the respondent identifier isolates each unique individual, which is exactly the measure needed. This function is designed for counting unique non-blank values and is the standard way to count distinct entities in DAX.

Why this answer

DISTINCTCOUNT(SurveyResponses[RespondentID]) counts the number of unique RespondentID values in the table, which directly gives the count of unique respondents who answered a specific question when used in a filter context (e.g., with a slicer or visual grouping by QuestionID). This is the standard DAX pattern for counting distinct entities in a column.

Exam trap

The trap here is that candidates often confuse COUNTROWS (which counts all rows) with DISTINCTCOUNT (which counts unique values), or they assume COUNT or COUNTA will automatically deduplicate, leading them to pick a wrong option that counts total responses instead of unique respondents.

How to eliminate wrong answers

Option B is wrong because COUNT(SurveyResponses[RespondentID]) counts only non-blank numeric values in the column; RespondentID is likely text or an ID, and COUNT ignores non-numeric values, returning 0 or an error. Option C is wrong because COUNTROWS(SurveyResponses) counts all rows in the table, including multiple responses per respondent, so it does not yield a unique respondent count. Option D is wrong because COUNTA(SurveyResponses[RespondentID]) counts all non-blank values in the column, including duplicates, so it counts each response row rather than unique respondents.

53
MCQeasy

You are modeling data from a source that includes a column 'FullName' (e.g., 'John Doe'). You want to create separate 'FirstName' and 'LastName' columns for analysis. What is the most efficient way?

A.Create calculated columns using DAX functions LEFT, RIGHT, and FIND.
B.Use the 'Replace Values' feature to manually separate names.
C.Use Excel formulas in a source query.
D.In Power Query, split the column by delimiter (space) into two columns.
AnswerD

Splitting a column by the space delimiter in Power Query is a native M transformation that invokes the Splitter.SplitTextByDelimiter function behind the scenes, generating two separate columns for first and last names in a single step. This declarative approach is optimized for large volumes of rows, requires no manual mapping, and automatically applies to every row, making it the most efficient and maintainable solution among the choices.

Why this answer

Splitting a column by delimiter in Power Query is the most efficient, native method for transforming data at the query level. It leverages Power Query's M language to perform the split in a single step, which is optimized for performance and can be refreshed automatically. This approach avoids the overhead of DAX calculated columns, which are computed in the storage engine and can slow down report rendering.

Exam trap

The trap here is that candidates often choose DAX calculated columns (Option A) because they are familiar with Excel-like formulas, but they overlook that Power Query is the correct tool for data transformation in Power BI, and DAX should be reserved for measures and calculated columns that depend on the data model's context.

How to eliminate wrong answers

Option A is wrong because creating calculated columns with DAX functions like LEFT, RIGHT, and FIND is inefficient; DAX calculated columns are evaluated row-by-row in the VertiPaq engine, consuming memory and CPU, and they cannot be used to directly split a string by a delimiter without complex nested functions. Option B is wrong because 'Replace Values' is designed for substituting specific text, not for splitting a column into multiple columns; it would require multiple manual steps and cannot dynamically handle variable-length names. Option C is wrong because using Excel formulas in a source query ties the transformation to an external application, breaking the self-service, refreshable nature of Power BI; it also introduces dependency on Excel's calculation engine, which is not part of the Power Query or DAX ecosystem.

54
MCQeasy

You are modeling a fact table that contains sales transactions with columns: OrderDate, ShipDate, SalesAmount, CustomerKey. You need to create a relationship to a date table. The date table has a single Date column. Which relationship should you create for the most accurate time-based analysis?

A.Create a single relationship from OrderDate to Date and ignore ShipDate.
B.Create two active relationships: OrderDate to Date and ShipDate to Date.
C.Create an active relationship from OrderDate to Date and an inactive relationship from ShipDate to Date.
D.Create only one relationship from ShipDate to Date.
AnswerC

This design correctly distinguishes the default business date (OrderDate) from an alternative date role (ShipDate). Because a table can have multiple relationships but only one active, the ShipDate relationship is configured as inactive, meaning it won't affect normal filters. When shipping analysis is needed, a DAX measure can use CALCULATE with USERELATIONSHIP(ShipDate[Date], Date[Date]) to activate that relationship for the duration of the calculation, preserving both analytical paths without ambiguity.

Why this answer

Option C is correct because a date dimension can have only one active relationship to a given fact table in Power BI / Tabular models, so OrderDate to Date is made active for default time intelligence, while ShipDate to Date is added as an inactive relationship that can be activated in specific measures using USERELATIONSHIP. This supports accurate analysis of both order-based and shipment-based metrics without ambiguity. Option A is wrong because it discards ShipDate analysis entirely, and Option B is wrong because two active relationships between the same two tables create an ambiguous filter path that is not allowed.

Option D is wrong because making ShipDate the only relationship prevents standard order-date time intelligence and ignores OrderDate.

55
MCQeasy

A data model contains a Date table and a Sales table. You need to create a measure that calculates total sales for the previous year. Which DAX function should you use?

A.SAMEPERIODLASTYEAR
B.DATEADD
C.PARALLELPERIOD
D.PREVIOUSYEAR
AnswerA

SAMEPERIODLASTYEAR is the correct time intelligence function for year-over-year comparisons. It takes the current filter selection — whether it is a single date, a month, a quarter, or a custom range — and returns the exact corresponding date range from the previous calendar year, preserving the number of days and the shape of the selection. This precision makes it the standard DAX approach for computing previous-year totals, especially when you need the prior year to match the current period on a day-for-day or period-for-period basis.

Why this answer

SAMEPERIODLASTYEAR is the correct DAX function for calculating total sales for the previous year because it returns a set of dates shifted back by exactly one year while preserving the current filter context (e.g., month, quarter). This function is specifically designed for year-over-year comparisons and works seamlessly with a Date table marked as a date table in the model. Option B: DATEADD can also shift dates by one year but requires specifying the interval and number of intervals, making it less direct for this specific requirement.

Option C: PARALLELPERIOD returns the entire parallel period (e.g., full year) regardless of current granularity, which does not preserve the same relative period. Option D: PREVIOUSYEAR returns the entire previous year, not the same period shifted back, so it does not maintain month-over-month or quarter-over-quarter comparisons.

Exam trap

The trap here is that candidates often confuse SAMEPERIODLASTYEAR with PREVIOUSYEAR, not realizing that PREVIOUSYEAR returns the entire previous year regardless of the current filter granularity, while SAMEPERIODLASTYEAR shifts the exact same period (e.g., month, quarter) back by one year.

How to eliminate wrong answers

Option B (DATEADD) is wrong because it shifts dates by a specified interval (e.g., -1 year) but requires an explicit interval parameter and can produce unexpected results if the Date table is not continuous or if the interval does not align with the current filter context. Option C (PARALLELPERIOD) is wrong because it returns a parallel period of a fixed length (e.g., full year) but does not respect the current granularity of the filter context (e.g., it returns the entire previous year even if the current filter is a single month). Option D (PREVIOUSYEAR) is wrong because it returns all dates in the previous year based on the current filter context, but it does not shift the entire period; it simply returns the set of dates for the previous year, which can cause incorrect totals when used with non-standard calendars or partial year filters.

56
MCQmedium

A data analyst is designing a star schema in Power BI. The model includes a table named 'Orders' with columns: OrderID, CustomerID, OrderDate, ProductID, Quantity, and SalesAmount. Which column should NOT be included in the fact table to maintain a proper star schema?

A.Quantity
B.SalesAmount
C.CustomerID
D.OrderID
AnswerD

OrderID is a natural business key that identifies an order, not a numeric measure or a surrogate foreign key. In a star schema, natural keys and descriptive attributes should live in the appropriate dimension table, such as an Order dimension, so that the fact table contains only relationship keys and measures. Including OrderID directly in the fact table violates star schema normalization and reduces maintainability. Thus, OrderID is the item that should NOT be placed directly in the fact table.

Why this answer

In a proper star schema, fact tables should contain quantitative measures and foreign keys to dimension tables. Columns like CustomerID and ProductID serve as foreign keys linking to dimension tables, so they should remain in the fact table. OrderID is a natural key that typically belongs in an Order dimension table; the fact table should use a surrogate OrderKey instead.

Including OrderID directly would duplicate dimensional data and reduce modeling flexibility.

Exam trap

Candidates often assume that all ID columns belong in the fact table. However, natural keys (like OrderID) should reside in dimension tables; the fact table should contain a surrogate key to reference them. CustomerID, on the other hand, is a foreign key that is correctly placed in the fact table.

How to eliminate wrong answers

Option A is wrong because Quantity is a numeric, additive measure that is a classic fact column in a sales fact table, representing the number of units sold per transaction. Option B is wrong because SalesAmount is a monetary measure that is the core metric for analysis and belongs in the fact table. Option D is wrong because OrderID is the unique identifier for each transaction row and serves as the fact table's grain key, which is required for proper row-level identification and relationship creation.

57
MCQmedium

You are building a star schema in Power BI. Which table design best supports filtering a sales fact table by product category?

A.Use a single table containing all sales and product attributes.
B.Merge Sales and Product tables into one by appending rows.
C.Create a separate Product dimension table with category, related to Sales by ProductID.
D.Store product category in the Sales fact table.
AnswerC

Creating a separate Product dimension table with attributes like category and linking it to the Sales fact table through a ProductID relationship is the canonical star schema design. This separates descriptive attributes from numerical measures, enabling efficient slicing, filtering, and drill-through while eliminating redundancy. The one-to-many relationship also allows DAX to propagate filter context automatically from the dimension to the fact table, which is fundamental for correct aggregation and better query performance.

Why this answer

Option C is correct because a star schema requires a dedicated Product dimension table containing descriptive attributes such as category, joined to the Sales fact table via the ProductID key in a one-to-many relationship; this lets slicers and filters on category propagate to the fact table efficiently. Option A is wrong because a single flat table is a denormalized design, not a star schema, and it increases redundancy and reduces filter performance. Option B is wrong because appending rows merges tables vertically (union), which does not create the dimension-to-fact relationship needed for filtering.

Option D is wrong because storing category directly in the fact table duplicates descriptive data and prevents clean dimension-based filtering.

58
MCQeasy

You are designing a data model that will support self-service analytics. You have a Sales table with over 100 million rows. Which of the following modeling approaches would provide the best query performance while maintaining a user-friendly experience?

A.Design a star schema with a fact table and dimension tables
B.Create a single flat table with all columns
C.Import all tables into a single table using Power Query merge
D.Use a snowflake schema with multiple levels of dimensions
AnswerA

A star schema separates the central fact table (numeric, measurable data like sales amounts and quantities) from surrounding dimension tables (descriptive attributes like products, customers, and dates). This structure lets Power BI compress columns efficiently and minimizes the number of join paths, so DAX measures filter and aggregate quickly. Because each dimension is directly linked to the fact table, the model becomes intuitive for self-service users and provides clear filter context for slicers and visuals.

Why this answer

A star schema with a fact table and dimension tables is correct because it minimizes the number of joins needed for queries, allowing the engine to scan a narrow fact table and use smaller dimension tables for filtering and grouping, which delivers the best query performance at scale (100M+ rows) while keeping the model intuitive for self-service users. The denormalized dimensions also make it easy for business users to drag and drop fields without navigating complex relationships. A single flat table (B) or a Power Query merge into one table (C) creates a very wide table with redundant data, increasing storage and scan time and hurting performance.

A snowflake schema (D) normalizes dimensions into multiple related tables, adding extra joins that slow queries and complicate the user experience.

59
MCQmedium

You are modeling data for a retail company. The source data contains a table 'Transactions' with columns: TransactionID, StoreID, ProductID, Quantity, and SalesAmount. You need to create a star schema in Power BI. What should you do with the TransactionID column?

A.Create a separate dimension table for transactions
B.Keep TransactionID in the fact table
C.Move TransactionID to the Product dimension
D.Remove the TransactionID column to reduce model size
AnswerB

Keeping TransactionID in the fact table is correct because it acts as the natural key for each transaction fact row, preserving row-level identity without creating a separate dimension. As a degenerate dimension, it supports direct row references and enables critical operations like incremental refresh, audit trails, and error reconciliation. It also lets you uniquely identify rows when the fact table has no other unique key, even if you need to combine it with a line number at a lower grain. This approach follows Microsoft's star schema guidance and avoids unnecessary joins or duplicated data.

Why this answer

The correct option is B: keep TransactionID in the fact table. In a star schema, the fact table stores the grain-level transactional rows along with their identifiers and numeric measures, so TransactionID belongs there as the unique key for each sales transaction, alongside StoreID, ProductID, Quantity, and SalesAmount. Creating a separate transaction dimension (A) would add no analytical value and would effectively duplicate the fact grain, while moving TransactionID to the Product dimension (C) is wrong because it is not a product attribute and would break the fact-to-dimension relationship.

Removing it (D) is also incorrect because the transaction identifier is needed for traceability, drill-through, and row-level identification, even though it is not used for aggregation.

60
Multi-Selectmedium

Which TWO of the following are best practices for designing a star schema in Power BI?

Select 2 answers
A.Dimension tables should have a primary key and descriptive columns.
B.Fact tables should contain calculated columns for business logic.
C.Fact tables should have foreign keys that relate to dimension tables.
D.Merge all tables into a single flat table for simplicity.
E.Use many-to-many relationships between fact and dimension tables.
AnswersA, C

A well-formed star schema requires each dimension table to have a primary key (surrogate or natural) that uniquely identifies every row, paired with descriptive text columns such as product category or region name. These descriptive attributes provide the context for slicing and dicing in Power BI, while the primary key ensures referential integrity from the fact table and enables efficient row reduction during query execution. Without a unique key, filter propagation from the dimension to the fact becomes ambiguous and can produce duplicate or misleading results.

Why this answer

Option A is correct because in a star schema, dimension tables serve as the lookup/reference tables, so they must have a primary key that uniquely identifies each row (e.g., ProductKey, DateKey) plus descriptive attributes such as product name, category, or color used for slicing and grouping in Power BI visuals. Option C is correct because fact tables store the measurable events (sales, quantities, amounts) and must contain foreign keys that relate back to the primary keys of the dimension tables, forming the one-to-many relationships that Power BI's VertiPaq engine and DAX rely on for efficient filtering and aggregation. Option B is not a best practice because calculated columns in fact tables consume memory and storage, and business logic is better handled via measures or in the source/ETL layer to keep the fact table lean.

Option D is wrong because flattening all tables into a single wide table defeats the star schema's purpose, causing redundancy, larger model size, and degraded performance. Option E is incorrect because many-to-many relationships between fact and dimension tables are an anti-pattern in star schema design; relationships should be one-to-many from dimension to fact to ensure correct filter propagation and predictable results.

Exam trap

The trap here is that candidates often confuse calculated columns with measures, thinking that placing business logic in fact tables is acceptable, but Power BI best practices dictate that measures (calculated at query time) should be used instead to avoid inflating the model size and degrading performance.

61
MCQeasy

You have a Power BI dataset that includes a table 'Orders' with columns: OrderDate, ShipDate, CustomerID, and SalesAmount. You need to create a calculated column that shows the number of days between OrderDate and ShipDate. Which DAX expression should you use?

A.YEAR(Orders[OrderDate])
B.DATEDIFF(Orders[OrderDate], Orders[ShipDate], DAY)
C.ENDOFMONTH(Orders[OrderDate])
D.DATEADD(Orders[OrderDate], 1, DAY)
AnswerB

DATEDIFF computes the number of interval boundaries crossed between two dates, with the third argument specifying the unit (here DAY). It returns a whole number representing the difference between OrderDate and ShipDate in days, which is exactly the shipping duration. This function is appropriate because it directly compares the two relevant columns and is a standard date difference function.

Why this answer

The correct option is B, DATEDIFF(Orders[OrderDate], Orders[ShipDate], DAY), because the DATEDIFF function in DAX returns the count of interval boundaries crossed between two dates, and specifying DAY gives exactly the number of days between OrderDate and ShipDate for each row. This matches the requirement of a calculated column computing the shipping duration per order. Option A, YEAR(Orders[OrderDate]), only extracts the year from OrderDate and does not compare the two dates.

Option C, ENDOFMONTH(Orders[OrderDate]), returns the last date of the month for OrderDate, which is unrelated to the interval between OrderDate and ShipDate. Option D, DATEADD(Orders[OrderDate], 1, DAY), shifts OrderDate forward by one day rather than calculating the difference between the two columns.

62
MCQmedium

You are building a star schema in Power BI. The fact table contains sales transactions. Which of the following should be stored in a dimension table?

A.Product category
B.Sales amount
C.Customer ID
D.Transaction date
AnswerA

Product category is descriptive, non-additive text used for slicing sales measures, so it belongs in a dimension. Fact tables hold numeric, aggregatable transaction data such as quantity and revenue, making category the correct dimensional attribute.

Why this answer

In a star schema, dimension tables store descriptive attributes used for filtering, grouping, and labeling fact data. Product category is a descriptive attribute of the product dimension, so it belongs in a dimension table. Fact tables store numeric, additive measures and foreign keys that reference dimensions.

Exam trap

PL-300 often tests whether candidates can distinguish descriptive dimension attributes from numeric measures and foreign keys, so the trap is picking a key or measure thinking it is a dimension attribute.

How to eliminate wrong answers

Option B is wrong because sales amount is a numeric measure (a fact) that belongs in the fact table, not a dimension — measures are aggregated in fact tables. Option C is wrong because customer ID is a foreign key that links the fact table to the customer dimension; the ID itself is a key, not a descriptive dimension attribute, and it resides in the fact table as a reference. Option D is wrong because transaction date is typically stored as a foreign key to a date dimension in the fact table, not as a dimension attribute itself; the date dimension holds the descriptive calendar attributes.

63
MCQeasy

You are designing a Power BI data model for a retail company. The model must include a table with product prices that change over time. Which table design should you use to support historical price analysis?

A.Create a separate table for price changes without any relationship
B.Add a price column to the product dimension and update it when price changes
C.Create a separate dimension table for price with effective date ranges and relate it to the fact table
D.Store the current price in the fact table and overwrite when price changes
AnswerC

This correctly models price as a Type 2 slowly changing dimension: a separate PriceDim table contains price, product key, and valid_from/valid_to dates, and is related to the fact table on product and date (or you use a DAX lookup to the correct row). When filtering by date or product, the model returns the exact price in effect for each transaction, preserving historical accuracy and enabling period-over-period price analysis. This design avoids data loss, supports semi-additive measures like quantity at price, and is the standard star-schema approach for time-varying product attributes.

Why this answer

Option C is correct because a slowly changing dimension (Type 2) with effective date ranges preserves each historical price version and lets the fact table relate to the price that was valid at the time of each transaction, enabling accurate historical price analysis. Option B fails because updating a single price column in the product dimension overwrites history, so past transactions would reflect the current price rather than the price at sale time. Option A is wrong because an unrelated price-change table cannot be joined to the fact table, so no historical price context can be applied.

Option D is also wrong because storing and overwriting the current price in the fact table destroys prior values and prevents any trend or historical comparison.

64
Multi-Selectmedium

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

Select 2 answers
A.To create a summary table that is not present in the source.
B.To reduce model size by storing only aggregated data.
C.To create a date table with a continuous range of dates.
D.To create a column that depends on other columns in the same row.
AnswersA, C

Calculated tables let you use DAX table functions such as SUMMARIZE, GROUPBY, or UNION to build a genuinely new analytical table from existing model data. The result is stored as a physical table in the Data pane, so it can participate in relationships, support measures, and be referenced in reports even when the source system does not contain that exact aggregation. Because it is fully materialized at refresh time, it persists as a reusable, pre-aggregated view.

Why this answer

Option A is correct because a calculated table is created with DAX table expressions (for example, SUMMARIZE, SUMMARIZECOLUMNS, or DISTINCT) and can materialize a new summary table that does not exist in the source system, which is exactly what calculated tables are designed for. Option C is correct because a calculated table can be generated with CALENDAR or CALENDARAUTO to produce a continuous, unbroken date range, which is the standard way to build a dedicated date table for time intelligence functions like TOTALYTD or SAMEPERIODLASTYEAR. Option B is not correct because calculated tables are computed at refresh and stored in the model, so they do not inherently reduce model size by storing only aggregated data; aggregation reduction is achieved through Import mode aggregations, DirectQuery, or composite models, not by the mere choice of a calculated table.

Option D is not correct because a column that depends on other columns in the same row is precisely the definition of a calculated column, which is evaluated row by row in the table, whereas a calculated table produces a whole table and cannot serve that row-level purpose.

65
Multi-Selecthard

Which THREE of the following are valid reasons to use a calculated column instead of a measure in Power BI?

Select 3 answers
A.The value is needed in a row-level security rule
B.The value is an aggregation (e.g., SUM) that changes with user interaction
C.The value must be used in a relationship between tables
D.The value is needed as a slicer or filter in a visual
E.The value is a time intelligence calculation that depends on the current filter context
AnswersA, C, D

RLS rules in Power BI evaluate DAX expressions that return a Boolean. These expressions are evaluated per row in the table, and they can reference columns from the table (or related tables). A calculated column materializes a value for each row, so it can be directly referenced in an RLS rule like `[Region] = "West"`. This is a valid use because RLS predicates are row-context-based and cannot use measures that depend on user filter context. So a calculated column is appropriate.

Why this answer

Option A is correct because row-level security rules in Power BI (DAX filter expressions on tables) are evaluated at the row level and can reference calculated columns, whereas measures cannot be used directly in RLS filter predicates. Option C is correct because relationships between tables require a column on the "one" or "many" side, and calculated columns are stored in the model and can serve as relationship keys, while measures cannot participate in relationships. Option D is correct because slicers and filter fields require column values to populate their item lists, and a calculated column materializes those values at row level so it can be placed on the slicer or filter well, unlike a measure.

Option B is not correct because aggregations that respond to user interaction are precisely the role of measures, which are evaluated dynamically per filter context. Option E is not correct because time intelligence calculations depending on the current filter context are dynamic and should be implemented as measures, not calculated columns, which are computed at refresh time and cannot adapt to slicer or filter changes.

66
MCQhard

You are a data analyst at a multinational retail company. The company uses Microsoft Power BI to analyze sales data from multiple regions. The source data is stored in Azure SQL Database and includes tables: Sales (OrderID, ProductID, Quantity, Amount, OrderDate, StoreID), Stores (StoreID, StoreName, Region, Country), Products (ProductID, ProductName, Category, Price). The model is imported daily. You need to design a semantic model that supports the following requirements: 1) Allow users to filter by year and month using a single slicer. 2) Ensure that time intelligence functions (e.g., TOTALYTD, SAMEPERIODLASTYEAR) work correctly. 3) Minimize model size. 4) Provide a consistent date dimension for all fact tables. The Sales table has orders from 2018-01-01 to 2025-12-31. You decide to create a date table. Which of the following approaches should you take?

A.Create a date table using DAX with CALENDAR and mark it as a date table.
B.Use the Sales[OrderDate] column directly and create a calculated column for year and month.
C.Use Power BI's auto-generated date hierarchy for each date column.
D.Import a date table from the source database that includes all dates and additional attributes.
AnswerA

Creating a DAX date table with CALENDAR or CALENDARAUTO generates a contiguous, minimally sized date column that covers the model's date range. Marking it as a date table enables time intelligence functions (e.g., TOTALYTD, SAMEPERIODLASTYEAR) to work reliably against any related date column. This approach keeps the model lean because it contains only the date column and any explicitly added attributes, and it avoids the hidden auto-date tables that Power BI otherwise creates.

Why this answer

Option A is correct because creating a dedicated date table with DAX CALENDAR (e.g., CALENDAR(DATE(2018,1,1), DATE(2025,12,31))) and marking it as a date table gives a single, contiguous date dimension that supports one slicer for year/month, enables time intelligence functions like TOTALYTD and SAMEPERIODLASTYEAR, and can be kept narrow to minimize model size. Marking it as a date table ensures Power BI treats it as the official date table for the model, providing consistent filtering across fact tables. Option B is wrong because using Sales[OrderDate] directly does not create a shared date dimension and calculated year/month columns add size without proper date-table semantics.

Option C is wrong because auto-generated date hierarchies create hidden tables per date column, increasing model size and not providing one consistent date dimension. Option D is not the best fit because importing a full date table with additional attributes can add unnecessary columns and size, whereas the requirement emphasizes minimizing model size and a purpose-built DAX date table is sufficient.

67
MCQmedium

You are designing a data model in Power BI that includes a fact table called 'Sales' and dimension tables 'Customer', 'Product', and 'Date'. The 'Sales' table contains columns: 'SalesID', 'CustomerID', 'ProductID', 'DateKey', 'Quantity', and 'Amount'. You need to ensure that the model follows star schema best practices and that filters from the 'Customer' table propagate correctly to the 'Sales' table. What should you do?

A.Merge the Customer and Sales tables into a single flat table.
B.Set the cross-filter direction to Both on the relationship between Customer and Sales.
C.Create a many-to-many relationship between Customer and Sales using SalesID.
D.Create a one-to-many relationship from Customer (one side) to Sales (many side) based on CustomerID.
AnswerD

Creating a one-to-many relationship from Customer (one side) to Sales (many side) based on CustomerID is the correct star schema pattern. CustomerID is the unique primary key in the Customer dimension table, and it appears as a foreign key in the Sales fact table, allowing each customer to link to multiple sales transactions. This direction supports intuitive filter propagation from the dimension to the fact table, enabling reliable aggregations like total sales per customer while preserving the granularity of the fact table and maintaining a clean, normalized model.

Why this answer

In a star schema, the dimension table (Customer) should have a one-to-many relationship to the fact table (Sales) based on the common key (CustomerID). This ensures that filters applied to the Customer table propagate correctly to the Sales table, maintaining referential integrity and enabling efficient query performance.

Exam trap

The trap here is that candidates often think bidirectional cross-filtering (Option B) is needed for filter propagation, but in a star schema, unidirectional filtering from dimension to fact is the correct and efficient approach.

How to eliminate wrong answers

Option A is wrong because merging Customer and Sales into a single flat table violates star schema normalization, leading to data redundancy and poor performance. Option B is wrong because setting cross-filter direction to Both on the relationship between Customer and Sales is unnecessary and can cause ambiguous filter propagation and performance issues; a single-direction filter from dimension to fact is sufficient. Option C is wrong because creating a many-to-many relationship using SalesID is incorrect; SalesID is a unique identifier for each sale and should not be used as a bridge for many-to-many relationships, which would break the star schema and cause incorrect aggregations.

68
MCQhard

You are analyzing a DAX query as shown in the exhibit. You need to determine the result set. The model contains tables: Date, Product, and Sales with relationships. Which statement accurately describes the output?

A.The query returns total sales per year and category for Amount > 100
B.The query returns total sales for each year, ignoring category
C.The query returns sales amounts only for products with Amount > 100
D.The query returns total sales for each category, ignoring year
AnswerA

Correct. SUMMARIZECOLUMNS groups the sales data by the Year and Category columns, and the filter condition Amount > 100 is applied to the base table before aggregation. Therefore, for every distinct Year-Category pair, the query returns the sum of the sales measure computed only from rows that satisfy Amount > 100. This exactly matches the described output of total sales per year and category under that filter.

Why this answer

The DAX query uses SUMMARIZECOLUMNS to group sales by 'Year' from the Date table and 'Category' from the Product table, then filters the Sales table to include only rows where Amount > 100. The result is a table of total sales (sum of Amount) for each combination of year and category that meets the filter condition.

Exam trap

The trap here is that candidates often misinterpret the SUMMARIZE function as returning individual rows rather than aggregated groups, or they overlook that the filter condition applies to the underlying Sales rows, not to the aggregated result.

How to eliminate wrong answers

Option B is wrong because the query includes 'Category' in the SUMMARIZE grouping columns, so it does not ignore category; it returns totals per year and category, not per year alone. Option C is wrong because the query returns total sales (sum of Amount) per group, not individual sales amounts for each product; it aggregates, not lists. Option D is wrong because the query includes 'Year' in the grouping, so it does not ignore year; it returns totals per year and category, not per category alone.

69
Multi-Selectmedium

Which TWO of the following are best practices when designing a Power BI data model?

Select 2 answers
A.Use calculated columns instead of measures
B.Use a star schema design
C.Denormalize all tables into a single flat table
D.Use bidirectional relationships as default
E.Hide foreign key columns from report view
AnswersB, E

A star schema design organizes data into dimension and fact tables, creating a hub-and-spoke structure that simplifies relationships and enables efficient query performance. By separating descriptive attributes from numeric measures, the model becomes intuitive for business users and allows DAX to filter and aggregate correctly across one-to-many relationships. This is the recommended practice because it balances normalization with usability, reduces model complexity, and ensures that filters propagate predictably from dimensions to facts, which is essential for dynamic reporting.

Why this answer

Option B is correct because a star schema — a central fact table surrounded by dimension tables — is the recommended Power BI model design: it produces simpler DAX, better compression, and faster query performance than snowflaked or flat models. Option E is correct because foreign key columns in dimension tables are implementation details used only for relationship joins; hiding them from report view keeps the field list clean and prevents report authors from accidentally grouping or filtering by meaningless surrogate keys. Option A is wrong because measures (evaluated at query time, not stored) are generally preferred over calculated columns, which consume memory and are computed during refresh.

Option C is wrong because collapsing everything into one flat table causes massive redundancy, poor compression, and slow aggregations. Option D is wrong because bidirectional relationships can introduce ambiguity and unexpected filter propagation; they should be used sparingly and only when a specific cross-filtering requirement demands it, not as the default.

70
MCQeasy

You have a Power BI model with a table named Sales that includes columns: OrderDate, Amount, and CustomerID. You need to create a measure that returns the total sales amount for the previous month based on the current filter context. Which DAX expression should you use?

A.CALCULATE(SUM(Sales[Amount]), PARALLELPERIOD('Date'[Date], -1, MONTH))
B.CALCULATE(SUM(Sales[Amount]), PREVIOUSMONTH('Date'[Date]))
C.CALCULATE(SUM(Sales[Amount]), DATEADD('Date'[Date], -1, MONTH))
D.CALCULATE(SUM(Sales[Amount]), NEXTMONTH('Date'[Date]))
AnswerB

PREVIOUSMONTH is the correct time-intelligence function because it returns a single-column table containing all dates from the calendar month immediately before the last date visible in the current filter context on the 'Date' table. When this table is used as a filter argument inside CALCULATE, it overrides the existing date filtering on the Sales table, so SUM(Sales[Amount]) is evaluated over exactly the prior month's dates. This is the idiomatic DAX pattern for a previous-month measure, and it avoids the shape-preserving ambiguity of PARALLELPERIOD and the forward-looking behavior of NEXTMONTH. No other period-shifting function gives as clean a one-month window as PREVIOUSMONTH in this scenario.

Why this answer

PREVIOUSMONTH returns a single month period shifted back by one month from the last date in the current filter context, which directly gives the total sales for the previous month. This measure respects the current filter context and works correctly when a proper date table is used.

Exam trap

The trap here is that candidates often confuse PREVIOUSMONTH with DATEADD or PARALLELPERIOD, not realizing that PREVIOUSMONTH is specifically designed to return a single full previous month based on the last date in context, while DATEADD shifts dates individually and PARALLELPERIOD can return multiple periods.

How to eliminate wrong answers

Option A is wrong because PARALLELPERIOD returns a set of parallel periods (e.g., entire months) but does not guarantee a single previous month; it can return multiple months if the current period spans multiple months, leading to incorrect totals. Option C is wrong because DATEADD with -1 month shifts each date by one month but does not restrict to a full previous month; it can return partial month data or overlapping periods depending on the granularity. Option D is wrong because NEXTMONTH returns the next month, not the previous month, which is the opposite of what is required.

71
MCQhard

You are a Power BI administrator for a large enterprise. You have a Power BI semantic model that uses a single large fact table named Sales (100 million rows) and several dimension tables. The model is used by multiple departments, each with different row-level security (RLS) rules based on the SalesRegion column. You have implemented RLS using static roles. However, you notice that when users from different departments view the same report page, the query performance varies significantly. You suspect that the RLS filters are causing the performance difference. You need to investigate and optimize the RLS performance. What should you do first?

A.Increase the data model's memory limit in Premium capacity.
B.Use Power BI Performance Analyzer to capture query performance for each user role and analyze the generated DAX queries in DAX Studio.
C.Convert all RLS roles to use dynamic RLS with USERPRINCIPALNAME.
D.Remove all RLS roles and implement security at the report level using bookmarks.
AnswerB

Power BI Performance Analyzer captures per-visual query durations and the exact DAX produced, which you can then paste into DAX Studio for deep profiling. Running the same report as each RLS role (or using DAX Studio's 'Trace as Role'/'User' feature) lets you compare query plans and see how RLS filters are injected, exposing whether they cause excessive storage-engine scans or formula-engine bottlenecks. This combination is the standard way to pinpoint the exact query path responsible for role-specific slowness.

Why this answer

Performance Analyzer in Power BI captures the DAX queries generated for each user role and their durations, and exporting to DAX Studio allows deep analysis of query plans and RLS filter impact. This is the correct first step to diagnose why RLS causes performance variance across roles before making changes.

Exam trap

PL-300 often tests the correct diagnostic sequence — measure first with Performance Analyzer and DAX Studio — rather than jumping to model changes like memory increases or RLS type conversion.

How to eliminate wrong answers

Option A is wrong because increasing memory limits does not address RLS filter inefficiency and may not be the bottleneck. Option C is wrong because converting to dynamic RLS does not inherently improve performance and may add complexity; the issue is diagnosis, not RLS type. Option D is wrong because removing RLS and using bookmarks is a security anti-pattern and does not address performance.

72
MCQhard

You are modeling data for a subscription business in Power BI Desktop. The Subscriptions table has StartDate and EndDate columns, and the Dates table is marked as the official date table. Analysts need a measure that counts subscriptions that were active on any given day selected in a slicer from Dates, and the relationship between Subscriptions and Dates must remain inactive to avoid ambiguity. Which approach should you use?

A.Change the relationship between Subscriptions and Dates to bidirectional cross-filtering and count the Subscriptions rows.
B.Create a measure that uses FILTER over the Subscriptions table comparing StartDate and EndDate to the selected date range, evaluated inside CALCULATE.
C.Create a measure that uses CALCULATE with USERELATIONSHIP to activate the relationship between Subscriptions and Dates inside the measure.
D.Create a calculated column on Subscriptions that flags active rows, then use COUNTROWS on the filtered Subscriptions table in the measure.
AnswerB

Iterating the Subscriptions table with FILTER and comparing each row's StartDate and EndDate to the date selected in Dates expresses the overlap condition directly, without relying on any active relationship. This is the standard pattern for interval or 'active on date' logic and keeps the physical relationship inactive, avoiding ambiguity.

Why this answer

Counting subscriptions active on a selected date requires an interval test across two date columns, which no single relationship can express. Iterating the fact table with FILTER and comparing both StartDate and EndDate to the slicer context captures the overlap precisely. USERELATIONSHIP handles only one relationship, calculated columns cannot react to slicer selections, and cross-filter direction does not perform interval logic.

Exam trap

The trap here is reaching for USERELATIONSHIP to solve an interval problem when only one relationship can be activated at a time and the scenario needs two date comparisons.

73
MCQhard

You need to design a data model for a sales analysis that includes measures for total sales, sales by product, and sales by customer. The source data has a 'Transactions' table with columns: TransactionID, Date, CustomerID, ProductID, Quantity, Amount. What is the recommended star schema design?

A.Create two fact tables: one for sales and one for customers
B.Create a fact table and separate dimensions for Date, Customer, and Product
C.Create a single table with all columns
D.Create a fact table and one dimension containing Customer and Product
AnswerB

This is the canonical star schema: a single sales fact table contains additive measures (quantity, revenue) plus foreign keys to separate Date, Customer, and Product dimension tables. Each dimension is at its own grain and contains only descriptive attribute columns, enabling users to slice and filter sales independently by any combination of date, customer, and product attributes. This design minimizes redundancy, supports fast aggregations, and produces unambiguous relationships, making it the correct choice for Power BI performance and maintainability.

Why this answer

Option B is correct because a star schema centers on a single fact table (here, Transactions with Quantity and Amount as measures) surrounded by separate dimension tables for Date, Customer, and Product, which lets you aggregate total sales and slice by product or customer efficiently. Keeping each dimension distinct preserves clean grain, supports conformed attributes, and enables the required sales-by-product and sales-by-customer analysis. Option A is wrong because splitting into two fact tables fragments the same transaction grain and complicates cross-measure analysis.

Option C is wrong because a single denormalized table is not a star schema and loses dimensional modeling benefits. Option D is wrong because combining Customer and Product into one dimension creates a snowflake-like or junk dimension that prevents independent analysis by each attribute.

74
MCQeasy

You need to create a calculated column in Power BI that shows the full name by combining 'FirstName' and 'LastName' columns with a space. Which DAX expression should you use?

A.FullName = [FirstName] & " " & [LastName]
B.FullName = CONCATENATE([FirstName], " ", [LastName])
C.FullName = CONCATENATEX(Table, [FirstName] & " " & [LastName])
D.FullName = [FirstName] + " " + [LastName]
AnswerA

The ampersand (&) is DAX's dedicated string concatenation operator, correctly joining the [FirstName] and [LastName] column values together with a literal space in between. It performs implicit data-type conversion when needed, so even if one column is stored as text and the other as a number, the result is a single text string. This syntax is the standard, efficient, and readable way to build a calculated column in Power BI.

Why this answer

The DAX concatenation operator is the ampersand (&). Option B is wrong because CONCATENATE function only takes two arguments. Option C is wrong because CONCATENATEX is for tables.

Option D is wrong because the plus sign is for addition.

75
MCQeasy

You need to create a relationship between two tables in Power BI. Both tables contain a column named 'ProductID', but the values in one table are integers and in the other are text. What should you do first?

A.Merge the two tables into one in Power Query.
B.Ensure both columns have the same data type, either by changing the data type in Power Query or in the model view.
C.Create a new calculated column that converts the integer to text using FORMAT.
D.Set the relationship to 'Many-to-many' to bypass the type mismatch.
AnswerB

Power BI relationships require that the key columns on both sides have identical data types; a mismatch between text and integer, for example, will prevent the relationship from being created. Changing the data type in Power Query is the preferred method because it transforms the data during load, while changing it in the Model view only alters the metadata and may not propagate back to the query. Ensuring the same data type is the foundational step before defining cardinality and cross-filter direction.

Why this answer

In Power BI, relationships require matching data types on both sides of the key columns. If one 'ProductID' column is integer and the other is text, the relationship engine cannot resolve the join because the data types are incompatible. Changing both columns to the same data type—either in Power Query (recommended for performance) or in the model view—resolves this mismatch and allows a valid relationship to be created.

Exam trap

The trap here is that candidates assume a many-to-many relationship can ignore data type mismatches, but Power BI still enforces type compatibility on the key columns used for the relationship.

How to eliminate wrong answers

Option A is wrong because merging tables in Power Query creates a single denormalized table, which is unnecessary and can lead to data duplication; the goal is to create a relationship, not to combine the tables. Option C is wrong because using FORMAT in a calculated column converts the integer to text, but this adds a redundant column and introduces performance overhead; it is better to change the data type of the column directly in Power Query or the model. Option D is wrong because a many-to-many relationship does not bypass data type mismatches; the relationship engine still requires compatible data types on both key columns, regardless of cardinality.

Page 1 of 2 · 127 questions totalNext →

Ready to test yourself?

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