Streamlining your tech stack for maximum efficiency

Learn, explore, and grow with our knowledge hub.

How to Improve Power BI Data Model Performance | Smart Statistics
Power BI Practical Tutorial

How to Improve Power BI Data Model Performance

A Power BI report can look polished and still be frustrating to use if every slicer takes several seconds to respond, refreshes regularly fail or the semantic model consumes far more capacity than the business expects.

Performance problems often begin in the data model, not the visual layer. The number of rows imported, column cardinality, relationships, DAX design and storage choices all influence how efficiently Power BI can answer a user's query.

This tutorial walks through seven practical areas you can review before assuming that the solution simply needs more capacity.

Faster reports Reduce unnecessary query work.
Reliable refresh Reduce processing pressure.
Smaller models Store only what reporting needs.
Better scalability Prepare the solution for growth.
Optimise before adding capacity Small improvements to the model can remove unnecessary processing before infrastructure becomes the solution.
Why Performance Matters

A Slow Model Creates More Than a Technical Problem

Performance affects user adoption, refresh reliability, capacity consumption and the amount of time analysts spend troubleshooting instead of delivering insight.

Better User Experience

Faster interactions make it easier for users to explore reports without waiting for every selection.

Reliable Refresh

Efficient models reduce unnecessary memory and processing pressure during scheduled refresh.

Lower Capacity Pressure

Smaller and more efficient models can reduce the amount of memory and processing required.

Greater Reliability

Leaner models are generally easier to maintain, diagnose and scale as reporting grows.

More Time for Insight

Analysts spend less time waiting for refreshes and diagnosing avoidable performance problems.

Seven-Step Optimisation Guide

Improve the Model Systematically

Do not optimise blindly. Establish where the time and memory are being spent, make one class of improvement, then measure the result.

01

Review the current model

Start with evidence rather than assumptions. Identify whether the problem comes from the model, DAX measures, source queries or the visuals generating queries against the model.

Useful areas to inspect include:

  • Model size and largest tables
  • Columns that are never used
  • High-cardinality columns
  • Relationship structure
  • Slow visuals
  • Expensive DAX measures
  • Refresh duration

Power BI Performance Analyzer can help identify visuals that take longer to execute. DAX Studio can provide deeper analysis of model and query behaviour where appropriate.

Record a baseline before changing the model. Without a baseline, it is difficult to know whether an optimisation genuinely helped.
02

Reduce unnecessary data volume

One of the simplest ways to improve a Power BI model is to stop importing data that users never analyse.

Review every table and ask:

  • Does this column appear in a visual?
  • Is it used in a relationship?
  • Is it referenced by a measure?
  • Is the full historical range genuinely required?
  • Could the data be filtered at source?

Where possible, remove unwanted columns in the source query or Power Query before they enter the semantic model.

Check dependencies before deleting fields. A column that is not visible in a report may still be used by a relationship, calculation, sort order or security rule.
03

Optimise relationships

A well-designed star schema usually gives Power BI a cleaner and more predictable filtering path.

Aim for:

  • Fact tables containing measurable events
  • Dimension tables containing descriptive attributes
  • One-to-many relationships where practical
  • Single-direction filtering unless a genuine modelling requirement exists

Avoid introducing bi-directional relationships simply to make a visual work. They can create ambiguous filter paths and make the model harder to understand.

If you repeatedly need complex relationship workarounds, revisit the model design before adding more DAX.
04

Improve DAX measures

DAX that returns the correct number is not automatically efficient.

Start by removing repeated logic.

Instead of:

Margin % =
DIVIDE(
    SUM(Sales[Revenue]) - SUM(Sales[Cost]),
    SUM(Sales[Revenue]),
    0
)

Reuse existing measures:

Revenue =
SUM(Sales[Revenue])

Cost =
SUM(Sales[Cost])

Profit =
[Revenue] - [Cost]

Margin % =
DIVIDE(
    [Profit],
    [Revenue],
    0
)

This is easier to maintain and allows the calculation logic to be reused consistently.

Variables can also improve readability:

Margin % =
VAR RevenueValue =
    [Revenue]

VAR ProfitValue =
    [Profit]

RETURN
    DIVIDE(
        ProfitValue,
        RevenueValue,
        0
    )

Review measures that use iterators such as SUMX, FILTER or nested calculations across very large tables. Iterators are not inherently bad, but unnecessary row-by-row evaluation can become expensive.

05

Use appropriate data types

