Use DAX Studio’s Server Timings and Query Plan together with Power BI Performance Analyzer to isolate the measure, capture its query plan, and pinpoint costly operations.
1. Enable Performance Analyzer in Power BI Desktop, start recording, run the visual, and export the JSON log.
2. Connect DAX Studio to the same PBIX, paste the captured DAX, and run with Server Timings and Query Plan toggles enabled.
3. Check Server Timings: look for total duration > 1 s; flag any step > 200 ms. Note the split between Storage Engine and Formula Engine.
4. Inspect Query Plan: expand the Operators tree; high‑cost operators such as Filter, Group By, Summarize usually indicate context transition or row‑by‑row evaluation.
5. Storage Engine dominant: review column cardinality, relationship direction, and consider replacing CALCULATE with SUMMARIZECOLUMNS or adding appropriate bi‑directional filters.
6. Formula Engine dominant: rewrite using variables, replace nested FILTERs with CALCULATETABLE, and avoid iterators inside iterators.
7. Validate by repeating steps 1‑4; target ≥ 30 % reduction in total duration and sub‑200 ms per step.
Comparison table:
Metric | Good | Warning | Critical
--- | --- | --- | ---
Total duration | < 500 ms | 500 ms‑1 s | > 1 s
Formula Engine % | < 30 % | 30‑60 % | > 60 %
Storage Engine % | < 70 % | 70‑90 % | > 90 %Additional tips: use SET STATISTICS TIME ON; in DAX Studio, enable All Queries to capture background refreshes, and keep individual tables under 10 M rows for interactive speed.