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.

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.


- Create the scaffold. In Google Sheets or Excel, build a single-column table called
Scaffold Datecontaining one row for every date in your target range. - Join the scaffold to your Superstore data. In Tableau, add both data sources, then create a full outer join between
Scaffold DateandOrder 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.
- Drag
Scaffold Dateto Columns, then right-click the pill and change it to discreteWEEKDAY(Scaffold Date). This gives you Sun, Mon, Tue and so on across the top. - Drag
Scaffold Dateto Rows and change it to discreteWEEK(Scaffold Date). This gives you the week numbers down the left side. - Filter
Scaffold Dateto "This month" so the calendar always shows the current month. - Drag
Scaffold Dateto the Text mark and set the alignment to Middle Center. This puts the day number inside each cell. - 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
- Order | Light blue |
Your calendar worksheet is now complete and looks like a real calendar.

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:

Now build the table:
- Drag
Scaffold Date Setto the Filters shelf. This is what connects the table to the calendar selection. - Drag these fields to Rows in this order: Order ID Duplicate, Order Date, Order ID, Customer ID, Last Name, Ship Date.
- Change the date format of Order Date and Ship Date to Exact Date, then make them Discrete.
- 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).
- Drag
Shipping DelayedandShipping On Timeto Label. Align the text in the middle centre. - 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.
- Create a new dashboard and set the size to 550 x 800 px.
- Drop two vertical layout containers onto the canvas, one above the other.
- Drag the calendar worksheet into the top container and the order details worksheet into the bottom container.
- 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

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.
Get more out Tableau?
Let's talk...







.avif)


.avif)












