Back to Blog

Query Caching in Power BI Premium - When It Helps and When It Bites

September 14, 20267 min readMichael Ridland

There is a particular flavour of complaint we hear a lot from Australian businesses running Power BI at scale. The executive dashboard, the one the leadership team opens first thing every morning, takes eight seconds to load. Eight seconds does not sound like much until you multiply it by forty people opening it every day, and until you factor in that the eight-second wait is the first impression your entire reporting programme makes on the people who fund it. Slow dashboards do not just annoy people. They quietly erode trust in the whole thing.

Query caching in Power BI Premium is one of the levers for fixing exactly that. The Microsoft documentation covers the mechanics. What I want to get into is the judgement call: when caching is the right fix, when it quietly causes problems, and how we decide on client work. Because like most performance features, it is a trade-off, not free speed, and the trade-off is one you need to understand before you flip it on.

What query caching actually does

The concept is straightforward. When someone opens a report, Power BI runs queries against the underlying semantic model to fetch the numbers for each visual. Those queries take time, especially on a big model or a complex report. Query caching tells Power BI to keep the results of those queries in a cache so that the next person who opens the same report gets the cached results instead of re-running everything from scratch.

The classic case is the initial state of a report. When a report opens, before anyone touches a slicer, it loads in a default state, and that default state is the same for everyone. So the first person of the day triggers the queries, they get cached, and everyone after them gets the fast cached version. For a report that lots of people open to the same landing view, that is a large chunk of the load time gone.

It is a Premium feature, so it needs the right capacity behind it, and you switch it on per semantic model. That per-model control matters, because as we will get to, caching is right for some models and wrong for others, and you want to make that call deliberately rather than blanket-enabling it.

Where it is a clear win

The best-fit scenario is a report that a lot of people open to the same default view, backed by a model that refreshes on a schedule rather than in real time. Think a daily sales dashboard that refreshes overnight and gets opened by fifty regional managers each morning. Every one of them lands on the same default page. Without caching, that is fifty rounds of the same queries. With caching, the first open warms the cache and the other forty-nine load fast. The data is identical for all of them anyway because the model only refreshed once overnight, so there is no downside on freshness. That is caching doing exactly what it is good at.

Executive and leadership dashboards are often perfect candidates for the same reason. High-visibility, opened by many people, usually pointed at data that updates on a schedule. These are also precisely the reports where a slow load does the most reputational damage, so the payoff on caching them is bigger than the raw numbers suggest. Making the CEO's dashboard load instantly buys goodwill for the entire reporting programme.

We do a lot of this kind of tuning as part of our broader Power BI consulting work, and query caching is one item on a longer performance checklist. It is rarely the only fix, but for the right report it is one of the easier wins available.

Where it bites

Now the part people skip past, which is the part that causes the support tickets.

Caching serves you results as they were when the cache was populated, not as they are right now. For a model that refreshes overnight, that gap is invisible, because the data does not change during the day anyway. But for a model on frequent refresh, or DirectQuery hitting a live source, caching can hand people stale numbers while fresher data sits right there in the source. Someone opens the report expecting up-to-the-minute figures and gets a cached snapshot from earlier. In finance or operations, that is not a cosmetic problem. That is someone making a call on a number that has moved.

So the first rule we apply: match caching to refresh cadence. Scheduled daily or overnight refresh, caching is usually safe and helpful. Frequent intraday refresh or near-real-time expectations, be very careful, because the whole point of that model is freshness and caching works against it.

The second thing to watch is that caching only helps the states it has cached. The default view, yes. But the moment someone starts slicing and filtering into combinations the cache has never seen, those queries run live and get no benefit. So if your users spend most of their time deep in custom filter states rather than on the default view, the real-world speedup is smaller than the headline suggests. Caching accelerates the common landing view, not the long tail of ad-hoc exploration. Worth setting expectations on that before you promise the team everything will be instant.

And it is not a substitute for a well-built model. I have seen teams reach for caching to paper over a model that is slow because it is badly designed, with bloated tables, inefficient DAX, and relationships doing more work than they should. Caching hides that on the default view and does nothing for it everywhere else. If your report is slow because the model is a mess, fix the model. Caching on top of a good model is a nice optimisation. Caching on top of a bad one is lipstick. Sorting out the underlying model, the DAX, and the storage mode is usually where the real, durable performance gains live, and it is a lot of what we actually do on a performance engagement.

How we decide

The rough decision process we walk through with clients looks like this.

Start with how the model refreshes. Scheduled and infrequent, caching is on the table. Real-time or frequent, caching is probably off the table unless the freshness genuinely does not matter for that report, which is rarer than people assume.

Then look at how the report is used. Lots of people hitting the same default view, caching pays off. Small number of heavy users each living in their own custom filter states, the benefit is thin and you should look at other optimisations first.

Then check whether the slowness is actually a caching-shaped problem at all. Sometimes the fix is a better model, a switch from DirectQuery to import, aggregations, or just some DAX that is not doing something daft. Caching is one tool, and reaching for it before you have understood why the report is slow is how you end up with a fast-but-stale dashboard that causes a different problem than the one you started with.

And once it is on, keep an eye on it. Refresh patterns change, usage changes, and a caching decision that was right a year ago can quietly become wrong. This is the sort of ongoing tuning that a managed data and AI service is built for, so the reports stay fast and correct without someone having to remember to check.

The bottom line

Query caching in Power BI Premium is a genuinely useful feature for the right report, which means a high-traffic report on a scheduled-refresh model where lots of people open the same default view. In that situation it turns a sluggish, trust-eroding load into an instant one, and it is one of the easier wins in the performance toolkit.

But it trades freshness for speed, and if you apply it to a model where freshness matters, you have swapped a slow-dashboard complaint for a wrong-number complaint, which is a worse one to have. Match it to your refresh cadence, be clear-eyed that it only speeds up the states it caches, and never use it to hide a model that needs proper work.

If you have got dashboards that load like they are wading through treacle, or you are not sure whether caching is the right fix or a band-aid over a deeper problem, that is exactly the kind of thing we sort out. Take a look at our business AI and data services, or get in touch and we will help you work out where the real bottleneck is.