How to Show Last Refresh Time in Power BI

Cody Schneider••8 min read

Showing when your data was last updated in a Power BI report seems like a small detail, but it’s one of the most effective ways to build trust with your audience. Without a "last refreshed" timestamp, your team is left wondering if they’re making decisions based on today's numbers or last week's. This tutorial will walk you through the most practical methods for adding a dynamic "last refreshed" date to your Power BI reports.

GraphedGraphed

Build AI Agents for Marketing

Build virtual employees that run your go to market. Connect your data sources, deploy autonomous agents, and grow your company.

Watch Graphed demo video

Why Is a "Last Refreshed" Timestamp So Important?

Before jumping into the "how," let's quickly cover the "why." Adding a refresh date isn't just a technical flourish, it's a critical feature that provides immediate value to anyone viewing your report. It serves a few key purposes:

  • Builds Trust and Confidence: When users can see that the data is fresh, they trust the insights they are viewing. It removes the ambiguity and doubt that comes with looking at potentially stale data.
  • Provides Quick Context: A sales manager knows at a glance if they're looking at numbers from this morning or from two days ago. This context is essential for making timely, informed decisions.
  • Simplifies Troubleshooting: If the numbers look off, the first question is always, "Did the data refresh correctly?" A timestamp provides an immediate answer. It helps you quickly identify if there’s a lag or failure in the data pipeline.
  • Encourages Data-Driven Culture: By making data reliability transparent, you encourage more people in your organization to rely on your reports. It’s a simple feature that strengthens the data culture you're trying to build.

Method 1: Using Power Query for a Reliable Timestamp (Recommended)

The most robust and dependable method for creating a last refreshed date is to use the Power Query Editor. Why is this the best approach? Because a query you create here will only run and update its value when the entire dataset is refreshed. This means the timestamp accurately reflects the moment the data model was updated, not just when the report file was opened.

Here’s the step-by-step process:

Step 1: Open the Power Query Editor

From your Power BI Desktop file, navigate to the Home tab in the ribbon and click on Transform data. This will launch the Power Query Editor, which is where you perform all of your data transformation and cleaning tasks.

Step 2: Create a New Blank Query

Once you are in the Power Query Editor, look for the New Source button in the top left. Click it, and from the dropdown menu, select Blank Query at the very bottom.

This creates a new, empty query that isn't connected to any data source yet. We are going to provide its value directly with a simple command.

Free PDF · the crash course

AI Agents for Marketing Crash Course

Learn how to deploy AI marketing agents across your go-to-market — the best tools, prompts, and workflows to turn your data into autonomous execution without writing code.

Step 3: Enter the M Code for the Current Time

With your new query selected (it will probably be named Query1), go to the formula bar. If you don’t see a formula bar, go to the View tab in the Power Query ribbon and make sure the "Formula Bar" checkbox is ticked.

Now, type the following M code into the formula bar and press Enter:

= DateTime.LocalNow()

This simple function captures the exact date and time on the machine where the refresh occurs. After you press Enter, you’ll see the current date and time appear as the query's output.

Pro Tip: You can also use = DateTimeZone.LocalNow() to include time zone information, which can be useful if your team is distributed globally. For most scenarios, DateTime.LocalNow() is perfectly fine. The key is just to stay consistent.

Step 4: Rename and Prepare Your Query

The next steps are all about housekeeping. First, let’s give our query a more meaningful name. In the Query Settings pane on the right, change the name from Query1 to something like Last Refreshed Date. This will make it easy to find later.

Next, you’ll see that your output is just a single value. To use it in your report, you need to convert it into a table. With your query selected, click the To Table button in the ribbon under the Transform tab. A small dialog box will appear, you can just click OK without changing any settings.

Now we have a table with one column (Column1) and one row containing our timestamp. For clarity, double-click the Column1 header and rename it to something descriptive like "RefreshTime."

Step 5: Check Data Type and Load the Query

Power Query is usually smart enough to assign the correct data type, but it's always good to double-check. Click the little icon to the left of your column header (RefreshTime). Ensure that it's set to Date/Time. If it's not, select it from the dropdown. This is crucial for formatting the date correctly in your report visuals.

