Power BI performance

Power BI performance optimization consulting for reports your team has stopped waiting for

Our Power BI performance optimization consulting finds out why a report is slow before changing anything: senior US-based engineers measure each page, trace the delay to the data model, a DAX measure, the report design, the refresh or the capacity, and fix the causes in order of impact. One written scope, one fixed price agreed before work starts, typical delivery in 2–4 weeks with 30 days of hypercare.

  • Fixed-fee scoped projects
  • Senior US-based engineers
  • Typical 2–4 week delivery
  • 30 days of hypercare
Revenue Overview Revenue$4.2M Margin38% Orders12.4k Churn2.1% Monthly performance By segment 64%

Representative dashboard — sample data

What you get

Six places a slow report loses its time, and what we do about each

A report that takes too long to open is rarely slow for one reason. The delay is spread across the model, the measures, the page design and the refresh behind it, and fixing the wrong layer first is how teams spend months tuning without anything feeling faster.

A measured baseline, page by page

Before anything changes, the slowest pages are timed visual by visual, so every later fix is judged against a number rather than a feeling. The same pages are re-measured at handover.

A model shaped for the engine

Wide flat tables reshaped into facts and dimensions, unused columns removed, high-cardinality columns split or dropped, and relationships set to single direction wherever the report does not genuinely need both.

DAX measures rewritten where they cost time

Only the measures the baseline shows are slow: variables instead of repeated expressions, column filters instead of whole-table filters, and iterators kept off large tables where a simpler pattern returns the same result.

Pages that ask for less at once

Every visual on a page sends its own query. Crowded pages are consolidated, detail moves to drillthrough, and slow custom visuals are swapped for built-in ones that show the same thing.

A refresh that finishes reliably

Power Query steps checked for query folding, history loaded once with incremental refresh where it fits, and filtering pushed back to the source so the refresh moves less data every night.

A written findings report you keep

Each cause found, the evidence for it, what was changed and what was deliberately left alone, plus the before-and-after timings, so the next person to edit the model knows what to protect.

How it works

Three steps from a slow report to a measured result

  1. 1

    Measure and diagnose

    We agree the pages that matter most, record their timings, capture the queries behind the slowest visuals, and inspect the model’s size and column cardinality. The output is a ranked list of causes, each tied to the layer it lives in.

  2. 2

    Fix in order of impact

    The largest cause goes first, usually in the model rather than the measures. Changes are made in a copy of your semantic model, and the numbers on every affected visual are reconciled against the original before anything is published.

  3. 3

    Re-measure and hand over

    The same pages are timed again under the same conditions, the findings report is written up, and your report owner gets a walkthrough of what changed and why, with 30 days of hypercare behind it.

What this engagement covers

Power BI performance work is the job of finding where a report spends its time and removing the causes, rather than buying capacity to outrun them. Power BI gives you the diagnostic tooling to do it properly: Performance Analyzer in Power BI Desktop (opens in new tab) breaks each visual’s load time into the DAX query, the visual rendering and everything else, and Microsoft’s Power BI optimization guide (opens in new tab) sets out where the common costs sit. The work here is applying both to your reports, in the order that matters for your users.

Deliverables are the baseline timings, a ranked diagnosis, the optimized semantic models and reports, reconciliation of every changed number against the original, and a written findings report with before-and-after timings for the pages in scope. Work is performed remotely by senior US-based engineers from our Orange County, CA base, serving every US state, at one fixed price agreed before work starts after your free consultation.

Where this sits next to our other Power BI work

This engagement starts from reports you already have. If the report does not exist yet, or the existing one is beyond saving, our Power BI dashboard development engagement builds it properly from the start: a clean star-schema model, measures written once, and pages designed around the questions people actually ask. We will tell you in the consultation if a rebuild would cost less than tuning what is there.

The other neighbor is control of the wider estate. When the slowness comes from dozens of near-duplicate semantic models all refreshing against the same source, the fix is partly a governance decision about which model is the trusted one, which is what our Power BI governance consulting engagement settles. And if you are comparing outside help for this kind of work, our guide on how to choose a Power BI consultant lists the questions that separate a real diagnosis from a quick rewrite. Once the reports are fast, keeping them that way is ongoing work rather than a project — refresh failures, broken visuals and small changes are what our Power BI support and maintenance services cover, each scoped at a fixed fee.

Diagnosing a slow report: symptom, cause, fix

Most slow reports show one of six patterns. Each has a place it usually lives, a way to confirm it with evidence rather than intuition, and a fix that tends to hold. The table below is the diagnostic map we scope from; your findings report is the filled-in version for your own models.

What users notice Where it usually lives How we confirm it The fix that tends to hold
One page is slow after every slicer click A few expensive DAX measures, or too many visuals on the page Performance Analyzer timings per visual, separating DAX query time from rendering time Rewrite the slow measures with variables and column filters; consolidate visuals and move detail to drillthrough pages
Every report built on one model is slow The shape of the semantic model Model size broken down by table and column, relationship directions, and flat tables that should be dimensions Reshape toward a star schema, remove unused columns, and set relationships to single direction where both are not needed
The file is huge and slow to open or publish High-cardinality columns and hidden date tables Column cardinality and size, and whether auto date/time has generated a hidden table for each date column Split date-time columns, drop unique identifiers the report never shows, and replace auto date/time with one shared date table
The scheduled refresh runs for hours or fails Power Query steps, the data source, or the gateway Refresh history, the step where query folding stops, and how much data each refresh reloads Restore query folding, filter at the source, and load history once with incremental refresh where the data allows it
Fast in Desktop, slow in the service DirectQuery sources, gateway load, or a shared capacity under contention Query timings against the source and, on Fabric or Premium capacity, the capacity metrics for the same window Move tables to import or a composite model where freshness allows; tune the source queries; then size capacity only if still needed
Slow only for some users Row-level security filter expressions The same pages timed while viewing as each security role Simplify role filters so they act on small dimension tables, mapped to security groups rather than to complex per-user logic

