In the first part of this blog series, Tableau Set Control: The Basics, I shared some of the history of sets and then introduced the set control and its most basic use case, simple filtering. Now we’re going to build upon that foundational knowledge and dive into some more complicated use cases for set control. (If you haven’t read the first blog, I’d suggest going back and reading it before moving on to this one.)

Use Cases

I’ve found that set control use cases generally fall into one of four categories:

1) Filtering without Filters

2) Multi-Select Parameters

3) Compare Populations

4) Listing Filter Selections

As we’ll see, many use cases fall into multiple categories, but I think these do a fairly good job of explaining the different types of uses we’ll be dealing with. In this blog, I’ll address the first two categories; the final blog in this series will address the last two categories. We’ll dive into each category, then provide a couple specific examples of each.

1) Filter without Filters

Have you ever added a filter then found that it had a negative impact on some component of your chart? Sometimes filters just don’t quite work for you because they end up filtering everything on the sheet. In these cases, it’s likely that set control can help to solve the problem. Let’s take a look at a couple of examples:

1a. Separate Filters for Different Dimensions

Imagine that you are working with superstore sales and want to compare sales in the East and West regions. We could start with a simple bar chart.

But the sales director is focusing on different sub-categories in each region and would like to be able to compare those different sub-categories. In other words, the director needs to have one set of filters for the East and another set of filters for the West. We can’t do this with a regular filter because it will filter everything in the view. But we can use sets and set control. We’ll create two separate sets on sub-category—I’ll call one East Sub-Category and the other West Sub-Category. We’ll add both of those to the filter pane as “In/Out” filters, but then we’ll choose the “Use All” option.

The reason we’re doing this is that we don’t actually want to filter anything out of the entire view—we’re simply adding these to our view so we can get to the set control. To do this, we’ll right-click each of these In/Out filters and choose “Show Set.” We should now have something like this:

The set control allows us to add and remove items from the two sets, but because we’ve chosen “Use All” in the filter, it has no impact on the view whatsoever. But now we’ll create a new measure to account for these sets.

Sales Filtered

// Filter sales based on the sets.

IF [Region]="West" AND [West Sub-Category] THEN

[Sales]

ELSEIF [Region]="East" AND [East Sub-Category] THEN

[Sales]

ELSE

0

END

This will only count sales if the sub-category is in each region’s set. We then use this new measure in place of Sales. In the following screenshot, I’ve placed Sub-Category on the color card so you can see the effect of the calculated field.

And there we have it—we’ve use set control to create separate filters for two different dimensions. You could also do this using Measure Names and Measure Values as detailed on this forums post: Compare the same measure with two different versions of filters

Note: We could also do something very similar using different filters for completely different measures.

1b. Compare Part to Whole

In this scenario, we’ve been asked to create a line chart that shows each state in the East region along with another line for the region as a whole. We want our users to be able to specify which states they want to show, but it will always show the line for the entire region. There are a couple of ways to do this, such as LODs, but we can also leverage set control.

We start out with a chart showing sales by state filtered on the East region:

Now we need a line for the entire region. We can do that by duplicating the Sales pill on Rows and creating a dual axis chart (note: We need to remove State from the color card on that new axis).

But how do we allow our users to filter the list of states without impacting the total line? Set control to the rescue! We’ll create a set on state, add it as an In/Out filter with the “Use All” option selected, then show the set control.

Then we’ll create a new measure to account for the set control.

Set Sales

// Sales for members of the set only.

IF [State Set] THEN

[Sales]

END

We’ll use this on the axis showing the state breakdown, while leaving the other axis to use the unfiltered Sales measure. As a final touch, we can create a filter on SUM(Set Sales) to include only non-null values. This will remove unselected states from the legend.

With this in place, your users can change which states are shown, while not affecting the total line.

1c. Scaffolding

One last example is using sets to act as a data scaffold to help fill in gaps in your data, particularly when those gaps are caused by filters. Take, for example, this hex map showing profit by state.

This works nicely, but watch what happens when we filter to just 2018.

We end up with big holes in our hex map. It’s also hard to tell that some states disappeared because, like Vermont, they lie on the edge of the map or, like Washington DC, they are floating off to the right. I don’t like these hexagons disappearing completely—I’d much rather show those hexagons with 0 profit instead. Once again, set control to the rescue. We’ll remove the filter on year, create a calculated field to give us the year of the date, then create a set on this new Year field.

