MetricSign
EN|NLRequest Access
Low severitydata quality

Power BI Refresh Error:
Source Freshness: warn threshold exceeded

What does this error mean?

dbt's source freshness check determined that a source table has not been updated within the configured warn_after window but has not yet reached the error_after threshold. The job exits with a warning state — not a failure — but the source data is older than expected.

Common causes

  • 1The upstream pipeline (Fivetran, ADF, Airbyte) ran late and loaded data outside the warn_after window
  • 2The `warn_after` threshold is set too tightly relative to the actual data arrival pattern of the source
  • 3The source system had a brief outage or delay that pushed the latest load timestamp past the warn window
  • 4The `loaded_at_field` column reflects event time rather than load time, causing an apparent freshness lag
  • 5Timezone differences between the source data timestamps and the warehouse cause freshness to appear worse than it is

How to fix it

  1. 1Query the source table directly to confirm the actual latest timestamp: `SELECT MAX(<loaded_at_field>) FROM <source_schema>.<table_name>`.
  2. 2Check the upstream pipeline run history to determine whether the load actually ran late or whether the `loaded_at_field` is the wrong column.
  3. 3Adjust the `warn_after` threshold in sources.yml to better reflect the SLA of the upstream pipeline, with sufficient buffer for normal variance.
  4. 4If the freshness lag is consistent and expected, increase `warn_after` to avoid alert fatigue while keeping `error_after` tight enough to catch real outages.
  5. 5Verify the `loaded_at_field` is the warehouse load timestamp, not the source system event timestamp.

Frequently asked questions

Does a freshness warning stop my dbt models from running?

No — freshness warnings do not block model execution. The job continues running. Only `error` state freshness blocks models if you configure the job to do so.

What is the difference between warn_after and error_after?

`warn_after` sets the threshold for a yellow warning state. `error_after` sets the threshold for a red error state that fails the job. Use both to create a graduated alert system — warn early, error late.

Other data quality errors