BI & Analytics
Blog
Tableau
5
min read

How to Create an Interactive Calendar in Tableau

Learn how to create an interactive calendar in Tableau in 4 steps using a date scaffold and Set Actions. Step-by-step tutorial with calculations.
Author
Lucas Reinhard
Lucas Reinhard
Analytics Engineer
How to Create an Interactive Calendar in Tableau
Share article

An interactive calendar in Tableau is a dashboard that shows a calendar grid where each date is clickable, and clicking a date filters a details panel underneath to show what happened on that day. You build it in 4 steps using a date scaffold (to handle missing dates), a calculated field (to colour-code each day), and a Set Action (to make the calendar clickable). This guide walks you through the full build using the Sample Superstore dataset.

What is an interactive calendar in Tableau?

An interactive calendar in Tableau is a worksheet laid out as a traditional monthly calendar grid, where each individual date is a clickable mark that filters or updates another part of the dashboard when selected. It is one of the most user-friendly ways to let stakeholders explore time-based data, because everyone already knows how to read a calendar.

creating an interactive calendar in Tableau

The example we will build highlights every day where an order was placed using a light blue circle, marks today's date in bold blue, and reveals a full table of order details when the user clicks a specific day. Late shipments appear in red, on-time shipments in blue.

Three Tableau features do most of the work:

  • A date scaffold to make sure every day of the month shows up, even days with no orders.
  • A calculated field to colour-code each day based on whether it has an order, is selected, or is today.
  • A Set Action to make clicking a date filter the order details table underneath.

Why use a date scaffold?

A date scaffold is a separate table that contains one row for every date you want to display, regardless of whether your main dataset has activity on that date. You join it to your data so that days with no orders still appear in the view as empty cells.

Without a scaffold, Tableau only renders marks where data exists. So if no orders were placed on a Tuesday, that Tuesday will be missing from your calendar entirely, leaving a gap in the grid. With a scaffold, every day of the month shows up, and you can clearly distinguish "no order placed" from "the date does not exist."

For a deeper look at the technique, the Tableau Prep scaffolding guide covers the underlying concept. For this tutorial, a simple Excel or Google Sheets scaffold is all you need.

How to build an interactive calendar in Tableau in 4 steps

This tutorial uses the Tableau Sample Superstore dataset, truncated to 22 July 2022 so we have a realistic period with no future orders. The final dashboard has two worksheets stacked vertically: the calendar on top, the order details table on the bottom.

Step 1: Build the data model with a date scaffold

The Superstore data covers 2019 to 2022, so we need a scaffold table that runs at least the same range. To future-proof the dashboard, we will run it from 01/01/2019 to 31/12/2023.

date scaffold to build an interactive calendar in Tableau

join scaffold table on the superstore data

  1. Create the scaffold. In Google Sheets or Excel, build a single-column table called Scaffold Date containing one row for every date in your target range.
  2. Join the scaffold to your Superstore data. In Tableau, add both data sources, then create a full outer join between Scaffold Date and Order Date. The full outer join is important here because it keeps every date from the scaffold (even ones with no matching orders) and every order from Superstore (even ones outside the scaffold range, as a safety net).

After the join, you should have a Scaffold Date field that contains every day in your range, with order data attached where it exists and nulls where it does not.

Step 2: Build the calendar worksheet

This is where the calendar grid takes shape.

  1. Drag Scaffold Date to Columns, then right-click the pill and change it to discrete WEEKDAY(Scaffold Date). This gives you Sun, Mon, Tue and so on across the top.
  2. Drag Scaffold Date to Rows and change it to discrete WEEK(Scaffold Date). This gives you the week numbers down the left side.
  3. Filter Scaffold Date to "This month" so the calendar always shows the current month.
  4. Drag Scaffold Date to the Text mark and set the alignment to Middle Center. This puts the day number inside each cell.
  5. Change the Marks Type from Automatic to Circle and shrink the circle size so the dates look like calendar bubbles rather than overlapping blobs.

Now for the interactive part. We want each bubble coloured based on four conditions:

  • Today's date (highlighted)
  • Selected dates (highlighted differently)
  • Dates with orders
  • Dates with no orders

First, create a set from the Scaffold Date field by right-clicking the field and choosing Create > Set. Name it Scaffold Date Set and leave it empty for now. The Set Action in Step 4 will populate it dynamically.

Drag both Scaffold Date and Scaffold Date Set onto the Detail mark.

Next, create this calculated field and drag it onto Colour:

