Never Ending Navigation: Buttons that Deselect Themselves

Navigation buttons can make a series of dashboards easier to use.  The most common approach has been using a view that shows an image, shape, or text for the user to click to trigger an action that filters into another dashboard.

The main issue is that once a mark in the navigation view is selected (which triggers the action), then if the user goes back to the original page, then they have to first deselect the mark before they can trigger the action again.

Check out the issue here by navigating between the sheets a few times:


And now that you’re frustrated, consider some of the options:

  • Use a hover action. This actually works nicely in some cases, but can be accidentally triggered all too easily.
  • Use a Story. Another nice option in many cases.  However, you are dealing with snapshots of dashboards and vizzes, so be aware that things like global filters and parameters won’t carry through from one story point to the next.  Still, consider this option and apply it where it makes sense.
  • Instruct the user to double click the navigation button. Since the first click selects and the next deselects, a double click will work… if the user is fast enough so the action doesn’t navigate before the second click.  And I’m not too fond of telling the user to do something outside the normal use patterns.
  • Give up. Don’t do this.  Anything can be done in Tableau.  There has to be a way.  I just know it.  And there is.  Remember how the “Fire” button disappeared in the Star Trek Tableau game?  There’s a clue in that behavior that we can exploit to get the navigation working the way we want.

NeverEnding Navigation! That’ll make anyone smile!

The NeverEnding Data Story

The NeverEnding Data Story


Use a Navigation Data Source

This is important, because we’ll want a data source that we can apply a global filter to and not mess up other vizzes.  It’s also good practice to use separate data source(s) for things like navigation buttons, information and help buttons, and the like because they can be kept small to avoid a performance hit (I learned that the hard way when working with a hundreds of millions of rows data set and I used it as the source to create a simple help button viz).

Here, we’ll just use a source with a single column (ID) with rows 1 to 100.  We could get away with less rows (as few as 2), but the fewer the rows, the higher the chances that we’ll end up hitting a previously selected value that will frustrate the user.

The only other thing we’ll do is create a calculated field to increment the ID until we hit 100 then we’ll reset back to 1:

Navigation Calculation

If Tableau categorizes the calculation as a measure, re-categorize it as a dimension. This is necessary because we’re going to use it for an action filter and Tableau requires dimensions for action filters. (Thank you Jason Scarlett for pointing out this clarification in the comments below!)


The Views

It’ll depend a little on your navigation scheme.  Here, I’m keeping it simple with a view for forward and another for backward navigation.

Here’s forward:

Forward View

I just put the calculated field Increment ID on the Detail of the Marks Card and set the mark to Shape (right arrow).  The back view is identical except that I used a back arrow shape.  I won’t worry about the fact that I’m getting a mark for each value of Increment ID.  We’re going to use actions to filter, so I’ll let the action filter take care of everything.


Adding Navigation to the Dashboards

So, the first I thing I do is add the views to each dashboard.  You’ll once again notice the multiple marks for forward and backward.  That’ll get cleared up in a step or two:

Profit Dashboard

Once I get the views added to each dashboard, I’ll setup the action.  From the Dashboard > Actions menu, I’ll add a Forward action and a Backward action on each applicable dashboard.

Here’s the setup for the action:


Several notes:

  1. It will be on the selection of the button from one dashboard as the source and the next (or previous) as the target.
  2. When the action is cleared, I will Leave the Filter
  3. I specifically map Selected Fields – and this is one of the secrets: map Increment ID to ID. Why?  Because that will mean that each action will filter the navigation to the next ID – meaning that a new, deselected mark will be drawn.  So when I click the forward button on one dashboard I’ll navigate to the next with forward and backward buttons for ID 2 which in turn will trigger actions to filter the next buttons for ID 3 and so on, until we reset upon reaching 100.


Once you have the action set up for one dashboard, go ahead and trigger it.


And now, the final two Tableau secrets:

First, find the drop down caret on one of the navigation button views (upper right of the border around the dashboard object) and use it to show a quick filter for the Action (ID).


