PL-300 Model the data Practice Question
A data model contains a table 'Sales' with columns: Date, ProductID, Quantity, Amount. There is a 'Products' table with columns: ProductID, ProductName, CategoryID. A measure 'Total Sales' = SUM(Sales[Amount]) returns correct values. However, when a user creates a visual with CategoryID from 'Products' and 'Total Sales', some categories show blank. What is the most likely cause?
⚠ Common exam trap
Many candidates assume the relationship direction or cross-filter setting is the culprit, but the real issue is data integrity—orphaned foreign keys in the fact table—which is a common data modeling pitfall tested in the PL-300 exam.
Answer choices
Why each option matters
Answer the question above first, then reveal the full breakdown to understand why each option is right or wrong.
Correct answer & explanation
✓
There are ProductID values in Sales that do not exist in Products table.
When ProductID values in the Sales table do not have matching entries in the Products table, the relationship between the two tables will result in blank CategoryID values for those unmatched rows. In Power BI, a many-to-one relationship (the default) filters from the 'one' side (Products) to the 'many' side (Sales), but if a Sales row has a ProductID not present in Products, it cannot be matched, and any column from Products (like CategoryID) will appear as blank in visuals. This is a classic data integrity issue where the fact table contains orphaned foreign keys.
Answer analysis
Option-by-option breakdown
For each option: why learners choose it and why it is or isn't the right answer here.
- ✓
There are ProductID values in Sales that do not exist in Products table.
Why this is correct
In a one-to-many relationship between Products and Sales, every ProductID in Sales must have a matching ProductID in Products for the related attribute (e.g., Category) to be populated. If Sales contains ProductID values not present in Products, those rows participate in the relationship as unmatched orphans, so the lookup column from Products is blank. As a result, any visual that slices or groups by Category shows a blank bucket that aggregates the sales from those orphaned ProductID values.
- ✗
The 'Total Sales' measure is not properly referencing the Sales table.
Why it's wrong here
This is not the cause because a measure's definition does not depend on the relationship's matching behavior; as long as the measure references the Sales[Amount] column correctly, it computes the correct total regardless of orphaned lookup keys. The symptom of a blank category is a data-quality or relationship-integrity problem, not a measure syntax problem. If the measure were miswritten, you would typically see an error, incorrect totals across all rows, or a different aggregate, not blanks only in a specific attribute column.
- ✗
The relationship between Sales and Products is set to many-to-one, single direction.
Why it's wrong here
A many-to-one relationship with single-direction filtering is the default and recommended cardinality/direction for a lookup table such as Products. Filtering flows from the 'one' side (Products) to the 'many' side (Sales), which is exactly what is needed to slice Sales by Product attributes. This configuration cannot create blank categories; whether a category shows blank is determined exclusively by whether each sales row finds a matching Products row, not by the direction of cross-filtering.
- ✗
The relationship is set to both directions (bidirectional).
Why it's wrong here
Bidirectional filtering (cross filter direction: Both) makes the relationship filter in both directions, meaning filtering Sales would also filter Products, but this does not eliminate or create orphaned rows. In fact, a bidirectional relationship cannot resolve missing keys; a row in Sales without a corresponding ProductID still has no match to retrieve Category from. If anything, bidirectional filtering can introduce ambiguity or reduced performance, but it would not cause the blank category symptom described in the problem.
Go deeper
Related to this question
About these practice questions
This PL-300 question is part of Courseiva's 217-question bank — original exam-style content with full explanations and wrong-answer analysis, never real exam questions or exam dumps. Learn why practice questions differ from exam dumps →
JA
Written by Johnson Ajibi, MSc IT Security
Senior Network & Security Engineer · founder of Courseiva
This PL-300 practice question is part of Courseiva's free Microsoft certification practice question bank. Courseiva provides original exam-style practice questions with explanations, topic-based practice, mock exams, readiness tracking, and study analytics to help learners prepare for the PL-300 exam.