Once you're happy with the setup, click Close & Apply in the top-left corner of the Power Query Editor. This will load your new Last Refreshed Date table into your Power BI data model.

GraphedGraphed

Build AI Agents for Marketing

Build virtual employees that run your go to market. Connect your data sources, deploy autonomous agents, and grow your company.

Watch Graphed demo video

Step 6: Displaying the Last Refreshed Date in Your Report

Now for the easy part! Back in the main Power BI report view, you’ll see your new table in the Data pane on the right.

  1. Select a Card visual from the Visualizations pane and drag it onto your report canvas.
  2. Drag the RefreshTime field from your Last Refreshed Date table onto the "Fields" area of the Card visual.

By default, Power BI might show it as "Earliest RefreshTime." That’s okay. Since there’s only one value in our table, the "Earliest," "Latest," "First," or "Last" will all be the same. Click the small arrow next to the field in the visual's settings and simply select "RefreshTime" to show the value directly.

Step 7: Formatting and Customization

The default display might not look great. To clean it up, select the card visual, then go to the Format your visual pane (the paintbrush icon).

  • Under Callout value, you can change the font size and color.
  • Under Category label, you can toggle it off to hide the text underneath the date.

To provide context, you can add a Text Box from the Insert tab with text like "Data Last Refreshed:" and place it above or next to your Card visual. This makes it crystal clear what the timestamp represents.

Method 2: A Calculated Table with DAX

If you prefer to stay out of Power Query, you can achieve a similar result using DAX to create a calculated table. This method is also viable, but it's important to understand the nuances of how and when DAX functions are calculated.

Crucial Distinction: DAX functions like NOW() or UTCNOW() behave differently depending on whether they are used in a measure or a calculated column/table. In a measure, the function recalculates every time a user interacts with the report. In a calculated table or column, it only calculates when the data model is refreshed. For our purpose, we need the latter, so we will use a calculated table.

Step 1: Create a New Calculated Table

In the Power BI Desktop, navigate to the Modeling tab in the ribbon and click on New table.

Step 2: Enter the DAX Formula

This will open the formula bar at the top of the report view. Enter the following DAX expression:

Last Refresh DAX = { NOW() }

Here, we are using the NOW() function inside curly braces {} to create a single-column, single-row table containing the current date and time. Press Enter, and you’ll see your new table, Last Refresh DAX, appear in the Data pane.

Free PDF · the crash course

AI Agents for Marketing Crash Course

Learn how to deploy AI marketing agents across your go-to-market — the best tools, prompts, and workflows to turn your data into autonomous execution without writing code.

Step 3: Format the Column and Display

Just like with the Power Query method, you need to ensure the data is formatted correctly.

  1. Go to the Data view (the little table icon on the left sidebar).
  2. Select your Last Refresh DAX table.
  3. Select the column (it will be named "Value" by default).
  4. In the Column tools tab that appears in the ribbon, select your desired date and time format from the Format drop-down menu (e.g., General Date).

From here, the process of visualizing it is identical to the Power Query method. Go back to the report view, grab a Card visual, and drag your "Value" field into it.

Which Method Should You Choose?

For 99% of cases, the Power Query method is the preferred option. It is designed for this exact purpose: running an operation once per dataset refresh. It’s explicit, reliable, and keeps this static metadata separate from your other DAX calculations.

The DAX method works just fine and can feel a bit quicker to set up. However, it mixes metadata with your analytical data model, which some purists dislike. Stick with Power Query as your default - it's a best practice that will serve you well as your reports become more complex.

Final Thoughts

Adding a "last refreshed" time to your Power BI reports is a small investment that pays huge dividends in user trust and clarity. By following either the Power Query or DAX method, you can give your team the confidence that they are making decisions with the most current data available, eliminating ambiguity and fostering a better data culture.

Ultimately, a feature like this exists to solve a universal problem: the friction of keeping reports and data current. While Power BI's publishing and scheduling features help, the larger analytics workflow - connecting data, building reports, and making sure everything is up-to-date - remains a largely manual task. At Graphed, we automate this entire process from the ground up. We connect directly to your sales and marketing platforms, providing dashboards that are always live and in real-time, so you never have to worry about a "last refreshed" date again because your data is always current.

Related Articles