What it does
Scheduled refresh is the Power BI service re-running a semantic model's queries at times you choose, using stored credentials and, where needed, a gateway. It's configured per model under Refresh > Schedule refresh in the workspace.
Key facts
- Refresh frequency caps by licence: Power BI Pro allows up to 8 scheduled refreshes a day; PPU and Premium or Fabric capacity (F SKU, EM, P) allow up to 48. On-demand and API refreshes don't extend the schedule but do count toward resource usage.
- Timing is best-effort. Microsoft targets starting within 15 minutes of the slot, refresh can begin up to five minutes early, and a delay of up to an hour is possible if the service can't allocate resources.
- Power BI deactivates the refresh schedule after four consecutive failures, or immediately on an unrecoverable error such as expired credentials. The threshold isn't configurable.
- After two months of inactivity — no user opening any report or dashboard built on the model — scheduled refresh is paused, the owner is emailed, and the schedule shows as Disabled.
- With a standard on-premises gateway, credentials belong to the data source as configured by the gateway admin, so the model owner doesn't supply them. With personal mode, the owner does.
- Refresh history (Refresh > Refresh history) gives status, start time, duration and error message per attempt. That's your first stop, always.
- There's no built-in monthly refresh interval. Microsoft points at Power Automate for that, or at Fabric Data Pipelines with refresh templates if the client has Fabric.
- For on-premises SharePoint sources, refresh supports Anonymous, Basic and Windows (NTLM/Kerberos) only — not ADFS or forms-based authentication.
When to use / skip
Every Import model needs a refresh schedule, so the question is cadence, not whether. Start from what the business decision actually needs rather than what they ask for: a daily overnight refresh covers most reporting, and each extra slot costs source load and capacity. DirectQuery and live-connection models mostly don't need it, though the service may still process metadata such as role security changes. Where someone insists on eight refreshes a day on Pro, check whether they need fresher data or just faster answers to a support question — usually the latter.
Configuration decisions
- Cadence and time slots, set against the source system's own load profile and the client's time zone.
- Which account owns the model and therefore the schedule, and what happens when that person leaves.
- Whether the refresh path runs through a standard gateway (credentials centrally held) or personal mode (they aren't).
- Whether refresh failure emails go to the owner only or to a monitored distribution group.
- Whether refresh needs orchestrating rather than scheduling — dataflow first, then model, with dependencies — which pushes you toward Fabric pipelines.
- Whether the model gets incremental refresh so the nightly window stays viable as history grows.
Gotchas
- Four consecutive failures disables the schedule silently as far as most users are concerned. Nobody notices until a Monday morning meeting looks at Thursday's data.
- The two-month inactivity pause catches seasonal and year-end reports. They stop refreshing exactly while nobody's looking, then get opened stale.
- Refresh failure notifications default to the model owner. If that's the consultant who built it, the client hears nothing after handover.
- Peak memory during refresh is higher than the model's resting size, so capacity that's comfortable during the day can fail overnight when several models refresh at once.
- Scheduling eight models at 06:00 doesn't run eight refreshes at 06:00 — they queue, and the last one may start an hour later than you planned.
Consultant notes
- Change the refresh failure contact to a group address before handover, and confirm someone actually reads it. This is the single most common post-go-live gap.
- Stagger start times across models rather than lining them all up on the hour. It costs nothing and removes a whole class of intermittent failure.
- Give the client a one-page runbook: how to read refresh history, how to re-enter credentials, how to re-enable a disabled schedule, and when to escalate.
- If they're asking for near-real-time, price the alternatives honestly — DirectQuery, hybrid tables or Direct Lake — rather than stacking 48 refreshes and hoping.
Revisit if the per-licence refresh caps change, or once the client's overnight window starts running past the working day.