How to Get Data Refresh Date in Power BI

Cody Schneider8 min read

Ever publish a Power BI report and immediately get a message from a colleague asking, “Is this data from today?” Providing a clear, visible timestamp for the last data refresh is a small detail that makes a huge difference in user trust. This tutorial will walk you through the best methods to display the last refresh date and time in your Power BI reports, adding an essential layer of transparency for your end-users.

GraphedGraphed

Still Building Reports Manually?

Watch how growth teams are getting answers in seconds — not days.

Watch Graphed demo video

Why You Should Always Display the Data Refresh Date

Before jumping into the “how,” it’s worth understanding the “why.” Adding a last refresh date isn’t just about aesthetics, it’s a critical feature for any report that informs decisions. Here’s why it matters:

  • Builds User Trust: It instantly answers the most common question about any report: "Is this information current?" When users see a recent timestamp, they have more confidence in the data they are using to make decisions.
  • Aids in Troubleshooting: If a user notices that a number looks off, the first thing they can check is the refresh date. This simple timestamp can help differentiate between a genuine data issue and conclusions drawn from outdated information.
  • Simplifies Communication: It eliminates back-and-forth emails and messages asking about data freshness. The report answers the question for you, saving everyone time.
  • Adds a Professional Touch: A report that clearly states its data's timeliness feels more complete and polished, reflecting well on the person who built it.

The Two Main Approaches: Power Query vs. DAX

There are two primary ways to capture the refresh date in Power BI: one using the Power Query Editor (with M language) and the other using a calculated measure (with DAX). A key difference is when they capture the time:

  1. Power Query (M Language): This method creates a new table that captures the exact date and time the dataset was refreshed. This value is static and only changes when you perform a data refresh. This is generally the most reliable method.
  2. DAX (Data Analysis Expressions): This method uses a measure to display a date. While you can use functions like NOW(), they can be misleading as they often update whenever a user interacts with the report. A better DAX approach is to find the latest date within your actual data, which reflects the freshness of the source information itself.

Let's walk through setting up both, starting with the recommended Power Query method.

Method 1: Using Power Query for a Rock-Solid Timestamp (Recommended)

This approach captures the moment the refresh process runs in the Power BI service or on your desktop. It’s the most accurate way to show when the dataset itself was last updated.

Step 1: Open the Power Query Editor

From the home ribbon in Power BI Desktop, click on Transform data. This will launch the Power Query Editor, where all the magic happens.

GraphedGraphed

Still Building Reports Manually?

Watch how growth teams are getting answers in seconds — not days.

Watch Graphed demo video

Step 2: Create a New Blank Query

In the Power Query Editor's home ribbon, click the dropdown for New Source and select Blank Query.

A new query, likely named "Query1," will appear in the Queries pane on the left.

Step 3: Enter the M Code

With "Query1" selected, click on Advanced Editor in the home ribbon. This will open a window where you can write or paste M language code.

Delete any existing text and paste in the following code snippet:

let
  Source = #table(
    type table[Last Refresh = datetime], 
    {{DateTime.LocalNow()}}
  )
in
  Source

What this code does:

  • It creates a simple table from scratch using #table().
  • It defines one column named "Last Refresh" and sets its data type to datetime.
  • It populates the first row of that table with the current date and time using DateTime.LocalNow().

Step 4: Rename and Apply

Click Done in the Advanced Editor window. You'll see your tiny new table with a single column and a single row containing the current timestamp.

In the Query Settings pane on the right, rename your query to something more descriptive, like "Last Refresh Time."

Finally, click Close & Apply in the top-left corner of the Power Query Editor to load this new table into your data model. You'll now see the "Last Refresh Time" table in your Fields pane.

Method 2: Using DAX to Reflect Your Data's Freshness

Sometimes, what you really care about is not when the dataset was refreshed, but the timestamp of the latest transaction, log, or event in your source data. This is an excellent use case for a DAX measure.

A Quick Warning on NOW(): You might be tempted to create a simple DAX measure like Refresh Time = NOW(). Avoid this. The NOW() function is volatile and can recalculate every time the report is opened or a filter is changed, which would give a completely false impression of when the data was actually refreshed.

