PL-300 Model the data Practice Question
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?
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
✓
Keep TransactionID in the fact table
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.
Answer analysis
Option-by-option breakdown
For each option: why learners choose it and why it is or isn't the right answer here.
- ✗
Create a separate dimension table for transactions
Why it's wrong here
Creating a separate dimension table for transactions misidentifies TransactionID as a dimension with descriptive attributes. TransactionID is a classic degenerate dimension: it exists only to uniquely identify a fact row and has no related fields to populate a dimension table. Adding such a table would force an unnecessary relationship, extra joins, and additional model complexity with zero analytical benefit. The standard star schema practice is to keep degenerate dimensions in the fact table.
- ✓
Keep TransactionID in the fact table
Why this is correct
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.
- ✗
Move TransactionID to the Product dimension
Why it's wrong here
Moving TransactionID to the Product dimension would violate the grain of both tables. A single product can appear in thousands of transactions, and a single transaction can contain many products, so placing TransactionID there would create a many-to-many relationship or force duplicated product rows. It would also imply that TransactionID is a product attribute when it is really a transactional event identifier. This destroys the referential integrity needed for accurate reporting and makes DAX measures like transaction counts unreliable.
- ✗
Remove the TransactionID column to reduce model size
Why it's wrong here
Removing the TransactionID column to reduce model size sacrifices row-level traceability for negligible storage savings. TransactionID is often an integer or string of a few bytes, so the impact on overall model size is minimal, while the loss prevents you from linking back to source systems, identifying duplicate or missing records, and performing row-level debugging. Without a unique or semi-unique identifier in the fact table, even straightforward aggregations can mask data quality issues. In a properly modeled fact table, a degenerate key such as TransactionID should never be deleted purely to shrink the model.
Go deeper
Related to this question
About these practice questions
This PL-300 question is part of Courseiva's 524-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.