How to show data freshness on a dashboard
- Section
- Resources, Definitions
- Sources
- 10 linked below
- Words
- 1,609
- Checked
- Oct 17, 2026
Short answer
Data freshness is how recent the newest data behind a number is, shown as the date the data runs through. A last-refreshed time only says when a tool reread its source. Put a data-through date on every number, label partial periods, and flag a number as stale when its data is older than its normal cadence allows.
The dashboard says "Last refreshed today, 8:00 AM." Your reader assumes the numbers include last week. They stop on October 4, because nobody pasted the October 12 export, and the dashboard has been rereading the same rows all week.
A refresh time tells you the tool is running. It doesn't tell you how old the data is. Here's how to show the difference on every number, handle partial periods, decide when data is stale, and word it.
What is data freshness, and how is it different from "last refreshed"?
Data freshness is how recent the newest data behind a number is. You read it from the data itself: the latest date in the rows the number uses, compared with today. If the latest order is dated October 11 and today is October 17, 2026, the data runs through October 11 and is 6 days old.
Last refreshed is when a tool last reread its source. Data Studio (formerly Looker Studio) shows the time and date of the last data refresh in the bottom-left corner of a report, and its Google Sheets data sources have a default freshness of 15 minutes. Power BI allows up to 8 scheduled refreshes a day on Pro and 48 on Premium and Fabric capacities. Inside Google Sheets, IMPORTRANGE recalculates every 30 minutes.
These are 2 different clocks. A refresh rereads whatever is in the source. If the source hasn't changed, an 8:00 AM refresh brings back the same rows as the 7:45 one. Power BI's docs say it plainly for imported data: visuals show only what was imported at the last refresh. Refreshes can also stop. Power BI pauses scheduled refresh after 2 months with no visits to the reports, and turns the schedule off after 4 failures in a row.
The UK government's Data Quality Framework calls this dimension timeliness: data should be "an accurate reflection of the period that they represent" and up to date. Both halves matter on a dashboard. Does the number cover the whole period it claims? Is the data as recent as it should be?
How do you show the date the data runs through?
Put it on every number, not once in the footer. Numbers on one dashboard often come from exports that end on different days. Say orders run through October 16 and support tickets through October 14. A single "Updated October 17" hides that tickets are 2 days behind.
Read the date from the data, not from the file name or the email it came in. In a spreadsheet, =MAX(Orders!A:A) on the date column returns the latest date, and MAX skips cells without numbers, such as the header. Use the date that defines the metric (order date for orders), not the date the export was created. Our weekly KPI guide shows the full spreadsheet setup.
If a number combines 2 sources, show the earlier of the 2 dates. That's the date the whole number is good through.
How should you handle partial periods?
A partial period is one whose data stops before the period ends. Say your September export runs through September 28, because the last 2 days haven't been entered yet. September revenue shows $12,480. August, a full month, was $12,900, so the dashboard says September is down 3.3%. Compare the same 28 days, though: August 1 to 28 was $11,530, so September is up 8.2%.
You have 3 honest options:
- Label it. "September to date, through Sep 28." Never just "September."
- Compare like with like. September 1 to 28 against August 1 to 28, not against all of August.
- Wait for it to close. If the decision can wait, show August as the latest full month and September as in progress.
Weeks work the same way. On a Thursday, the current week holds 3 days of data. Show it as "Week 42 so far (Mon to Wed)" or leave it off the trend chart, because a partial last bar looks like a drop.
When is data stale?
Data is stale when it's older than its normal cadence allows. Set the rule per source, from when new data is supposed to arrive:
- Cadence. How often new data lands. For example, an export every Monday morning that runs through Sunday.
- Normal age. For that export, data is 1 day old on Monday and 8 days old just before the next one lands.
- Grace. Slack for a late export, say 1 day.
- Rule. Stale when the data is more than 9 days old: 8 days of normal age plus 1 of grace.
On Saturday, October 17, 2026, data through October 11 is 6 days old, so it's current. Data through October 4 is 13 days old: stale, because the October 12 export never arrived. In a sheet, =TODAY()-MAX(Orders!A:A) gives the age in days. Flag the number when it passes 9.
Data teams use the same pattern. dbt checks a source by querying its newest timestamp alongside the current time in UTC, then compares the age with 2 thresholds, warn_after and error_after (12 and 24 hours in its docs' example). You can copy that: warn when one delivery is late, and replace the number with the flag when 2 are.
What counts as stale also depends on the decision. The UK's Government Data Quality Hub notes that timeliness means different things for different uses: bed allocation in a hospital needs the most up-to-date data, while past quarterly figures can be fine for forecasting care needs. A weekly staffing decision doesn't need hourly data, but it does need last week's.
Which time zone should the date be in?
Pick one time zone for your reporting day, convert timestamps to it before you group by date, and name it next to the cutoff when it matters.
Time zones move rows across days, and at month end, across months. RFC 3339, the standard for internet timestamps, gives the example 1996-12-19T16:39:57-08:00: 4:39 PM Pacific Standard Time, which is 1996-12-20T00:39:57Z in UTC, already the next day. If that were an order placed on the last day of a month, a system that groups by UTC dates would book it in the next month.
Refresh times have the same problem. Power BI bases scheduled refresh times on the time zone chosen in the semantic model's settings, and a Google Sheets file has its own time zone under File > Settings. "Refreshed at 8:00" means little until you know whose 8:00.
So write "Data through Oct 16, 11:59 PM ET" when the cutoff time matters. When it doesn't, write "Data through Oct 16" and state the time zone once on the dashboard.
What should you write next to a number?
Use the same short pattern on every number: the period, the data-through date, and a flag only when something is off.
| Situation | What to show | Example wording |
|---|---|---|
| Complete period | Period and data-through date | September revenue · Data through Sep 30 |
| Partial period | "To date" and the end date | September to date · Through Sep 28 |
| Partial vs full period | The same days in both | Sep 1 to 28 vs Aug 1 to 28: +8.2% |
| Sources end on different days | A date on each number | Orders through Oct 16 · Tickets through Oct 14 |
| Older than the rule allows | Stale flag and age | Stale: data through Oct 4 (13 days old) |
| Cutoff time matters | Time and time zone | Data through Oct 16, 11:59 PM ET |
| You show a refresh time | Both, labeled | Data through Oct 16 · Refreshed Oct 17, 8:00 AM ET |
Keep a refresh time if your readers want one, but never let it stand in for the data-through date.
Where Every Number fits
Every number on an Every Number dashboard carries the date its data runs through, as part of its receipt. In the $99 concierge pilot, a person builds the dashboard from the spreadsheet you send, and each number shows its definition, filters, rows used, rows left out, source, and data-through date. Freshness flags are planned after launch. Anatomy of a receipt walks through the parts, and how it works shows the rules.
The pilot is a snapshot built from one spreadsheet, not a live feed. If you need minute-by-minute monitoring, a BI tool connected directly to your systems is the better fit.
Frequently asked questions
Is "last updated" the same as data freshness?
No. "Last updated" or "last refreshed" is when a tool last read its source. Data freshness is how recent the data in that source is. A dashboard can refresh every 15 minutes and still show numbers that stop 2 weeks ago.
How often should a dashboard refresh?
As often as the source changes and the decision needs. A weekly report built from a Monday export gains nothing from refreshing every 15 minutes, because a refresh can't make data fresher than its source.
What if numbers on one dashboard end on different dates?
Show each number's own date. For a number that combines sources, use the earliest. If the gap matters to the decision, say so at the top: "Tickets are 2 days behind orders."
Should I hide a stale number?
Usually not. Show it with the flag and its date so readers can judge whether it's still good enough. Once it's old enough to mislead, replace the value with the flag and the last good date.
Should "data through" use the export date or the latest row?
The latest row, using the date column that defines the metric. An export created on October 17 can still stop on October 11. If 2 dashboards still disagree, see why dashboard numbers don't match.
Sources
- Manage data freshness — Data Studio, Google Cloud Documentation. Checked October 17, 2026.
- Data refresh in Power BI — Microsoft Learn. Checked October 17, 2026.
- Configure scheduled refresh — Microsoft Learn. Checked October 17, 2026.
- Set a spreadsheet's location & calculation settings — Google Docs Editors Help. Checked October 17, 2026.
- MAX — Google Docs Editors Help. Checked October 17, 2026.
- TODAY — Google Docs Editors Help. Checked October 17, 2026.
- freshness — dbt Developer Hub. Checked October 17, 2026.
- The Government Data Quality Framework — Government Data Quality Hub, GOV.UK. Checked October 17, 2026.
- Meet the data quality dimensions — Government Data Quality Hub, GOV.UK. Checked October 17, 2026.
- RFC 3339: Date and Time on the Internet: Timestamps — IETF, RFC Editor. Checked October 17, 2026.