---
title: "3-Minute Win: Add a 'Last Refreshed' Timestamp to Any Power BI Report in 2 Minutes"
date: 2026-06-27T00:00:00Z
updated: 2026-06-27T11:12:49Z
tags: ["Power Query", "Power BI", "DAX"]
canonical: https://bianca.codes/blog/last-refreshed-timestamp-power-bi/
---

# 3-Minute Win: Add a 'Last Refreshed' Timestamp to Any Power BI Report in 2 Minutes

_The stakeholder emails asking whether the numbers are current stop the day you put the actual refresh time on the report - and a measure with NOW() is not how you do it._

Your stakeholders keep emailing to ask whether the numbers are current. You keep replying that yes, it refreshes at 7am every day. This tip ends that loop: a refresh timestamp sitting on the report, set up in about two minutes - and it captures the actual refresh moment, timezone and all.

## How to do it

1. On the Home tab, choose Transform data to open Power Query, then New Source \> Blank Query.
2. In the formula bar, enter the line below and press Enter. Rename the query Last Refreshed.

```fsharp
= #table({"Last Refreshed"}, {{DateTimeZone.FixedLocalNow()}})
```

1. Close & Apply.
2. Add a Card visual to the page and drop the Last Refreshed field into it. Set the format to date/time in Column tools if you want a friendlier display.

Every refresh restamps the value, and the card follows automatically.

## Why it works

Power Query runs at refresh time, not query time. `DateTimeZone.FixedLocalNow()` captures the exact moment the refresh executes and freezes it as stored data, so the card shows when the data last landed - not the current clock.

The Fixed part matters. Plain `DateTimeZone.LocalNow()` can be re-evaluated several times within a single refresh, so two timestamps in the same model might disagree by a few seconds. `FixedLocalNow()` evaluates once and hands back the same constant for the whole refresh. That is also why this beats a DAX measure built on NOW(): a measure re-evaluates every time someone opens or touches the report, so it always reads "now", never "last refreshed".

## When not to use it

The catch is where the refresh runs. In Power BI Desktop, `FixedLocalNow()` returns your machine's local time and looks perfect. Publish to the service and the scheduled refresh runs on Microsoft's infrastructure in UTC, so your local timestamp quietly shifts. If your audience is in Sydney, add the offset explicitly: `= DateTimeZone.SwitchZone(DateTimeZone.FixedUtcNow(), 10)` - or 11 during daylight saving, which is the part a hardcoded offset will eventually get wrong. For DirectQuery models, keep this helper table in import mode; there is no scheduled refresh to stamp otherwise.

For the data model this card sits on, see [the star schema series](/blog/star-schema-done-right-part-1-what-a-fact-table-actually-is-and-isnt/) that kicked off 4 June; the finished build lands 25 June.
