(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisbon
Incremental refresh in Power BI: updating only what changes in large models
Power BI

Incremental refresh in Power BI: updating only what changes in large models

Equipa bConcepts 03/06/2025 6 min

There is a moment in the life of almost every successful Power BI report when success turns against it. The report is useful, people use it, the data piles up — and one day the refresh, which used to be fast, starts taking an eternity. Reloading years of history every night becomes an unsustainable burden: hours of processing, a huge load on the source database, and the constant risk of the refresh failing for being too big. The good news is that Power BI has an answer designed for exactly this problem, and it is called incremental refresh.

The idea is so simple it seems obvious once you hear it: if the old data no longer changes, why do we reload it every night? Sales from three years ago are what they are — they are not going to change. And yet, Power BI's default behavior reloads everything, every time, from scratch. Incremental refresh fixes this waste, updating only the recent slice that still changes and leaving the stable history untouched. It is one of those features that separate those who make reports from those who build solutions that survive growth.

The full-refresh problem

When a report imports data, the normal behavior is to replace everything on each refresh. With little data, this is instant and nobody notices. But as the history grows — from months to years, from thousands to millions of rows — the refresh time grows with it, linearly and relentlessly. What started out taking two minutes ends up taking two hours, and that window starts to collide with the start of the workday or to exhaust the service's time limits.

Incremental refresh in Power BI: updating only what changes in large models

There is also a hidden cost on the source side. Each full refresh asks the operational database to return all the history again — precisely the database being used to run the business. Doing this every night over large volumes overloads the source system at the worst moment and turns the BI report into an unwelcome neighbor for the systems that feed it. A full refresh is not just slow; it is heavy for everyone.

The core idea: separate what changes from what no longer changes

Incremental refresh splits the data into two zones. There is a historical zone, older, already stable and needing no touching — last year's sales, for example. And there is a recent zone, from the last days or weeks, where data can still arrive or be corrected. On each refresh, Power BI reloads only the recent zone and leaves the historical one exactly as it was. Since the recent zone is a tiny fraction of the total, the refresh goes from hours to minutes.

Underneath, Power BI implements this by partitioning the table by time periods. Each partition — each month, for example — is loaded once and then frozen; only the most recent partitions are reprocessed. The end user sees none of this: they still see the full report, with all the history. The difference is all behind the scenes, in the amount of work the refresh avoids doing needlessly.

What it takes to configure it

  • A reliable date column: incremental refresh needs to know which period each row belongs to, so it requires a date column you can trust.
  • Dynamic range filters: you define two parameters that mark how much history to keep and which recent window to reprocess on each refresh.
  • A source that accepts filtering at the entrance: for the gain to be real, the source must be able to return only the requested period, instead of everything — otherwise little is saved.

The gain goes beyond speed

The obvious benefit is refresh time, which drops drastically. But there are gains that add to it. The load on the source database drops in the same proportion, relieving the operational systems. Refreshes become more reliable, because a small job is far less likely to fail by hitting time or memory limits than a giant one. And the model can, in practice, keep far more history than would be viable with full refresh, because the cost of keeping it stops growing out of control.

A concrete case

A company had a central sales report with about three years of history, and the daily refresh ran overnight. At first, when the history was a few months, everything ran in minutes. But over two years the data accumulated to tens of millions of rows, and the refresh stretched to more than two hours — to the point that, on some days, it was still running when the sales team already wanted to open the report in the morning, finding incomplete data. The source database, in turn, suffered from the weight of returning all the history every night. The solution required no more hardware nor a new tool: they configured incremental refresh, keeping three years of history but reprocessing only the last ten days on each refresh, which was the window in which data could still change. The refresh time dropped from over two hours to a few minutes, the load on the source almost disappeared, and the data was always ready well before the start of the day. A problem that threatened to make the report unusable was solved with a well-thought-out configuration.

When it is not needed

Like almost everything, incremental refresh is an answer to a specific problem, not a dogma. If your model has few rows and refreshes in seconds, configuring it is adding complexity with no return — the simple full refresh is easier to maintain and the gain would be imperceptible. It comes into play when the history is large, the refresh starts to hurt, and the source suffers from full reloads. Applying it without that need is solving a problem you do not yet have.

In practice

If your most important report's refresh is stretching night after night, or if you are afraid to add more history for fear of making it impossible, incremental refresh is probably the answer you have not yet configured. Start by identifying the large fact tables with a good date column — they are the natural candidates. A few adjustments turn an unsustainable refresh into a fast and reliable one. Is your report reloading years of data that no longer change, every night, needlessly?

← Back to insights
Let's talk?

Ready to transform your data?

Book a free 30-minute meeting and find out how we can help your team make better decisions.

Book a Free Meeting
bConcepts