Power BI's columnar storage compresses different data types differently. Poor choices can increase model size unnecessarily.

Review:

  • Text fields that could be numeric keys
  • Decimal columns that could use whole numbers
  • Date/time fields where time is not required
  • Identifier columns with extremely high cardinality

Transaction IDs, GUIDs and long free-text fields can be expensive because nearly every value may be unique.

Do not change a data type simply for compression if doing so changes the business meaning or precision of the field.
06

Consider aggregations for very large models

If users repeatedly ask high-level questions from a very large fact table, an aggregation strategy may reduce the amount of detailed data that needs to be scanned for common queries.

For example, instead of querying every transaction when management asks for monthly revenue by region, a pre-aggregated structure may contain:

  • Month
  • Region
  • Category
  • Total Revenue
  • Total Cost
  • Order Count

The detailed table can remain available for drill-through or lower-level analysis where the architecture supports it.

Aggregations add complexity. Use them when model scale and query patterns justify that complexity, not automatically on every report.
07

Test, monitor and iterate

Performance optimisation should be measurable.

After each group of changes, compare:

  • Model size
  • Refresh duration
  • Report visual execution time
  • Important DAX query performance
  • Capacity or memory behaviour where applicable

Also test the actual user experience. A technical improvement is only useful if important reporting interactions become more reliable or responsive.

Revisit performance as data volume, report usage and model complexity grow. A model that performs well today may need another review after a year of additional data.
Quick Review Checklist

Before You Add More Capacity, Check These First

Unused columns removed

The model contains only fields required for reporting, relationships, calculations or security.

Source data filtered early

Unnecessary historical rows or irrelevant records are excluded before loading where practical.

Star schema reviewed

Facts and dimensions are organised around clear, predictable relationships.

Bi-directional filtering justified

Cross-filtering is only used where the modelling requirement genuinely needs it.

Expensive DAX identified

Important slow measures have been reviewed rather than optimising arbitrary formulas.

Data types reviewed

Keys, numeric fields, dates and high-cardinality columns use appropriate types.

Performance baseline recorded

Model size, refresh duration and key report timings have been recorded before optimisation.

Changes retested

Performance has been measured after improvements rather than assumed.

Performance Principles

Build Models That Stay Fast as They Grow

Performance optimisation should become part of model design and review rather than something addressed only after users complain.

Keep the Model Lean

Do not store data simply because it might be useful one day.

Model Before DAX

A clear relationship model often removes the need for complicated formula workarounds.

Measure the Result

Optimisation decisions should be based on observed performance rather than preference.

Review Regularly

Growth in data volume, measures and users can change the performance profile over time.

Frequently Asked Questions

Power BI Performance FAQs

What makes a Power BI data model slow?
Common causes include unnecessary data volume, high-cardinality columns, inefficient relationships, expensive DAX measures, unsuitable storage choices and visuals that generate demanding queries.
Will removing columns improve performance?
It can. Removing genuinely unused columns reduces the amount of data Power BI needs to store. The benefit can be particularly important for high-cardinality columns.
Should I use Import or DirectQuery?
Import models are often highly responsive because the data is stored in Power BI's in-memory engine. DirectQuery may be appropriate where architecture, data scale, governance or latency requirements make querying the source preferable. Choose based on the complete solution rather than performance alone.
Are bi-directional relationships always bad?
No. They can be appropriate in specific models. The problem is using them unnecessarily because they can introduce ambiguous filtering behaviour and make the model harder to maintain.
Does using variables make DAX faster?
Variables can improve readability and can avoid recalculating the same expression in some measures. They are not an automatic performance fix, so measure the effect on important queries.
Should I use aggregations?
Aggregations are useful when very large detailed datasets create recurring performance problems for common higher-level queries. They add complexity, so use them where the scale and usage pattern justify it.
How often should performance be reviewed?
Review performance when data volumes, report usage or model complexity change materially, and whenever users begin experiencing slower interactions or refreshes.
How can Smart Statistics help?
Smart Statistics can review Power BI semantic models, improve DAX, optimise data preparation and relationships, investigate slow reports and design more scalable reporting architectures for UK businesses.

Are Your Power BI Reports Getting Slower as the Business Grows?

Smart Statistics helps UK businesses diagnose and improve Power BI models that have become too large, slow, difficult to refresh or expensive to operate.

We can review your data model, DAX, Power Query, refresh architecture and report design, then focus optimisation effort where it will have the greatest practical impact.