At 3 pm, a support lead sees zero chats and $0 AI spend, labelled Quiet day and On track. The chat cache stopped syncing yesterday and billing failed. An Updated just now badge repeats a string from the morning build, so the page hides both failures.
Keep unknown separate from zero and make stale data visible. Show which period a figure covers before a reader or AI insight recommends an action.
These Northwind Traders dashboards use example data.
❌ Figure: Bad example - Missing feeds look like lower activity and money saved
Show zero only when a successful query over a complete, defined period returns zero. A failed request or incomplete feed shows Unavailable or Unknown, with the reason. A null value represents unknown information; converting it to zero changes the claim. The database rule on meaningful NULL versus zero covers storage semantics; this rule covers what the dashboard displays.
Keep the last good value with its coverage date, clearly separate from the current result. Northwind shows Cost unavailable, then Last good: $3,374 through 13 October. That cannot establish today's budget pace. AI commentary must retain the gap instead of declaring savings.
For charts, hatch or break the unknown interval and label it; don't draw it at zero. Include partially synced hours in that interval.
Track three timestamps:
A fresh pull of an old cache does not extend coverage. A failed pull does not overwrite its last-success timestamp. Where feeds update independently, show their individual dates and explain any harmless difference.
At 15 October 15:10 AEST, Northwind's chat cache is about 21 hours behind. Its last successful cache sync is 14 October 18:02 and complete hourly data ends at 18:00. The 08:10 build pulls from that same cache, so its fresh pull time does not extend coverage. The 1,082 chats through 18:00 yesterday remain a last-known count; today's count is unknown.
✅ Figure: Good example - Coverage dates reveal the stale cache even though the dashboard pulled it this morning
Store the build timestamp and compare it with the current time when the page opens. Use a consistent time zone. Where a wrong client clock could hide a stale result, obtain the current time from the server when the page opens. A build-time Just now string cannot reveal a stopped scheduler.
Choose age limits per source and decision. Northwind rebuilds hourly and warns after two hours: at 15:10, its 08:10 build says Stale: last built seven hours ago and directs the reader to check the scheduler. Source-freshness checks can also monitor feed age independently of the page.
Alert the owner when a feed fails, and verify recovery extends the coverage date before clearing the warning. Traceable dashboard tiles keep these dates attached to the figures.