MetricSign
Start free
Best Practices8 min·

Power BI Missing Refresh Detection: Catch Silent Failures Before Users Do

A failed refresh produces an error. A missing refresh produces silence. Power BI's built-in alerting catches the first. It does not catch the second.

The failure Power BI doesn't log

Refresh failures are easy to detect. The platform runs the refresh, the process fails, and Power BI records the failure in the refresh history. If you've configured email notifications, the dataset owner gets an alert. The mechanism is imperfect — alerts route to one inbox, there's no escalation path, and 14 datasets failing for the same upstream reason each generate a separate email — but the underlying event is at least visible.

Missing refreshes are different. Nothing fails. The scheduled refresh simply does not run. This happens when:

  • A Premium or Fabric capacity hits its memory ceiling and defers scheduled refreshes that can't be processed before the next maintenance window
  • A gateway cluster goes offline before the refresh starts, but recovers before Power BI registers a failure
  • The data source returns an empty resultset on one cycle because an upstream pipeline ran late — the refresh runs successfully on stale data
  • A scheduled refresh is silently disabled by Power BI after four consecutive failures, then never re-enabled
  • Someone changes the refresh schedule and the new timing no longer covers the business window

In every case, the dataset's last refresh history entry shows success. The refresh status indicator shows green. Nobody is alerted. Users open a report and see numbers that stopped moving 18 hours ago.

74% of data quality issues are discovered by business stakeholders rather than the data team, according to Monte Carlo's 2023 State of Data Quality report (n=250). Missing refreshes are disproportionately represented in that statistic — they produce no error signal, so they go unnoticed until someone downstream notices something is wrong.

Why Power BI cannot detect its own missing refreshes

Power BI's monitoring is event-based. It records what happened: a refresh started, a refresh completed, a refresh failed. It does not record what did not happen.

To detect a missing refresh, you need schedule-learning logic: a system that knows a refresh was supposed to run at 06:00, checks at 07:00 whether it ran, and fires an alert if it didn't. Power BI's scheduler knows the configured schedule, but it does not expose an API or alerting hook for 'scheduled event did not fire within expected window.'

The closest native option is the Fabric Monitoring Hub, which shows recent activity across all semantic models in a workspace. But it shows you what ran — not what should have run and didn't. To identify a missing refresh from the Monitoring Hub, you would need to cross-reference the configured schedule against the activity feed manually, across every dataset, on a recurring basis.

The Azure Monitor integration through Premium diagnostic logs captures the same event stream — refresh started, refresh completed, refresh failed. The same gap applies: a non-event produces no log entry.

This is a structural limitation of event-based logging. You cannot log the absence of an event.

How schedule learning works

Dedicated monitoring tools solve this by inverting the logic. Instead of waiting for a failure event, they learn the expected refresh schedule for each dataset and monitor for its absence.

The approach works in two phases:

Phase 1 — Schedule learning. The tool ingests the configured refresh schedule for each dataset (available from the Power BI REST API) and validates it against observed refresh history. If a dataset is configured to refresh at 06:00 daily and the last 14 days show it consistently refreshing between 06:00 and 06:12, the tool learns that 06:12 is the expected completion boundary.

Phase 2 — Absence detection. At the expected completion time, the tool checks whether a refresh has run. If no refresh appears in the activity feed within the learned window plus a configurable buffer (typically 30 to 120 minutes), an alert fires: 'FinancialsDashboard was expected to refresh by 06:12. No refresh has been recorded. Last successful refresh: 8h ago.'

This alert fires whether the cause is a capacity deferral, a gateway timeout before start, an upstream pipeline running late, or any other mechanism that prevents the refresh from beginning. The tool does not need to know the cause — it only needs to know the expected outcome and compare it against reality.

For datasets on Fabric or Premium Per User workspaces, the tool can supplement this with row count monitoring: if the refresh ran but the row count in a key table did not increase within the expected range, the refresh succeeded against stale or incomplete source data.

What to look for in a monitoring tool

Three capabilities separate tools that genuinely solve missing refresh detection from those that handle only active failures.

Schedule inference, not just schedule mirroring. The tool should learn the actual refresh cadence from observation, not just copy the configured schedule. A dataset scheduled to refresh at 06:00 but consistently delayed to 06:45 by capacity contention should have its alert window calibrated to observed reality, not the scheduled time. Tools that trigger alerts based purely on the configured time generate false positives.

