Skip to content

Power BI

Power BI star schema mistakes to avoid

Common star schema mistakes in Power BI, from mixed grain and bidirectional relationships to missing date tables, with fixes you can apply to an existing model.

Talha Ansari··5 min read

Key takeaways

  • One fact table should hold one grain; mixed grain is the most common cause of inflated totals.
  • Dimensions should be narrow, conformed, and related to facts with single-direction filters.
  • A continuous, marked date table is required for reliable time intelligence and multiple date roles.
  • Validate keys, totals, and relationship coverage before the model reaches report users.
On this page

Mixing grain in one fact table

The most expensive mistake is a fact table that tries to hold more than one event. An order header carries delivery charges once per order; an order line carries quantity and price once per product. Put both in one table and the delivery charge repeats on every line, so any sum of it overstates the total.

The fix is a fact table per grain, related through conformed dimensions. A header fact and a line fact can share Customer, Date, and Channel. Report header measures from the header fact and line measures from the line fact. Do not combine them in a single visual without a defined allocation rule.

A simple illustration: an order with three lines and a delivery charge of 20 recorded on each line contributes 60 to any total of that column, not 20. The error survives every visual that sums the fact table, so it is rarely caught by checking a single chart.

Treating a wide table as a model

A single import of a transaction extract with fifty columns feels simple until every visual scans the same wide rows. A star schema separates numeric events from descriptive attributes, which compresses better and gives each dimension one place to change.

The related mistake is snowflaking everything. Product to Subcategory to Category is sometimes justified, but each extra table adds a relationship and a filter path. Flatten small hierarchies into one dimension unless the shared table is large and reused. Keep the keys and hide them from report view.

Getting relationships wrong

Relationships decide how filters travel. Most of them should be one-to-many, from the dimension to the fact, with a single filter direction. The exceptions should be deliberate and documented.

Test each relationship by filtering a dimension and counting fact rows. If a filter changes a total in a way that cannot be explained, inspect the direction and the key before changing any DAX. Ambiguity is a model problem, and a measure workaround usually hides it.

  • Many-to-many between fact and dimension: usually a sign of duplicate dimension keys; resolve the duplicates instead of accepting the relationship.
  • Bidirectional filtering everywhere: creates ambiguous paths and unpredictable totals; use single direction and a defined measure for the exception.
  • Inactive relationships left unexplained: document which date role each one serves and activate it deliberately with USERELATIONSHIP.
  • Text keys on both sides: slower and prone to mismatches from trailing spaces or case; use integer surrogate keys.
  • Missing unknown member: unmatched foreign keys produce blank dimension members and can hide transactions from grouped visuals.

Ignoring the date table

Time intelligence functions expect a continuous date table marked as such. Using the date column in the fact table creates gaps on days with no sales, and year-to-date or same-period-last-year calculations can quietly return wrong results. Build a separate date table with one row per day, mark it, and relate it to each date role.

Multiple date roles need a decision: separate role-playing date tables for clarity, or one table with inactive relationships and USERELATIONSHIP in the measures that need them. Power BI allows only one active relationship between two tables; any additional relationship is created inactive and does nothing until a measure activates it.

Hiding the model's rough edges

Users should see dimensions and measures, not foreign keys, technical column names, or a fact table with a hundred fields. Hide keys, format measures consistently, and put related measures in display folders. A clean field list is part of the model, not decoration.

Check data types and column quality before publishing. A date stored as text, a numeric key stored as text, or a column with mixed types will cause relationship failures and slow queries. Fix them upstream or in Power Query, and remove columns no visual uses.

A pre-publish check

Symptoms in the report usually point back to a small number of model problems. Use the table as a diagnostic starting point, then confirm at the lowest grain.

Common symptoms and their model causes
SymptomLikely causeFix
Delivery charges double-countedHeader and line grain mixedSeparate fact tables by grain
Totals change when a slicer is clearedBidirectional or ambiguous relationshipSingle-direction relationships, review exceptions
Same-period-last-year returns blankDate table has gaps or is not markedContinuous marked date table
Transactions appear under a blank categoryUnmatched or blank foreign keyUnknown member and key validation
Refresh is slow and the file is largeUnused columns and high-cardinality textPrune columns, fix types, avoid calculated columns

Frequently asked questions

Can a star schema have more than one fact table?+

Yes. Each fact table should have its own grain and share conformed dimensions with the others. Measures remain specific to the fact they aggregate.

Is a flat table ever acceptable?+

Yes, for a small, single-purpose report with one source and no reuse. The problems appear when the report grows, when several facts must be compared, or when definitions need to be governed.

Is a separate date table needed for every date column?+

Not necessarily. One date table with inactive relationships and USERELATIONSHIP measures can work. Separate tables are clearer when several teams report on different date roles and confusion is likely.

How should many-to-many relationships be handled?+

Model the bridge table explicitly, with a dimension for the entity on each side and a bridge table that holds the combinations. Avoid relying on a bidirectional relationship to simulate it.

Need help applying this?

Improve your bi dashboards & reporting.

Review the service scope or tell us what you are trying to improve. We will reply with a clear next step.

Free KPI definition template

Related reading

Power BI·6 min read

Power BI date tables: why they matter

Why a dedicated date table is required for reliable time intelligence in Power BI, how to build one, and how to handle fiscal years and multiple date roles.

Read