A slow Power BI report has a small set of causes. The diagnostic tools — Performance Analyzer in Desktop and DAX Studio as a separate free download — make every cause visible. Without them you'll fix things at random. With them, optimisation becomes mechanical.
Performance Analyzer
View → Performance Analyzer → Start Recording → interact with the report → Stop. Each visual shows three times: DAX query time, visual display time, and others. Sort by total time. The slowest visual gets investigated first. Click 'Copy query' next to a slow visual to capture its DAX for further analysis in DAX Studio.
The seven most-effective fixes
- Star schema, not flat table — Performance gains 5-10x.
- Disable Auto Date/Time (Options → Data Load → uncheck Auto Date/Time) — this auto-generated date hierarchy bloats models massively.
- Use measures, not calculated columns, wherever possible — calculated columns persist in memory; measures don't.
- Single-direction relationships unless you need bi-directional — fewer hidden filter paths to traverse.
- Remove unused columns from imported tables — every column eats memory.
- Aggregations on top of large fact tables — Power BI auto-routes visuals to the aggregation when possible (Premium feature).
- Variables in DAX — capture once, reuse many times; reduces query plan complexity.
Import vs DirectQuery vs Composite
- Import: data loaded into Power BI's columnar engine (Vertipaq). Fastest queries. Refreshed on schedule. Most analyst reports.
- DirectQuery: every visual interaction issues a live query to the source database. Always fresh, slow on each interaction. Used when data must be real-time or the dataset is too big to import.
- Composite: some tables Import, others DirectQuery. Aggregations on top of DirectQuery tables. Power BI Premium feature for large enterprise scenarios.
DAX Studio is essential
Free download from daxstudio.org. Connects to your local .pbix or to Service models. Run any DAX measure, see execution time broken down by Storage Engine vs Formula Engine, capture server timings, profile query plans. Every serious Power BI engineer knows it. If you're optimising and you don't have DAX Studio installed, you're flying blind.
Exercise
On any moderately complex Power BI report, run Performance Analyzer. Identify the three slowest visuals. For each, copy the DAX into DAX Studio and run it. Where does the time go — Storage Engine (memory scan) or Formula Engine (DAX logic)? What does that imply for the fix?