Then, once you have that quick filter, use the drop down caret on it to apply the action filter to All Using This Data Source.  So, this one action will be universal to all sheets using the data source – including the one that triggered the action!

Apply to All


Now, just go through the remaining dashboards and setup the actions for all the buttons.  And you are done!

Here’s an example (and it uses the old Hide Control Filters in a Secret Place trick so you can see how the filter is working in Desktop if you download the workbook.)



Yes, it’s a bit more setup that the traditional way of adding navigation buttons – but you’ve just made life a whole lot better for your users.

93 Responses so far.

  1. Jason Scarlett says:

    Great stuff.

    I had some issues getting the action filters to work until I moved the [ID] and [Increment ID] from the measure shelf to the dimension shelf. Not sure why.

    I also had some issues with the action filters not filtering (only highlighting) when I had pre-existant vizs already showing … I couldn’t track down why I had to delete them and re-add them to get it to work … maybe it was just me.

    • Joshua Milligan says:


      That’s a great point about the need for [Increment ID] to be a dimension. Actions can only pass dimensions as filters. Thanks for pointing it out! I’ll clarify the post so it won’t trip others up. I’m not sure what the highlighting was about – but I’m glad you got it working!

  2. craig says:

    Very clever!

    I’ll definitely be using this one


  3. Ville Tyrväinen says:

    Nicely explained Joshua 🙂

  4. Rahul says:

    Awesome Stuff !!!
    This is Very Helpful

  5. Wendy Foslien says:

    Very nice! Thank you!

  6. Kathy says:

    I am very interested in trying this and have never thought to create a separate navigation data source before, but tell me does the navigation data source have to be either joined or blended with the main data source? I have not done so and I can’t seem to select my navigation data source for the Target Dashboard when setting up the action……

    • Mike says:

      I’m having the same problem. Did you ever figure it out?

      • Brian says:

        I have the buttons as a separate datasource and have do not have an issue with it being an option. The filters are not selecting anything from the other datasources, so you don’t need to blend/join. Have you been able to fix it yet?

      • Luke says:

        I’m now having this issue. Anyone solved it?

    • Lucy says:

      I also had that issue and I solved it by adding something from the “Navigation” data source to my Target dashboard.

  7. tanveer khan says:

    Hey this is nice. Was working on your workbook and i figured this could be achieved with just two rows of ids (1,2) in the navigation datasource and selecting the target filters as :
    source field——target field
    increment id——- id
    id————- increment id
    This seems to work or am I missing something?

    • Joshua Milligan says:

      Great point! Yes, that would totally work. The calculated field helps me conceptualize it better, but there’s no reason it can’t be materialized as a column (when you extract it, the calculation is probably getting materialized anyways)

  8. Jeff Carlson says:

    This is really cool. I recently built a data subscription product with a pretty comprehensive user flow and had finally resigned myself to the “Instruct the user to double click the navigation button” option for my nav buttons.
    I was looking for something else but stumbled upon this write up, and will definitely revamp my product to use this trick. I also did not think about using a different navigation data source (just like Kathy) but will also incorporate that now as well.
    Thanks for the great work and for taking the time to write it up so well.

  9. Michael W Cristiani says:


    It was a pleasure to see you at DATA15!

    I have a slightly different use case, and was wondering if it might be possible to modify this solution. The user wants a button on a target dashboard that, when clicked, triggers navigation to the last other dashboard they were on (the one they came from, essentially) to get to the target dashboard. There is only always this one target dashboard, but it becomes activated from many other dashboards. What do you think?

    Peace and All Good!

    • Joshua Milligan says:

      It was great to see you too! I can’t think of a good way to do what you’re asking. The issue is that the action has to specify a target dashboard and I can’t think of any way to dynamically change that. The only option I can think of is to set up multiple buttons (one for each incoming dashboard) and then have the incoming action hide all but the one that is the link back to it. That would probably be cumbersome to maintain — but might work!

  10. Thanks for publishing this, Joshua. The (occasional) double-click to navigate problem has been annoying me for a long time, and now it’s been banished to the phantom zone.

  11. Jambesh says:

    Nice Post Joshua.. !!! Hope our users will jump on floor after 1Click to land on a different dashboard…
    No more 2Click.


  12. Alexandra says:

    Hi Josh,

    Lovely article! Could you help me adapt this solution? In my case I start with a landing page with four dimension filters and use navigation buttons to move to and filter four dashboards accordingly. Furthermore the user would like to move from two of these filtered dashboards onto the other two keeping the “first” filter (and also move back – which I have not achieved).

    A little more on the filters, the user would like to select several options and also search for these options, so I have made them custom list and unchecked ‘Include all values when empty’.

    I am getting the sticky button situation but also sometimes the navigation occurs without the filter being applied. Any ideas of how to tackle both problems at once?

  13. Dave says:

    Does this solve the issue where links between dashboards often send you to the wrong dashboard? I don’t really care at all about the double click issue, but it is a serious problem that I have where links are set to go one place and they take the user to a different place about 1 out of 5 times…

    • Joshua Milligan says:

      I don’t know that I’ve seen that. Do you have an example?

      • Mark Usher says:

        Yes it’s a common problem (action filters taking you to the wrong dashboard sometimes with no rhyme or reason why it works sometimes and not others). Many others are having the same problem I believe. I’ve explained my specific issue with it in another post.

  14. Jon G says:

    This is a clever solution to a very frustrating problem. Thanks!!

  15. Ken S says:

    This is fantastic! Super-clever trick, and addresses a real pet-peeve.

    FYI – I posted a workbook to the Tableau Community Forum Workbook Library with this technique applied:


    As I mentioned in my notes, because the ONLY data source in this workbook is for the navigation buttons, a dashboard can be easily cut-pasted into a different workbook to start building this functionality.

  16. Kelly McGrath says:

    I am new to Tableau and I am trying to follow the above but but you lost me at the increment id part. Can you explain that a little more?

  17. Ed says:

    This is a real game changer for me – I can’t thank you enough.

    I’m wondering if the same logic could be applied to create an onscreen “reset” button to reset filters?

  18. Tabatha Sullivent says:

    This is very helpul. I haven’t been able to see one navigation button at a time. I see more than one and then … How can I see one navigation button?

  19. Amit Gupta says:

    Hi …this is very helpful. I see one issue when i publish dashboard on server. When i click to back or forward, it opens next dashboard in separate tab/window. Is there a way to control and open in same tab/window?

  20. tobmar says:

    Wow, this is a very creative workaround. Made my workbook so much better for the user, thank you.

    Still, it’s a shame Tableau doesn’t have a simple scripting language for things like navigation. It’s very time consuming to build workarounds like these.

    • benmelek_admin says:

      Yeah, one of my hopes is that Tableau developers see workarounds like this and realize that the feature is something people want and could be implemented as something easy for the end-user. And this has happened before (e.g. the Rank() function had work-arounds before it was officially introduced).

  21. Thank you for this very usefull trick, but i just have one concern, does this method would work when we also include more fields in the detail of the buttons? for example, i have a dashboard that needs to pass some geographical filters to the second pages (the user navigates to those 2nd pages by the buttons) and the way i achieve this was by putting those geographical fields in the details of my buttons, would you thing this can be done ussing this method?

    Thaks and regards,
    Angel Rodríguez

  22. Kathleen Foley says:

    I use this technique all the time and it’s amazing in Tableau Desktop. However, I just uploaded a workbook that uses this to Tableau Online (we are doing a free trial) and the navigation stopped working altogether. tableau Support seems to think it it this never ending feature that does not work with Tableau Online, because the more simple form of dashboard action navigation does work online.

    Has anyone been able to get this to work in tableau Online? (and out of curiosity) does it work in Server?)

  23. Luke says:

    For those who encountered the problem that I did, you need to have a button (or an object) associated with the data source (Navigation) on your target dashboard in order to be able to set up the Target Fields > Selected Fields.

    If you don’t have this, you can’t select that data source as a target. Therefore you have to have at least one navigation arrow/button on each page. Also, remember to place them on each dashboard before setting each one up.

    Hope this solves any confusion.

  24. Sandor Marton says:

    Hi, I have a problem.
    When I want to select the show the quick filter for Action(ID), it doesn’t appear on the list. Do you have any idea why it happens?

    • benmelek_admin says:

      Sandor, Are you selecting it from the target sheet?

      • Lucyna says:

        I have the same issue and I can’t figure out why it doesn’t show up. I have other buttons on my dashboard and the action filters do show up on those.

  25. Dinesh Kumar S R says:

    This function is awesome Joshua, I just replaced my old button with this approach.

  26. Ulrik says:

    Nice trick Joshua! The need for deselecting the mark was such a nuisance. Thanks a lot!

  27. Rick says:

    Great addition for the bag of tricks! I use it all the time now.

    Thank you!

  28. HadAQuestion_NJ says:


    Thanks for the post

    –My question, is there any way to use Action-filters to navigate between Dashboards (within the same browser window) WITHOUT having to publish “worksheets as Tabs”?

    Every attempt I’ve made launches the new dashboard in a new window

    THANKS in advance!!

    • Joshua Milligan says:

      You’re welcome! The only way I know of without publishing with the tabs option is to use URL actions. To get them to open in the same window, the original window must be opened using the ?:linktarget=_self querystring option (that is, the URLs that trigger the action aren’t the ones that need the parameter, rather it is the URL for the view that hosts the view that triggers the actions). Hope that helps!

  29. Ragav says:

    Great tip Joshua. I have used it on my dashboard with 60+ sheets and have created a Table of contents page and this tip you have provided is absolutely cleaver way to navigate.

  30. Samantha LEON BENEGAS says:


  31. Riley Cann says:

    Hi There. First of all thank you for such a great tutorial! The navigation buttons work beautifully. When I publish my workbook, however, I noticed that every time I click on one of my buttons to navigate to a new dashboard, the target dashboard opens in a new tab/new window. Is there a way to prevent this from happening? I added “?:linktarget=_self.” after the URL but this only fixed the problem for the first click; after subsequent clicks the same issue arises. Do you know how I would fix this? Thanks!

    • Joshua Milligan says:


      That is odd. I would have expected that you’d say the first click didn’t work, but subsequent clicks did. I’ll have to do some testing to see…

  32. Thanks Joshua for developing this solution. It’s one of my favorite tricks to use when developing dashboards. I use it to create cross workbook menus that enhance the user’s experience.

  33. Kratika says:

    Hi Joshua,

    Thanks for the solution.

    My issue here is I am using a sheet(MOVE TO sheet) as a filter to pick the id’s in the present sheet and take to the target sheet. How can I implement the single click for this MOVE TO Sheet. I cant change the datasource.

  34. Scott DiPippo says:

    This article is fantastic. Thank you.

  35. Mike Kiel says:

    Hi Jason,

    Thanks for publishing this. When you published this, did you show all sheets as tabs?

  36. Chris says:

    Awesome! Very creative way to solve this Problem. Thanks.

  37. peter wang says:

    this is very helpful.

    but i have a problem, like someone had asked before.
    when i publish dashboard to server, click navigation button will jump to another browser tab.
    is there any way to keep it in same tab?

  38. […] you want to try this, but not sure where to start, check out this post by Joshua […]

  39. Mohammed Mohsin says:

    tricky thinking, there was a way but no one was seeing 😛

  40. NewBie says:

    I am not able to recreate this, can someone publish a sample.

  41. nak says:

    great solution.
    can something like this be implemented for a dashboard action that is a url. i have a button that takes the user to another workbook via dashboard url action. on the new workbook i have another url action that brings the user back

    • Joshua Milligan says:

      It might be possible, however, the most recent version of Tableau currently in beta has a dashboard button that should make this work-around un-necessary!

  42. Marek Koenig says:

    This is a great solution to a problem that’s been nagging me for the longest time! I’m happy someone was finally able to figure it out. Really appreciate you sharing it.

    • Joshua Milligan says:

      Thank you! The great news is that Tableau has a button object in beta now, which will make this work-around obsolete. But I’m glad it’s helped!

  43. Kristen Corey says:

    This is awesome, but I am having trouble with final set up (Desktop v2018.1). A couple of questions:

    1. Should you set up actions for all nav buttons before triggering the first action?
    2. I find I need to open up the Navigation ID as a filter in the view, deselect all except one number, and then trigger the action for that nav button or it won’t work. Is this the correct approach?
    3. After triggering the first action, I can’t figure out how to filter on the action. My only choice in the nav button menu for filters is the Increment ID, not an action. What am I missing? I have searched help about action filters, but it’s mostly about filter type actions.

    Thanks for any advice!

    • Joshua Milligan says:

      Thank you for the questions. To the best of my ability, here are some answers:

      1. Yes
      2. I believe that should work.
      3. Adding it as an action filter and then triggering it for one value should cause the action filter to show in the Filters shelf of the view. I’m hoping that is what you need.

      he great news is that Tableau has a button object in beta now, which will make this work-around obsolete and will be a lot more intuitive.

      • Jen Shepherd says:

        Hi Josh,

        Thanks so much for this post! I’ve used your trick for a few years, but something has changed about action filters in recent versions of Tableau and it isn’t working in exactly the same way it used to (or as you have written it up here). I’m now on 2018.3 and like Kristin Corey, I had to select one specific value of the Increment ID on the filter shelf of a worksheet I’m using as a button to be able to trigger the action filter, then apply that increment ID filter to all my trigger sheets, apply the Action filter to all my sheets, trigger all of my actions, then take the increment ID filter off. I was getting worried, but that did work. Until Tableau ups the character limit for the new dashboard button tooltips (, these workarounds won’t be obsolete. 🙂

    • Daniel Litvack says:

      Did you ever determine WHY you were not seeing the Increment ID action in the filter menu? I am having the same issue, that is, seeing the Increment ID but NOT the action. 🙁

  44. Tirumanedi Hemanth Kumar says:

    It really helped me a lot. I believe everything is possible in life and it got proved. Thanks a lot. Thinking in logical way far better than predefined buttons. Adding to this, It will help us to think in multiple ways to give an innovative thing. Once again, Thank you.

  45. Mehul says:

    Will this approach work if from the source dashboard we are navigating to the target by clicking on the actual data viz. There is no icon on the source to navigate to target. However, from target we need to come back to source by clicking the icon.

    • Joshua Milligan says:

      Yes, it should work in a very similar way!

      • Chris says:

        Hi Joshua,

        I am having the same issue as Mehul. I have a high level view dashboard and a detail dashboard. I want the user to be able to click on the data in the high level view to go to the detail, and then use a back button to go back.

        I do not see a way to do this. The issue seems to be I cannot increment the ID using the main data source as the source field.

        Any ideas?

  46. Bilawal Sarwar says:

    Its not working if the target dashboard has more than 1 data-sources. I tried every possible way to make it work. Also it remove the filter from navigation sheet. It works fine if i remove other sources. What can be the issue?

  47. Tim VS says:

    This is what I’ve been looking for, very good work.


  48. Mark Jacobson says:

    This is really useful. I’m curious…do you think this would work with Set Actions to create a deselecting on/off button that changes what is in/out of a set? I’m trying it but not having much luck. I think it’s because once the increment value changes, the original mark that controls the Set Action is no longer visible cannot be deselected to undo the Set Action. Curious about your thoughts on this?

    • Joshua Milligan says:


      That’s a great idea! I’ll have to work on that and see what could be done with Set Actions – but overall, I think you’re right – there’s an approach that should work there!

  49. Tab says:

    Is there any way this could work with action filters on the main data source?

    For example first dashboard is a list of countries, click a country, then action filter takes you to second dashboard, and second dashboard has button to take you back to the first dashboard?

    Can only seem to get it to work if there is button go back and forward to navigate, and cannot use any action filters with data

    • Daniel Litvack says:

      Yes, I go this to work using the main data source going back and forth between 6 different dashboards (from a central dashboard). You have to add the ID and Increment ID to the main data source

Leave a Reply

Your email address will not be published. Required fields are marked *