Next, we’ll create a new measure to show the sales for only the years in the set.

Profit for Years

// Profit for the selected years.

IF [05. Year Set] THEN

[Profit]

ELSE

0

END

We’ll add the set as an In/Out filter, with “Use All” and show the set control, then we use our calculated field, Profit for Years instead of the regular Profit measure.

Remember that we’re not filtering the view here, so we don’t have the holes in our hex map. Instead, we’re filtering the measure within the calculated field. Those states with no records for 2018 will, therefore, still have a mark, but they’ll just show 0 profits.

This, in my opinion, is a huge improvement over having holes in my hex map, but it still feels imperfect because I feel like no records at all is a little different than zero profits. Ideally, we could show the hexagons, but have some visual indicator that there are no records for the selected years. To do this, we can drop the Year set on the shape card then select a different custom hexagon shape as shown below (if you’d like to use this shape, you can find it here).

I think this is a huge improvement as we no longer have holes in our map, but we can clearly see those states with no records in 2018.

Note: When you drop the set on the shape card, those states with sales in 2018 and other years will end up with two separate marks on top of each other—one IN and one OUT. It works fine in this case as both shapes are hexagons and the IN shape sits on top of the OUT shape, but just be aware of this as it could cause you problems in other scenarios. In those cases, this can also be done using a dual axis map or map layers.

Of course, this scaffolding technique can be used in many other ways as well. For an additional, non-map example, see the following post from the Tableau Community Forums: Display a Filled Circle with Count 0 When No Data After Filter

2) Multi-Select Parameters

Parameters are truly amazing. I use them in every single Tableau workbook I create. But have you ever wanted to be able to select multiple items in a parameter? Unfortunately, that’s not possible today. However, we can often use sets and set control to handle these types of use cases.

Let’s say we have a scatterplot comparing Sales and Profit for each of our sub-categories.

Currently, each mark is a grey, but perhaps we’d like to be able to “highlight” specific sub-categories. If we only wanted to highlight one at a time, we could easily use a parameter. But, if we want to highlight more than one, we can leverage the set control. We start by creating a set on Sub-Category, using it as an In/Out filter with “Use All” then showing the set control. Next, we drag the set to the color card. It will now use different colors for those sub-categories that are “in” the set and for those that are “out”.

We can also do this with labels or size if desired.

Note: For the labelling, I created a calculated field like this, then dropped it on the label card.

Set Label

// Show label only if in set.

IF [Sub-Category Set] THEN

[Sub-Category]

END

2a. Filter at Higher Level

Let’s look at a bit more involved example. Let’s say you want to see all customers’ sales by category. You start with a simple bar chart like this:

But you only want to show customers who have purchased a given list of categories. For example, perhaps you only want to show customers who have purchased Furniture or Office Supplies. You might start by creating a filter:

This works great, but your sales director asks you to show all categories on the chart. In other words, they want to see all categories, but want to narrow down the list of customers to only those who purchased a specific set of categories. In that case, the filter breaks down because it will remove all unselected categories. Instead, we can use set control. Start by adding the set control as we’ve done in previous examples. We’ll then need to use the set to filter the overall list of customers.

Customer Filter

// Filter to only those who purchased selected categories.

// Note: MAX of TRUE and FALSE is TRUE.

// So if any of these are TRUE the result will be TRUE.

{FIXED [Customer Name]: MAX(

IF [Category Set] THEN

TRUE

ELSE

FALSE

END

)}

Note: For more on FIXED LODs, see 20 Uses for Tableau Level of Detail Calculations (LODs).

We then use this as a filter, keeping only TRUE values.

Notice that those customers who only purchased Furniture (e.g. Aaron Hawkins) now fall off the chart, but it still shows Furniture sales for those who purchased either Technology or Office Supplies.

Note: Before closing this section, I do need to point out that, unlike parameters, sets cannot operate between multiple unrelated data sources. Thus, set control won’t work in every use case where you want multi-select parameters.

Coming Soon

OK, that’s enough for today. I’ll be back soon with the final blog in this series, in which I’ll address the last two categories—Compare Populations and Listing Filter Selections.