Upstream pipeline awareness. A missing refresh at 06:00 often has a cause that runs at 04:00 — a Snowflake query that timed out, an ADF pipeline that hit a concurrency limit, a dbt model that failed its tests. A tool that monitors only Power BI sees the absent refresh but cannot identify the cause. A tool that monitors the full pipeline stack surfaces the upstream failure as the root cause, reducing investigation time from hours to minutes.

Configurable lateness thresholds. Not all datasets have the same SLA. A real-time trading dashboard needs a 15-minute lateness threshold. A weekly management report can tolerate a 4-hour window. The monitoring tool should let you configure thresholds per dataset, not enforce a single platform-wide setting.

For teams running Power BI alongside upstream pipeline tools — ADF, Snowflake, dbt, or Databricks — the upstream visibility matters most. A missing Power BI refresh that traces back to a Snowflake query timeout is resolved at the Snowflake layer, not the Power BI layer. Knowing which layer to look at is the difference between a 5-minute fix and a 2-hour investigation.

MetricSign and SummitView: how they approach missing refresh detection

Both MetricSign and SummitView offer missing refresh detection as a core feature.

SummitView implements a dedicated Missing Refreshes module with schedule learning and configurable lateness thresholds. The default alert window is 2 hours past the expected refresh time. Alerts route to Email, Slack, Teams, or Webhook. The tool is Power BI-only, so the missing refresh alert shows the dataset and the expected schedule — but not the upstream pipeline cause.

MetricSign adds upstream pipeline context. When a Power BI dataset fails to refresh, MetricSign checks whether an upstream ADF pipeline, Snowflake query, dbt model run, or Fabric Pipeline produced an error in the same window. If it did, the missing refresh incident links directly to the upstream failure. The dataset alert and the pipeline failure appear as a single incident with the root cause identified — not as two separate notifications from two separate systems.

For teams running Power BI on a flat source (SQL Server, SharePoint, Excel), both tools solve the problem equivalently. For teams where Power BI is the last hop in a multi-tool pipeline, the upstream linkage in MetricSign reduces investigation time significantly.

Alerts in MetricSign route to Email, Telegram, and Webhook. Alerts in SummitView route to Email, Slack, Teams, and Webhook.

Frequently asked questions

What is a missing refresh in Power BI?+
A missing refresh is a scheduled Power BI dataset refresh that does not run within its expected time window. Unlike a refresh failure, which produces an error in the refresh history, a missing refresh produces no log entry — the dataset simply does not update. Common causes include capacity deferral, gateway offline before refresh start, upstream pipeline delays, or a schedule that was silently disabled after repeated failures.
Does Power BI alert you when a scheduled refresh doesn't run?+
No. Power BI's built-in notifications fire when a refresh fails, not when a scheduled refresh never starts. If a refresh is deferred by capacity contention or blocked by an upstream pipeline issue before it begins, no native alert fires. The Fabric Monitoring Hub shows recent activity but requires manual cross-referencing to identify missing refreshes.
How does missing refresh detection work?+
Dedicated monitoring tools learn the expected refresh schedule for each dataset by combining the configured schedule with observed refresh history. When the expected refresh window passes without a completed refresh appearing, the tool fires an alert. The lateness threshold — how long past the expected time before alerting — is typically configurable per dataset.
What causes a Power BI scheduled refresh to not run?+
The most common causes are: Premium or Fabric capacity hitting its memory ceiling and deferring refreshes; a gateway cluster going offline before the refresh starts; an upstream data pipeline running late and delaying the source data; a refresh schedule silently disabled by Power BI after four consecutive failures; or a recently changed refresh schedule that no longer aligns with the business window.
Can I detect missing refreshes with Azure Monitor?+
Not directly. Azure Monitor logs Power BI activity events that occur — refresh started, refresh completed, refresh failed. It cannot log the absence of an event. To detect a missing refresh using Azure Monitor, you would need a custom Logic App or Azure Function that polls the refresh history on a schedule, compares it against the configured schedule, and fires an alert when no recent activity is found. This is buildable but requires ongoing maintenance.
Which monitoring tools detect missing Power BI refreshes?+
SummitView and MetricSign both offer schedule-learning missing refresh detection with configurable lateness thresholds. MetricSign adds upstream pipeline linkage — when a missing refresh traces back to an ADF pipeline, Snowflake query, or dbt model failure, the incident shows the upstream cause rather than just the absent Power BI refresh. Both offer 14 to 45-day free trials.

Related integrations

Related articles