## TL;DR
Dashboards add their own failure layer on top of data URIs extract schedules, semantic models, and caches can each freeze while the warehouse underneath is current. Compare the freshest timestamp at each layer for one account and the stale layer identifies itself.

```text
customer health dashboard showing stale data URIs refresh stuck
```

## Use this when
- The dashboard shows an old as-of date while source apps look current
- Some tiles refresh and others do not
- A dashboard, model, or extract change shipped recently

## Not for this skill when
- The warehouse itself is stale, making this a pipeline incident
- One user's browser cache is the whole problem and other viewers see fresh data

## Steps
1. Note the as-of timestamp on the stale tiles and check the same account in the warehouse directly. Verify: the gap is confirmed as dashboard-layer or data-layer
2. Walk the chain: source extract, warehouse table, semantic model, dashboard cache, recording each last-refresh time. Verify: the first stale layer is found
3. Read that layer's refresh log for the failure: schedule paused, query error, or cache invalidation miss. Verify: the concrete refresh failure is named
4. Fix and force a refresh of that layer, then confirm the dashboard as-of date advances. Verify: tiles show current data with a current timestamp
5. Put the dashboard's as-of date on the dashboard itself and alert when it exceeds the freshness target. Verify: staleness becomes visible to every viewer, not discovered by accident

## Variant phrasings
### health dashboard showing old data
A related phrasing for the same underlying problem.
### dashboard refresh stuck
A related phrasing for the same underlying problem.
### tiles stale but warehouse current
A related phrasing for the same underlying problem.

Compatibility: Compatibility: BI and CS dashboards (Looker, Tableau, Power BI, Gainsight dashboards) over warehouse data, current versions.

## Why it happens
A dashboard is a pipeline with a screen. Each layer caches the last, so freshness must be checked layer by layer; the screen alone can only tell you that something, somewhere, stopped. Timestamp comparison is the whole technique.

## Edge cases / pitfalls
- Extracts often fail on one table (a renamed column) while others succeed, giving the mixed-tile symptom. Treat mixed freshness as a per-table problem.
- Forcing a refresh can mask a broken schedule. Verify the next automatic refresh also succeeds.
- Viewer-level filters can make one CSM's view stale by segment. Reproduce with the same filters before escalating.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_J5RIVlqpIkrUCHnB8X0O0g