The second row is where most engagements find their largest improvement. Microsoft’s star schema guidance for Power BI (opens in new tab) explains why: the engine is built to filter small dimension tables and aggregate one narrow fact table, and a model shaped that way makes most DAX simpler as well as faster.

Why we fix the model before the measures

DAX is where slowness becomes visible, so it is where most tuning effort goes first. But a measure is only as fast as the model it runs against. A well-written measure over a single wide table of every column from the source system will still scan far more than it needs to, and a clever rewrite on that model usually buys a short-lived improvement that disappears as the data grows.

So the diagnosis always looks at model shape and size before measure logic. Where the model is sound, measure rewrites are targeted and quick. Where it is not, reshaping it tends to speed up every report built on it at once, including ones nobody listed as slow. Either way, every changed measure is checked against the original output so that a faster report never means a different number.

Refresh performance is its own problem

A report can open quickly and still be a daily problem if its refresh runs for hours, fails overnight, or leaves the data stale by the time people look. The usual cause is not the source but the steps in between: a transformation that stops query folding, so Power Query pulls every row back and filters locally; or a full reload of years of history that has not changed since last night.

Restoring folding and moving large fact tables onto incremental refresh (opens in new tab), where the source supports it, typically shortens refreshes and makes them far less likely to fail. We confirm the source can support it before recommending it, and we document the partitioning policy so it is not silently undone the next time someone edits the query.

Who this fits, and who it does not

The usual fit is a team whose Power BI reports were built over time by capable people without much time to spare, and have grown slower as the data grew. The trigger is often a specific complaint: a leadership report that takes long enough to open that people ask for a spreadsheet instead, a refresh that fails a few mornings a month, or a capacity bill someone was told would fix it and did not.

It is a poor fit in two cases, and we will say so during the consultation. If the report was never modeled properly and the questions it answers have changed, rebuilding is usually the better purchase. And if the slowness sits in a source database or a network link outside Power BI, we will identify that and hand you the evidence, but tuning that system is a separate piece of work.

Delivery in three phases

The table shows scope and typical timeline rather than prices, because an honest number requires seeing how many reports and semantic models are involved, their data volumes, and how much of the model needs reshaping. For how our fee is set and what is fixed before anything starts, our fixed-fee process spells it out.

Phase Scope Typical timeline Fee
Phase 1 — baseline and diagnosis Pages in scope agreed and timed, slow queries captured, model size and cardinality inspected, refresh history and query folding reviewed, and a ranked list of causes produced for your approval About the first week Fixed fee — scoped after your free consultation
Phase 2 — optimize and reconcile The approved fixes made in order of impact: model reshaping, measure rewrites, page consolidation, refresh changes. Every affected number reconciled against the original before publishing Weeks 2–3 Fixed fee — scoped after your free consultation
Phase 3 — re-measure and hand over The same pages timed again under the same conditions, the written findings report delivered, and a walkthrough for your report owner on what changed and what to keep intact Week 4 and close-out Fixed fee — scoped after your free consultation

Everything produced is yours from the first day: the optimized models, the reports and the findings live in your own Microsoft tenant, never in ours. Nothing is published over your existing reports until you have reviewed the reconciled numbers, and the original versions are kept so any change can be rolled back.

FAQ

Report speed questions, answered

It starts with measuring, not guessing. We time each slow page with Performance Analyzer, capture the queries behind it, and trace the delay to its layer: the data model, a DAX measure, the report design, the refresh pipeline or the capacity. Then we fix causes in priority order and re-measure the same pages afterwards.

Less often than people expect. DAX gets blamed because it is visible, but many slow reports trace back to the model underneath: wide flat tables instead of a star schema, high-cardinality columns, bidirectional relationships, or too many visuals querying at once. Rewriting measures on a poorly shaped model rarely delivers a lasting improvement.

Not as a first step. More capacity can help a well-built model under heavy load, but it mostly hides the cost of a poorly built one, and that cost returns as data grows. We fix the model, measures and report design first, then tell you plainly whether your workload genuinely needs a different license or capacity size.

Often, yes. Long or failing refreshes tend to come from Power Query steps that stop query folding, loading full history every night instead of incremental refresh, unused columns imported anyway, or a gateway under strain. We find which step dominates the refresh time and fix that first, before touching anything else.

Only where the design itself is the bottleneck, and nothing changes without your approval. Some pages carry dozens of visuals that each send their own query; consolidating them, moving detail to drillthrough pages or replacing heavy custom visuals can change the layout. The numbers stay the same, and we reconcile them against the original before handover.

Typical delivery is two to four weeks from kickoff, with 30 days of hypercare afterwards. The fixed fee depends on how many reports and semantic models are in scope, their data volumes, and how much of the model needs reshaping. One price is agreed in writing after a free consultation, before any work starts.

Book a free consultation

Get more from the Microsoft tools you already pay for

Tell us what you’re trying to fix — a report, an approval process, an intranet, a Copilot rollout. We scope it as a fixed-fee project, you approve, and a senior engineer delivers in 2–4 weeks.

  • Fixed-fee scope agreed before any work starts
  • Senior, US-based Microsoft engineers — no handoffs
  • Typical 2–4 week delivery
  • 30 days of post-delivery hypercare included

The fastest way to reach us is the form — tell us the task and we’ll reply within one business day.

All fields are required.

We reply within one business day. No newsletters, no drip campaigns.

Book a Free Consultation