Your users come to the dashboard because the data has shown them something worth investigating. A dip in one month. A trend that doesn’t look right. A spread across the dataset they want to map properly. What they select on the timeline is a direct response to what they’re seeing.
And each investigation needs a different kind of chart.
Zooming into one month is a detail question. Who’s driving this? Which accounts are affected? Zooming out to a quarter or more is a trend question. How long has this been building? Is this a blip or a pattern? Extending across years is a distribution question. Where do customers cluster? What does the full spread look like?
These aren’t variants of the same question. They need different analytical views.
Most dashboards don’t know that. The builder chose a chart, the chart stuck, and every investigation has to fit inside the same view. Wrong chart for at least some of the questions, every time.
The Live Traffic Navigator approach fixes this. It gives your dashboard the ability to read what kind of question is being asked and route the user to the right chart. Automatically. Before they have to ask.
The thinking behind why dashboards should work this way is covered in The Self Steering Dashboard. This post is the practical build.
Build level: Intermediate. You’ll need to be comfortable with calculated fields, filters, and dashboard layout. No prior experience with parameter actions, LOD expressions, or Dynamic Zone Visibility required – this post covers all three.
What You’re Building
Here’s the full picture before we start.
The analytical goal: a dashboard that automatically shows the right chart for the right investigation. You define what each date span length means for your users. The dashboard does the routing.
The technical toolkit: four Tableau features do the work.
- Parameter actions capture the user’s drag on the timeline, writing the min and max dates to two parameters.
- DATEDIFF turns that span into a single month count.
- LOD boolean calculations map the month count to a zone. Three yes/no questions, one always returning true.
- Dynamic Zone Visibility connects each layout container to one of those booleans. The matching container activates. The others disappear.
If any of these are new to you, this build is a great way to learn them working together. Each one is doing exactly what it was designed for.
Step 1: Set the Destination
Every sat-nav trip starts with a destination. Before your dashboard can route anything, it needs to know what the destinations are.
In Tableau, this means deciding upfront which analytical question each date span represents. You’re not picking chart types yet. You’re mapping question types to span lengths.
For this build, we’re working with three zones. Before you define yours, think about how your users actually use date selection. Or better still, ask them.
What span do they reach for when they want detail? Probably one month, maybe two. What signals a trend question? Could be three months, six, nine, or a year, depending on your business cycle. What span means they want the full picture? That’s your call.
For the example in this post:
- One month: point-in-time view. Customer-level detail. “How is each account performing right now?”
- Two to six months: trend view. Period-over-period comparison, broken down by region in this example. Adding a dimension like region lets users go deeper. Not just “what’s been happening?” but “where has it been happening, and is it consistent across the business?”
- Seven or more months: distribution view. A scatter plot that lets users spot clusters, outliers, and the overall spread across the dataset. “Where do things cluster? What’s performing way above or below the rest? What does the full picture look like?”
Your thresholds will almost certainly be different. That’s expected. Agree and set your destinations before you open Tableau. Then build.
Step 2: Read the Traffic
Now for the clever bit. This is where the dashboard gets its live traffic reading.
Your timeline chart is the input device. The user drags a selection across it. The moment they do, two parameter actions fire. One captures the minimum date in the selection. One captures the maximum. No filter is applied. The source chart stays completely intact.
Those two date parameters feed a calculated field that measures the gap between them in months: the span the user has selected, as a single integer.
One number comes out. That’s the dashboard’s live traffic reading. It now knows whether the user is asking a point-in-time question, a trend question, or a distribution question.
This happens silently. The user dragged a selection. That’s all they did – no need to ‘configure’ the dashboard each time.
Step 3: Calculate the Route
The sat-nav has read the traffic. Now it calculates the optimal route.
Three calculated fields map the month count to a zone. Each asks a simple yes/no question based on the integer from Step 2: is it equal to 1? Is it between 2 and 6? Is it greater than 6?
These are Level of Detail expressions. The LOD wrapper makes each boolean constant across every row in your data. That’s exactly what Dynamic Zone Visibility needs to do its job. You’ll adjust the threshold values to match the destinations you defined in Step 1.
One of these three will always return true. The routing logic is complete.
Step 4: Activate the Navigator
This is where the sat-nav fires the route. The navigator takes over. The user just drives.
Each layout container in your dashboard connects to one of the three LOD booleans from Step 3. When the user changes their selection and a different boolean flips to true, the corresponding container appears. The others disappear.
No buttons. No dropdowns. No “please choose a chart type.” The dashboard read the question and routed the answer.
One useful addition: a pair of reference lines on the timeline chart, one pinned to P:Min Date and one to P:Max Date, visually highlights the selected range as a band. Users get immediate feedback on what span they’ve picked, without any extra controls cluttering the dashboard.
We match the colours of this band to the text that summarises it to help the user intuitively know there is a connection.
How to Build This
Both workbooks are on my Tableau Public profile. Search “Live Traffic Navigator” to find them.
Demo workbook: the completed build on EU Superstore data. If you want to see the finished result before you start building, open this one first.
Starter workbook: everything structural is already in place. The three zone view sheets are built and sitting in the dashboard layout containers. The Date Selector chart is ready. Your job is to create the parameters, build the detection and routing logic, and connect it all up. The parameters are intentionally not pre-built. Creating them is a core part of understanding the mechanism.
(Note: several sheet titles in the starter display ‘Insert’ placeholders. Step 6 below handles all of them in one go.)
Fields to create
The steps below include all six calculated fields with their formulas. Two of them also need a bit of extra explanation before you build:
Field name: C: In Range?
DATETRUNC('month',[Order Date]) >= [P:Min Date]
AND DATETRUNC('month',[Order Date]) <= [P:Max Date]
Context filter that limits each zone view to the selected date range. The reason it needs to be in context (not just a regular filter) is that 1 month: Customer uses a Top N filter. Without context, Tableau applies the Top N before the date range, which gives incorrect results. Technically only 1 month: Customer needs it in context, but adding it to context on all three zone views simplifies the setup. Don’t add it to the Date Selector sheet. That needs the full date range.
Field name: C: Sum in Range
WINDOW_SUM(SUM(IF [C: In Range?] THEN [Sales] END))
Table calculation that totals Sales within the selected range only. Use it in any zone view that needs a measure scoped to the selection rather than the full dataset.
Steps from the starter workbook
Create two date parameters:
P:Min Date(Data type: Date, Current value: any valid date)P:Max Date(Data type: Date, Current value: any valid date, set later than P:Min Date)
On both parameters, set Display format to
mmm-yy. This controls how the dates appear in the sheet titles and in the reference band labels on theDate Selector.Create
C: # of Months Selected:
INT(DATEDIFF('month', [P:Min Date], [P:Max Date])) + 1
- Create the three LOD boolean fields:
C: #Months Selected is 1 → { MAX([C: # of Months Selected] = 1) }
C: #Months Selected 2 to 6 → { MAX([C: # of Months Selected] > 1 AND [C: # of Months Selected] <= 6) }
C: #Months Selected is > 6 → { MAX([C: # of Months Selected] > 6) }
(Note: Adjust the threshold values to match your destinations from Step 1.)
- Create
C: In Range?:
DATETRUNC('month',[Order Date]) >= [P:Min Date]
AND DATETRUNC('month',[Order Date]) <= [P:Max Date]
Add it to the Filters shelf on the worksheet 1 month: Customer and set it to True. Right-click it in the Filters card → Apply to Worksheets → Selected Worksheets, and add 2 to 6 months: Region and More than 6 months: Scatter Plot as well. Right-click C: In Range? in the Filters card and select Add to Context. This is what makes the Top N filter on 1 month: Customer work correctly: context tells Tableau to evaluate the date range before applying the Top N. Technically only that sheet needs it in context, but adding to context on all three is fine. Do not add this filter to the Date Selector sheet.
- Create
C: Sum in Range:
WINDOW_SUM(SUM(IF [C: In Range?] THEN [Sales] END))
Add C: Sum in Range to the Marks card on the Date Selector sheet. This makes it available to reference dynamically in the sheet title, which you’ll do in Step 6. (Aside: the same field can be added to the Marks card on any zone view that needs a measure scoped to the selected range rather than the full dataset.)
Update all sheet title placeholders. On each sheet below, right-click the title and select Edit Title, then replace each ‘Insert’ with the correct reference:
1 month: Customer: replace ‘Insert’ with[P:Min Date]2 to 6 months: Region: replace the two ‘Insert’ values with[P:Min Date]and[P:Max Date]More than 6 months: Scatter Plot: same as aboveDate Selector: replace the two parameter ‘Insert’ values with[P:Min Date]and[P:Max Date], and the third ‘Insert’ with[C: Sum in Range]
Add two parameter actions on the
Date Selectoron the dashboard (Dashboard menu → Actions → Add Action → Change Parameter):- Action 1: Source sheet:
Date Selectoronly, Run action on: Select, Target ParameterP:Min Date, Source Field:MONTH(Order Date), set Aggregation to Minimum - Action 2: same setup, but set Aggregation to Maximum, Target Parameter
P:Max Date
- Action 1: Source sheet:
Configure the visual indicators on the
Date Selectorsheet:Colour encoding: drag
C: In Range?to the Colour shelf on the Marks card. Edit the colours to match the demo:- True:
#bab0ac - False:
#2d9ced
Reference band: right-click the date axis → Add Reference Line → Band:
- Band From Value:
P:Min Date - Band To Value:
P:Max Date - Label: Value (on both)
- Band border:
#2d9ced
The band and the in-range bars share the same blue, so users get a consistent visual signal: this is the selection.
- True:
On the dashboard, connect each sheet to its LOD boolean via Dynamic Zone Visibility (select the sheet → Layout pane → check “Control visibility using value” → select the matching boolean field):
1 month: Customer→C: #Months Selected is 12 to 6 months: Region→C: #Months Selected 2 to 6More than 6 months: Scatter Plot→C: #Months Selected is > 6
Note: in this build, DZV is applied directly to each sheet. If your zone views include multiple objects, wrap them in a layout container first and apply DZV to the container instead.
Drag a selection on the
Date Selectorand confirm everything is working: P:Min Date and P:Max Date update to the correct values, the reference band moves with the selection, and the right zone activates.
Applying this to your own data
If you’re building from scratch on a different dataset, follow the same steps above. Build your zone views and Date Selector chart first, then work through the parameters and calculated fields in order. Get each layer working before moving to the next. It makes troubleshooting much easier.
The Bigger Idea
Your dashboard can read the question before the user asks it.
That’s what The Live Traffic Navigator is really about. Not the parameter actions, the DATEDIFF, or the LOD booleans. Those are just roads on the route. The destination is a dashboard that meets users where they are, one that adapts to the question being asked rather than forcing every user to adapt to a static chart.
If the philosophy resonates, the thinking behind it is in The Self Steering Dashboard. That post covers why dashboards should guide users without the builder present. This one shows you an example of how to build it.
New frameworks land in Tableau Bites when I have something worth sharing. It’s a newsletter for Tableau practitioners building dashboards that actually get used. Subscribe by email or follow along on LinkedIn if you want the next one.
— Steve “Dashboard Traffic Controller” Adams





