Power BI Data Modelling Best Practices for SMEs

12 Aug 2026 · 5 min read

Good Power BI data modelling starts with a star schema: separate fact tables for events and dimension tables for descriptions, joined by single-direction relationships. This keeps DAX simple, reports fast and the model easy to extend.

Good Power BI data modelling is the single biggest factor in whether a report is fast, accurate and easy to change. For small and medium organisations especially, where one model often serves the whole business, the right structure pays back every week. The core practice is the star schema: keep your measurable events in fact tables, your descriptive attributes in dimension tables, and join them with simple one-to-many relationships. Do this well and your DAX stays readable, your reports stay quick, and adding a new measure or dimension does not mean rebuilding everything.

Start with a star schema, not a flat table

Many SME reports begin life as a single wide spreadsheet imported into Power BI. It works at first, then becomes slow and hard to maintain. The better pattern is the star schema. A fact table holds the numbers you measure, such as order quantity and revenue, with keys pointing to dimensions. Dimension tables hold the descriptions you slice by, such as Product, Customer, Region and Date. Each dimension links to the fact table with a one-to-many relationship.

This shape suits Power BI's VertiPaq engine, which compresses and queries star schemas efficiently. It also makes the model intuitive: filters flow from dimensions into facts, so selecting a region naturally filters sales. Avoid snowflaking dimensions into many sub-tables unless there is a strong reason; a few wider dimension tables usually perform and read better.

Get relationships right

Relationships are where models quietly go wrong. A few rules keep them sound:

  • Prefer single-direction (one-to-many) relationships from dimension to fact. They are predictable and fast.
  • Avoid bi-directional cross-filtering unless you genuinely need it, as it can create ambiguity and slow queries, and it interacts badly with row-level security.
  • Use a single, dedicated Date table marked as the model's date table, and relate it to every fact's date. This is what makes time-intelligence functions such as year-to-date work reliably.
  • Keep relationship key columns clean integers or short text where you can; they compress and join better.

Model in Power Query, calculate in DAX

Decide where each piece of logic belongs. Data shaping, removing columns, merging sources, fixing types and creating keys, should happen in Power Query as data loads. This keeps the model lean and pushes work upstream, ideally folding back to the source database where possible. Reserve DAX for analytical logic that depends on the filter context of the report, principally measures.

A practical split:

TaskWhere it belongs
Removing or renaming columnsPower Query
Merging or appending sourcesPower Query
Creating surrogate keysPower Query or the source
Cleaning and typing dataPower Query, or the source view
Sums, ratios, time intelligenceDAX measures
Per-row values needed for relationships or slicersCalculated column, used sparingly

Write DAX that stays readable

Measures should be explicit, not implicit. Create a measure such as Total Sales with SUM(Sales[Amount]) rather than dragging raw columns into visuals, so logic is defined once and reused. Build complex measures from simpler ones by referencing existing measures. Use variables with VAR to name intermediate steps, which makes formulas easier to read and often faster because the engine evaluates them once. Keep measures in a dedicated, clearly named measures table so they are easy to find.

Favour measures over calculated columns. Measures compute at query time and add nothing to model size, whereas calculated columns are materialised and stored in memory, inflating the model and slowing refresh. Only use a calculated column when a value must physically exist per row, for example to drive a relationship or a slicer.

Habits that keep reports fast

Performance for SMEs is mostly about discipline, not exotic techniques.

  • Import only the columns and rows you need. Dropping unused, high-cardinality columns such as free-text notes or precise timestamps can shrink a model dramatically.
  • Reduce cardinality where you can. Splitting a datetime into date and time columns compresses far better than one high-precision column.
  • Turn off Auto date/time, which silently creates hidden date tables for every date column, and use your own Date table instead.
  • Hide columns and tables that are not meant to be used directly, so report builders pick measures, not raw fields.
  • Use incremental refresh on large fact tables so you reload only recent data rather than full history.
  • Test with realistic data volumes, not a sample, so slow patterns surface before users find them.

Build for change

The best models anticipate growth. Name tables and columns in business language so colleagues understand them. Keep a clean separation between staging queries and the model. Document key measures and assumptions. When the structure is sound, adding a new region, product line or measure is a small change, not a rebuild. That extensibility is exactly what lets a model also support governed features cleanly, such as the mapping tables behind dynamic Power BI row-level security.

Strong modelling underpins everything else, from reliable data refresh to clean deployment pipelines. Our Power BI consulting service helps SMEs build models that stay fast and maintainable as the business grows, and our UK Power BI consultants can review or rebuild an existing model. If you are moving off spreadsheets, our Excel to Power BI migration service is a natural starting point.

If your reports have become slow, fragile or hard to trust, a Trusted Numbers Review reviews your model, DAX and performance in a fixed two-week engagement, with the fee credited against any follow-on work. Book a review to get a clear, prioritised plan for a faster, cleaner model.

Frequently asked questions

What is a star schema and why does Power BI prefer it?

A star schema separates measurable facts, such as sales, into fact tables and descriptive attributes, such as products or dates, into dimension tables. Power BI's engine is optimised for this shape, giving simpler DAX and faster queries than a single flat table.

Should I model in Power Query or in DAX?

Shape and clean data in Power Query during load, and reserve DAX for calculations that depend on report context, such as measures. Pushing transformations upstream keeps the model lean and refresh efficient.

Do measures or calculated columns perform better?

Measures are usually better because they calculate at query time and do not bloat the model. Calculated columns are stored in memory and increase model size, so use them only when a value must exist per row.

Can you review or fix our existing model instead of rebuilding it?

Often, yes. Many performance and accuracy problems come down to relationships, over-used calculated columns or a missing Date table, all of which we can fix in place. A Trusted Numbers Review tells you whether a targeted fix or a rebuild is the better value.

Want this set up and handled for you?

Start with a fixed-price Trusted Numbers Review: two weeks, written findings on why your figures disagree, and one fixed price to put it right.

Related guides