Domain 3 β€” Module 8 of 8 100%
29 of 29 overall
Domain 3: Implement and Manage Semantic Models Free ⏱ ~12 min read

Incremental Refresh

Stop refreshing entire datasets. Incremental refresh loads only new and changed data β€” essential for large semantic models with billions of rows.

Why incremental refresh?

Simple explanation

Think of restocking shelves in a supermarket.

Without incremental refresh, you empty the entire shelf every night and restock everything from scratch β€” even items that have not changed. With incremental refresh, you only restock the new items and replace the expired ones. The shelf (your model) stays current with a fraction of the effort.

For a 5-year sales dataset with 2 billion rows, full refresh processes ALL 2 billion rows every time. Incremental refresh processes only the last few days β€” maybe 10 million rows. The refresh goes from 3 hours to 5 minutes.

How incremental refresh works

The partition model

Incremental refresh divides your table into date-based partitions:

fact_sales (5 years of data)
β”œβ”€β”€ 2022-Q1 (historical β€” never refreshed)
β”œβ”€β”€ 2022-Q2 (historical)
β”œβ”€β”€ ...
β”œβ”€β”€ 2026-Q1 (historical)
β”œβ”€β”€ 2026-04-01 to 2026-04-15 (refresh window β€” refreshed daily)
β”œβ”€β”€ 2026-04-16 to 2026-04-21 (refresh window β€” refreshed daily)
└── [future partition β€” for real-time data if enabled]

Refresh behavior

Partition TypeWhen RefreshedExample
HistoricalNever (unless manually triggered)Data older than the refresh window
Refresh windowEvery scheduled refreshLast 10 days of data
Real-time (optional)On every query (using DirectQuery)Current day’s data

Setting up incremental refresh

Step 1: Create parameters

In Power BI Desktop, create two DateTime parameters:

  • RangeStart β€” the start of the date filter
  • RangeEnd β€” the end of the date filter

Step 2: Filter the source query

In Power Query, filter your date column between RangeStart and RangeEnd:

= Table.SelectRows(Source, each [OrderDate] >= RangeStart and [OrderDate] < RangeEnd)

Step 3: Configure the refresh policy

In Power BI Desktop, right-click the table β†’ Incremental refresh and real-time data:

SettingWhat It ControlsExample
Archive data startingHow far back to keep data5 years
Incrementally refresh data startingThe refresh window10 days
Get the latest data in real time (optional)Adds a DirectQuery partition for current dataEnabled for near-real-time
Only refresh complete periodsPrevents partial day data from being cachedRecommended for daily grain
Detect data changesRe-refresh historical partitions when source data changesBased on a date/timestamp column

Step 4: Publish to the service

When published, Power BI creates the partitions automatically. The first refresh is a full refresh (loads all historical data). Subsequent refreshes only process the refresh window.

Exam tip: RangeStart and RangeEnd

The exam tests your understanding of the parameters:

  • Parameters must be named exactly RangeStart and RangeEnd (case-sensitive)
  • They must be of type DateTime
  • They are used in the Power Query filter β€” NOT in DAX
  • In Desktop, they are set to test values (e.g., last 30 days). In the service, Power BI overrides them with the actual partition ranges.
  • The filter must use >= for RangeStart and < for RangeEnd (not <=)

Incremental refresh with real-time data

When you enable β€œGet the latest data in real time”, Power BI adds a DirectQuery partition for the current (incomplete) period:

fact_sales
β”œβ”€β”€ 2022 to 2026-04-10 (Import partitions β€” fast)
β”œβ”€β”€ 2026-04-11 to 2026-04-20 (Import β€” refreshed daily)
└── 2026-04-21 (DirectQuery β€” always live)

This hybrid approach gives you historical performance (Import) with current-day freshness (DirectQuery). The DirectQuery partition is small (one day) so queries are fast.

Scenario: Dr. Sarah's patient data refresh

Dr. Sarah at Pacific Health has 3 years of patient outcome data (50 million rows). A full refresh takes 2 hours and puts heavy load on the hospital’s database.

She configures incremental refresh:

  • Archive: 3 years
  • Refresh window: 7 days
  • Real-time: Enabled (today’s admissions are always current)
  • Detect data changes: Enabled (corrections to historical records trigger re-refresh)

Result: daily refresh takes 4 minutes instead of 2 hours. The hospital database handles 7 days of queries instead of 3 years.

Incremental refresh and Direct Lake

In Direct Lake mode, incremental refresh behaves differently from Import mode:

AspectImport Incremental RefreshDirect Lake
PartitionsCreated by Power BIN/A β€” reads Delta log
Historical dataLoaded once, cached in VertiPaqRead from OneLake on demand
Refresh windowRe-imports recent dataRe-frames from Delta tables
Real-time partitionDirectQuery to sourceReads latest Delta version
BenefitReduces refresh time and memoryMinimal β€” Direct Lake already avoids full refresh

Key insight: Incremental refresh is most valuable for Import mode, where it prevents expensive full refreshes. Direct Lake already reads data on demand, so the benefit is smaller β€” but incremental refresh with large format is still useful for managing very large models.

Question

What is incremental refresh?

Click or press Enter to reveal answer

Answer

A refresh strategy that divides a table into date-based partitions. Historical partitions are loaded once and never refreshed. Recent partitions (the refresh window) are refreshed on each cycle. Reduces refresh time from hours to minutes for large datasets.

Click to flip back

Question

What are RangeStart and RangeEnd?

Click or press Enter to reveal answer

Answer

Two DateTime parameters (case-sensitive names) used in the Power Query source filter. RangeStart is the start of the date range (>=), RangeEnd is the end (<). Power BI overrides these values in the service to match each partition's date range.

Click to flip back

Question

What does 'Get the latest data in real time' do?

Click or press Enter to reveal answer

Answer

Adds a DirectQuery partition for the current (incomplete) period. Historical and recent data stays as Import (fast). Today's data is queried live via DirectQuery (always current). The DirectQuery partition is small, so the performance impact is minimal.

Click to flip back

Knowledge Check

Dr. Sarah at Pacific Health has a 50-million-row semantic model with 3 years of data. Full refresh takes 2 hours. She wants to reduce refresh time while keeping data current. Which approach is best?

Knowledge Check

An exam question states: 'You configure incremental refresh with RangeStart and RangeEnd parameters. The filter in Power Query uses OrderDate >= RangeStart AND OrderDate <= RangeEnd.' Is this correct?


This completes Domain 3. Head back to Domain 1: Maintain a Data Analytics Solution for security, governance, and lifecycle management.