Calendar Bubble Color

IF [Scaffold Date] = TODAY() THEN "Today"
ELSEIF [Scaffold Date Set] THEN "Selected"
ELSEIF NOT ISNULL([Order ID]) THEN "Order"
ELSE "No order"
END

Finally, clean up the formatting:

  • Hide field labels for rows and columns.
  • Hide row and column headers (right-click each pill and uncheck Show Header).
  • Change the date format of the column headers to Abbreviation.
  • Set the colours:
    • Order | Light blue | #ECF1FE
    • Today | Blue | #527AF6
    • Selected | Grey | #B3B7B8
    • No order | White | #FFFFFF

Your calendar worksheet is now complete and looks like a real calendar.

view of interactive calendar in Tableau

Step 3: Build the order details table

This is the panel that updates when a user clicks a date in the calendar.

Start by creating these five calculated fields:

build the orders details table

Now build the table:

  1. Drag Scaffold Date Set to the Filters shelf. This is what connects the table to the calendar selection.
  2. Drag these fields to Rows in this order: Order ID Duplicate, Order Date, Order ID, Customer ID, Last Name, Ship Date.
  3. Change the date format of Order Date and Ship Date to Exact Date, then make them Discrete.
  4. Drag Shipping Status to both Colour and Shape on the Marks card. For the shape, use a rounded rectangle custom shape (you can download one from Flaticon and add it to your Tableau Repository).
  5. Drag Shipping Delayed and Shipping On Time to Label. Align the text in the middle centre.
  6. Set the colours:
  • Delayed shape | Light red | #FDD8DA
  • Delayed text | Red | #F7646B
  • On Time shape | Light blue | #ECF1FE
  • On Time text | Blue | #3D71F5

For tips on making the final table look polished, see our guide on how to personalise your Tableau dashboards with custom titles.

Step 4: Combine them with a Set Action

Now we connect the two worksheets so the calendar drives the table.

  1. Create a new dashboard and set the size to 550 x 800 px.
  2. Drop two vertical layout containers onto the canvas, one above the other.
  3. Drag the calendar worksheet into the top container and the order details worksheet into the bottom container.
  4. Set up the Set Action. Go to Dashboard > Actions > Add Action > Change Set Values. Configure it like this:
  • Source sheet: the calendar worksheet
  • Target set: Scaffold Date Set
  • Run action on: Select
  • Clearing the selection will: Remove all values from set

final result of interactive calendar in tableau

That is it. Click a date in the calendar and the order table below will filter to show only the orders placed on that day. The selected bubble in the calendar will also change colour to grey, thanks to the Calendar Bubble Color calculation from Step 2.

For more on dashboard interactivity techniques like this one, see our guide to Tableau parameter actions.

Frequently Asked Questions

What is an interactive calendar in Tableau?

An interactive calendar in Tableau is a dashboard worksheet that displays a date grid (like a wall calendar) where each day is a clickable mark. Clicking a date triggers a Set Action that filters another worksheet on the dashboard, usually a details table, to show only the records related to that date.

What is a date scaffold and why do I need one for a Tableau calendar?

A date scaffold is a separate table containing one row for every date in your target range, joined to your main data using a full outer join. You need one because Tableau only renders marks where data exists, so days with no activity would otherwise disappear from your calendar grid. The scaffold guarantees every day shows up, even empty ones.

How do I make my Tableau calendar clickable?

Create a set from your date field, drag the set onto the Detail mark of the calendar worksheet, and then create a Set Action on the dashboard (Dashboard > Actions > Add Action > Change Set Values) that updates the set when a date is selected. Add the same set to the Filters shelf of any worksheet you want the calendar to control.

Why isn't my Set Action filtering the order table?

The most common cause is that the set is missing from the Filters shelf of the target worksheet. Also check that the Set Action's target set name matches exactly, that the action runs on Select, and that the source sheet in the action settings is your calendar worksheet.

Conclusion

An interactive calendar is one of the most natural ways to let users explore time-based data in Tableau, because it uses a layout everyone already understands. The combination of a date scaffold, a colour-coded calculated field, and a Set Action turns a static grid into a fully clickable filter for the rest of your dashboard.

Once you have built one, the same pattern works for any time-based dashboard: support tickets, marketing campaigns, sports fixtures, anything with a date and details to show.

If you want help building interactive dashboards like this one for your team, get in touch with the Biztory team and we will help you put it together.

Facts & figures

About client

Testimonial