TutorialsPower BIPower BI Performance Optimisation

Power BI Performance Optimisation

Make your Power BI reports load faster by optimising the data model and DAX

A slow Power BI report is a usability problem — if a dashboard takes 30 seconds to load, managers stop using it. Performance issues usually come from one of three places: too many columns in the model, calculated columns that should be measures, or complex DAX that scans too much data. These optimisation techniques are asked in senior Power BI interviews and matter for any report with more than 1 million rows or complex multi-table DAX.
Power BI Performance Optimisation Checklist
Apply these in order — data model fixes have the highest impact
🗄️Data ModelHigh
  • Remove unused columns in Power Query
  • Use integer keys, not text keys
  • Avoid high-cardinality text columns
DAXHigh
  • Use measures, not calculated columns
  • Use DIVIDE() instead of /
  • Use VAR to avoid repeated expressions
📊Report DesignMedium
  • Max 8–10 visuals per page
  • Avoid bidirectional relationships
  • Use Import mode over DirectQuery when possible
🔍DiagnosisTool
  • Use Performance Analyzer (View tab)
  • Check slow visuals — identify the DAX query
  • Consider DAX Studio for deep analysis

Example

Common performance fixes
1. REMOVE UNUSED COLUMNS (biggest impact):
   In Power Query → delete every column you do not use
   VertiPaq compresses column by column — fewer columns = smaller model

2. AVOID CALCULATED COLUMNS — USE MEASURES:
   Every calculated column = one more column to compress
   If you only aggregate a value (SUM, COUNT), use a measure

3. AVOID HIGH-CARDINALITY TEXT COLUMNS:
   "Comments" or "Description" columns with unique text per row
   compress poorly — remove them or load them to a separate table

4. USE INTEGERS FOR KEYS (not text):
   CustomerID = 1001 (integer) compresses better than "CUST-1001" (text)

5. STAR SCHEMA (already covered):
   Flat tables scan more data than a star schema

6. LIMIT VISUALS PER PAGE:
   Each visual = a separate query to the engine
   Aim for max 8-10 visuals per page

7. USE PERFORMANCE ANALYZER:
   View tab → Performance Analyzer → Start recording
   Interact with the report → see how long each visual takes
   Identify slow queries → optimise those specific measures

8. AVOID BIDIRECTIONAL RELATIONSHIPS:
   They create ambiguous filter paths and slow queries
   Use single-direction relationships and CROSSFILTER() in DAX when needed

Key Points

  • Remove every column from Power Query that you do not use in the report
  • Performance Analyzer (View tab) shows exactly which visual and measure is slow
  • Measures are always faster than calculated columns for aggregations
  • Avoid DISTINCTCOUNT on high-cardinality columns in large models — it is slow
  • Import mode is much faster than DirectQuery for most use cases

Practice Question

Which Power BI tool helps you identify which visuals and DAX queries are taking the most time to load?