Set actions are one of Tableau's most powerful and underused features. They allow users to dynamically add and remove values from a set by clicking on the dashboard, enabling proportional highlighting, asymmetric drilldowns, and advanced filtering patterns that are impossible to build with regular filter actions alone.
Set actions are among Tableau's most powerful and least understood features. Regular filter actions are binary — a mark is either included or excluded based on the filter. Set actions are dynamic — they allow users to interactively add and remove values from a set by clicking on the dashboard, and any calculation that references the set updates in real time.
This capability enables patterns that are fundamentally impossible to build with regular filter actions: proportional highlighting (keeping all marks visible while highlighting the selected ones with a size or colour difference proportional to their relationship), asymmetric drill-downs, and complex "include/exclude" analytical interfaces.
What Sets Are
A set is a named collection of dimension members. Sets can be fixed (manually defined: the top 10 customers by revenue) or computed (based on a condition: customers with revenue > $100,000). In worksheets and calculations, a set can be referenced as an IN/OUT dimension — a field that indicates whether a record is in the set or not.
For example: a set named "Selected Customers" is either IN (the customer is in the set) or OUT. A calculated field can use this: IF [Selected Customers] THEN [Revenue] ELSE 0 END — returning revenue only for selected customers.
Set actions allow users to define what is IN the set interactively, by clicking on the dashboard.
Configuring a Set Action
Set actions are created in the Actions dialog (Dashboard > Actions > Add Action > Change Set Values).
**Source:** The sheet and mark interaction that triggers the action (Select, Hover, or Menu).
**Target:** The set that the action modifies.
**Clearing the selection:** Three options:
- Keep set values: set values persist after deselecting, keeping the analysis in place
- Add all values to set: selecting nothing adds everything to the set (effectively selecting all)
- Remove all values from set: selecting nothing clears the set (unselects everything)
The clearing behaviour determines what the "default state" looks like when no mark is selected. For a proportional highlighting pattern, "Keep set values" is usually appropriate — the last selection persists until explicitly changed. For a "select to highlight" pattern, "Remove all values from set" is cleaner.
Pattern 1: Proportional Brushing
**The use case:** A scatter plot where clicking a set of marks highlights them proportionally in a bar chart, without removing the other marks from context.
**Why set actions, not filter actions:** A filter action would remove the non-selected marks entirely. A set action allows keeping all marks visible while changing the appearance of selected vs non-selected marks.
Implementation:
1. Create a set named "Highlighted Segments" on the dimension you want to highlight (e.g., Product Category)
2. Create a set action: clicking on a mark in the bar chart adds that mark's dimension value to "Highlighted Segments"
3. Create a calculated field: IF [Highlighted Segments] THEN [Revenue] ELSE 0 END (the "in-set" revenue)
4. Use the calculated field to colour marks: marks in the set show actual revenue colour; marks out of the set show a muted grey
The result: clicking on a bar segment highlights it with full colour while other segments grey out but remain visible. The analyst can compare the selected segment to the full context without losing the proportional information.
Pattern 2: Top N Dynamic Comparison
**The use case:** Compare a dynamically selected group (the user selects which customers to include) against a reference set (all customers, or a named segment).
Implementation:
1. Create a set named "Comparison Group" on Customer
2. Create a set action on a customer selection list: clicking adds/removes from the set
3. Create calculated fields that distinguish in-set vs out-of-set customers:
- Revenue (comparison group): IF [Comparison Group] THEN [Revenue] ELSE NULL END
- Revenue (all others): IF NOT [Comparison Group] THEN [Revenue] ELSE NULL END
4. Display both measures in the same chart to show the comparison
The user builds their own comparison group by clicking customer names, and the chart updates to show their selected group vs everyone else.
Pattern 3: Asymmetric Drill-Down
**The use case:** A summary level where clicking a category does not filter the chart to only that category, but instead adds the category to a "focus" list that the user builds by clicking — allowing comparison of multiple selected categories simultaneously.
**Why this is different from a filter action:** A filter action replaces the current filter with the new selection. A set action adds to the current set. The user can select Category A, then Shift+click to add Category B, and the chart shows A and B highlighted together.
Implementation:
1. Create a set on the category dimension
2. Configure the set action with "Keep set values" on clearing (so previous selections persist)
3. Display set members with one visual encoding (colour, size) and non-members with another
4. Provide a "Clear Selection" button that triggers an action to remove all values from the set
Pattern 4: Dynamic Reference Line
**The use case:** A benchmark that the user defines interactively — "show me this department's performance relative to the departments I select as the benchmark."
Implementation:
1. Create a set on the Department dimension named "Benchmark Departments"
2. Set action adds clicked departments to the set
3. Calculated field: average revenue across benchmark departments = { FIXED : AVG(IF [Benchmark Departments] THEN [Revenue] ELSE NULL END) }
4. Display as a reference line on the main chart
The user defines the benchmark by clicking, and the reference line updates to show performance relative to their chosen comparison group.
Performance Considerations
Set actions trigger view re-renders on every interaction. The re-render cost depends on:
- The complexity of the set-dependent calculations
- The number of marks in the view
- Whether the data source is live or extract
For live connections, set actions that trigger FIXED LOD recalculations on large tables can be slow. If performance is a concern:
- Use an extract rather than a live connection
- Limit the scope of set-dependent calculations to the dimensions that actually change
- Test with representative data volumes before deploying to users
The Case for Sets Over Parameter Actions
Parameter actions (introduced in Tableau 2019.2) can achieve some of the same interactive patterns as set actions, but with a different mechanism: parameters hold a single value, while sets hold multiple values. Parameter actions are appropriate for single-value selection patterns (selected region, selected time period, selected metric). Set actions are required for multi-select patterns (selected set of customers, selected group of categories).
When the user needs to "build a comparison group" by selecting multiple members, sets are the right mechanism. When the user needs to select one value from a list, parameters are simpler.
Our Tableau consulting practice engineers advanced interactive dashboard experiences — contact us to discuss Tableau set actions and advanced analytics design.
A former Microsoft data architect audits your data foundation, identifies your top priorities, and sends you a written plan. Free. No pitch.
Book a Call →