Instead, the best practice is to calculate the maximum date from a relevant column in your dataset.

GraphedGraphed

Still Building Reports Manually?

Watch how growth teams are getting answers in seconds — not days.

Watch Graphed demo video

Step 1: Identify Your Date Column

First, find the most appropriate date column in your data model. For a sales report, this would likely be the [OrderDate] column in your Sales table. For a web analytics report, it might be the [Date] column in your Sessions table.

Step 2: Create a New Measure

In the Report View of Power BI Desktop, right-click on the table where you want to store your measure and select New measure.

Step 3: Write the MAX Date DAX Formula

In the formula bar, enter the following DAX expression, replacing 'Sales'[OrderDate] with your own table and column name:

Data Refreshed As = "Latest Data: " & FORMAT(MAX('Sales'[OrderDate]), "dddd, mmmm d, yyyy")

What this formula does:

  • MAX('Sales'[OrderDate]): Finds the most recent date in the OrderDate column.
  • FORMAT(...: Styles that date into a user-friendly text format (e.g., "Tuesday, June 18, 2024"). You can adjust the format string to anything you like, such as "m/d/yy h:mm AM/PM".
  • "Latest Data: " & : Adds a helpful text prefix to provide context for the user.

Press Enter to save your new measure. You will now see it in your Fields pane with a small calculator icon.

Displaying the Refresh Date on Your Report

Now that you’ve created your refresh date (using either method), it's time to add it to your report canvas.

1. Use a Card Visual

The simplest way to display the information is with a Card visual.

Drag the Card visual onto your report. Then, drag your "Last Refresh" field (from the Power Query table) or your "Data Refreshed As" measure into the Fields area of the visual. Voila! It appears on your report.

2. Formatting and Positioning

You’ll likely want to format the card to make it subtle yet visible.

  • Resize the card to be small and neat.
  • Use the Format pane to change the text size, color, and font to match your report's design. You can turn off the "Category label" to make it more compact.
  • Position the card in a consistent location on every page, like the top-right corner or in the footer area.
GraphedGraphed

Still Building Reports Manually?

Watch how growth teams are getting answers in seconds — not days.

Watch Graphed demo video

Bonus Tip: Understanding Time Zones (UTC vs. Local)

One potential "gotcha" arises when you publish your report to the Power BI Service. The service operates its refreshes based on Coordinated Universal Time (UTC), not your local time zone.

If you used DateTime.LocalNow() in Power Query, the timestamp will reflect the local time of the machine where the refresh happens. On your desktop, that’s your time. On the service, it’s UTC.

To ensure consistency, you can adjust your Power Query M code to use the UTC time plus an offset. For example, to adjust for US Eastern Standard Time (which is UTC-5), you could use this:

let
  Source = #table(
    type table[Last Refresh EST = datetime], 
    {{DateTimeZone.UtcNow() + #duration(0, -5, 0, 0)}}
  )
in
  Source

This explicitly grabs the UTC time and subtracts 5 hours for a more accurate, localized timestamp, regardless of where the refresh occurs.

Final Thoughts

Adding a 'last refreshed' date is a simple enhancement that significantly boosts the clarity and reliability of your Power BI reports. Whether you opt for the stable timestamp captured by Power Query or a dynamic DAX measure tied to your data's latest entry, you're empowering your users with the context they need to trust your work and make informed decisions.

This entire process, while effective in tools like Power BI, highlights the manual steps often needed to ensure data transparency. At Graphed, we built our platform so you never have to think about this. All of our dashboards pull data in real-time from your connected sources like Google Analytics, Shopify, or Salesforce, so they’re always live. There's no separate step to create a refresh timestamp because you're connected directly to the source of truth, giving you the confidence that you're always acting on the very latest information.

Related Articles

How to Enable Data Analysis in Excel

Enable Excel's hidden data analysis tools with our step-by-step guide. Uncover trends, make forecasts, and turn raw numbers into actionable insights today!