Dynamic Parameters in Tableau is one of the most requested features of all time. Tableau’s developers have tackled individual use cases for dynamic parameters and delivered some incredible features (e.g. cross database filtering, data highlighters) to meet specific goals. However, there has not been a way to have a parameter containing a list of dimension values, that updates dynamically with the data…
…until now.

Before the reveal…
First a definition: when I refer to a dynamic parameter in Tableau, I’m specifically talking about a parameter with a list of possible values that change as the data changes (is updated, refreshed, or is filtered). And second, a bit of a disclaimer: there are quite a few pieces to creating these dynamic parameters in Tableau. It’s part hack, part work-around, and nowhere near as easy or clean as I’d like. And it only works as part of a dashboard. But it will work in cases where there is currently no other good solution. With that, let’s take a look at dynamic parameters in Tableau.
Creating your own dynamic parameters in Tableau
Yes, you’ll have to build your own… But all the pieces are finally available!

In addition to Tableau 2019.2 or later (which allows for parameter actions – the secret ingredient that makes it all possible), you’ll also need:
- 1. A parameter of the correct data type with All values allowed. Don’t pre-populate it with a list of values based on the dimension you want to use. The whole point is that you don’t necessarily know what values will or won’t be available as the data changes.

- 2. Another parameter called Show / Hide which is an integer restricted to either 0 or 1. We’ll use this in a bit.

- 3. A data source (in addition to the one(s) you already have) that consists of nothing more than rows of values 1 through 10. Technically, it doesn’t have to be 1 through 10, but it makes me happy.

- 4. A Show view that displays the current value of the parameter and will be used to trigger an action on a dashboard that will cause the currently applicable values to be displayed (more on that in a bit)

Using the Incrementing Data source build the view above. Show is a calculated dimension hard-coded to 1. Next Value is a calculated field with the logic:
IF [Value] == 10 THEN 1
ELSE [Value] + 1
END
Selected City is the parameter value, placed on Text. But the Color has been set to be completely transparent, so the text won’t show unless it’s selected.
We’ll add the action in a bit…
- 5. A view that shows all the applicable values:

The view is based on one of your data sets, the one that has the dimension you want to define the values of the parameter. Place that dimension on rows.
Hide is a calculated field hard-coded to 0 and is placed in the detail so it is available to trigger an action we’ll soon define.
Show / Hide == 1 is a calculation that shows the view when the Show / Hide parameter contains a 1 value (indicating “show”) and filters the view when the parameter contains a 0 value (indicating “hide”)
You may additionally filter or implement any logic you want to adjust the list of values to change as the data does.
- 6. A transparent image to simulate a drop-down list. Here’s what I used:

Putting it all together on a dashboard to complete your dynamic parameter in Tableau

We’ll put everything together in a dashboard. Here’s a very rough example that shows how it might work:
Here are the pieces:

And here’s how it works. The transparent Show view sits on top of the transparent image which allows you to see the actual real parameter on the bottom. When you click, you’ll click the Show view which does several things:
- Reveals the text of the selection, which is the parameter value. This prevents the selection from hiding the value
- Triggers a change in parameter value to Show / Hide which causes the list of values to be seen
- Triggers a self-filter action so the selection will be cleared when a city is selected (that concept is a whole other blog post here)
Once the “drop-down” selection list is shown, you can make a selection. That selection does a few things:
- Triggers a change of parameter value to the value of the dimension in the row selected. (That updates the views, changes calculations, whatever you wanted to do with the parameter!)
- Triggers a change of the Show / Hide parameter causing the “drop-down” list to collapse as soon as the selection is made.
And there you have it: dynamic parameters in Tableau! Is it perfect? No way. But can it work in some circumstances when you really need it. You bet! Bon Appétit
Could you please explain me about below point you explained.
Point 1:
3. A data source (in addition to the one(s) you already have) that consists of nothing more than rows of values 1 through 10. Technically, it doesn’t have to be 1 through 10, but it makes me happy.
Point 2:
Using the Incrementing Data source build the view above. Show is a calculated dimension hard-coded to 1. Next Value is a calculated field with the logic:
IF [Value] == 10 THEN 1
ELSE [Value] + 1
END
Could you please send me this worksheet?
Hi Vimal,
The point of this is to “self-filter” in order to clear the selection. It’s not entirely obvious, but hopefully that helps explain why it’s there!
How are you utilizing the additional values data source? I don’t understand how you use it without joining it to your original data, or how you are joining it if you are?
This is exactly what we were looking for. Can’t wait to try it!
Awesome! (just a note that dynamic parameters is going to be a built-in feature and is in 2020.1 beta!)
Very clever. But what happens when, for example, a new city pops up? How do you keep that list of cities always up to date? The reason I ask is that I need a list of personnel based on the region. And personnel changes daily. So if I select Location1 in my first parameter, I’d like to see a list of current personnel in the 2nd parameter. Or in another usage, I need a parameter that simply shows the last 3 month ending dates.
I appreciate all the work you did to show us this and I hope your solution will work for me.
Hello – so this would only work if you know all applicable values. Is there a solution if your population of values changes? For example, employee names. As employees come in and out of the company, you would have to maintain the list of available values, correct? So, if I read this correctly, at this point this sort of use case cannot be handled by Tableau yet.