You open up a Power BI model… and it’s a mess.
Tables are scattered.
Relationships are unclear.
Performance? Don’t even ask.
But it doesn’t have to be like this.
DO NOT Build Another Power BI Model Before Watching THIS
In this post, I’m sharing 5 powerful data modelling best practices that will instantly improve your data model in Power BI — making it faster, cleaner, and way easier to work with.
Let’s go from messy and cluttered to clean and performant.
1. Top-Down Layout (a.k.a. KOHE Layout)
The first rule of data modeling — bring visual clarity.
It’s tempting to dump all your tables into the model view and connect them however they fit. But that only makes things harder later.
Here’s what you do instead:
-
Keep dimension tables at the top
-
Place fact tables at the bottom
This layout helps you instantly understand how the data flows.
You’ll also catch relationship issues more easily — especially the direction of filtering (1 ➝ *).
2. Fix One-to-One Relationships
One-to-one relationships usually mean you’re duplicating data.
Instead of two tables with the same grain (like one row per product), just merge them in Power Query.
These types of relationships slow down your model for no real gain.
Fewer tables = better performance.
3. Flatten Snowflake Schemas (Unless You Really Need Them)
Snowflake schemas aren’t always wrong — but most of the time, a star schema works better.
If your dimension tables are chained together (like Product ➝ Subcategory ➝ Category), ask: “Can I flatten this?”
If yes, use merges in Power Query to collapse the structure into a single table.
Cleaner model. Fewer joins. Better DAX experience.
Only keep bridge tables when the granularity truly differs — like budget at category level vs. sales at product level.
4. Be Careful With Bi-Directional Filters
It’s tempting to fix broken measures by changing relationships to “Both” directions.
Yes, it solves that one issue.
But it can silently break 5 others.
Instead:
-
Keep relationships single-directional
-
Use
CROSSFILTER()
in DAX only where needed
That way, you avoid filter confusion in the rest of your model.
5. Reduce Fact Table Granularity (If You Can)
Your sales table doesn’t always need to be at transaction level.
If your reporting is at the day level, consider summarising it.
Less rows =
-
Smaller model
-
Faster reports
-
Smoother experience
You can use your calendar table to calculate daily aggregates — or reshape your fact table entirely.
Don’t store more rows than you need.
Bonus Tip: Turn Off Auto Date/Time
One of Power BI’s worst default settings.
Auto date/time creates hidden date tables for every date column — bloating your model silently.
Turn it off:
Go to File > Options > Data Load > Uncheck “Auto date/time”.
Use your own calendar table. It’s cleaner and fully in your control.
Delete Unused Columns (and High-Cardinality Ones)
Use DAX Studio or Measure Killer to identify columns that:
-
Are not used in visuals
-
Are not used in measures
-
Have high cardinality (e.g. Order IDs)
Deleting these will reduce your model size and improve performance significantly.
Final Thoughts
These 5 best practices can completely transform your Power BI data model:
-
A clean top-down layout
-
Flattened schemas
-
No unnecessary relationships
-
Optimal fact table grain
-
No hidden date tables
Your reports will run faster.
Your DAX will become easier to write.
Your models will finally make sense.
If you want to take your Power BI modeling even further, I’ve got a full course that goes deep into data modelling, DAX, and performance optimisation — in a way that actually makes sense.