Tableau • Filters and Interactivity

Filters & Filter Order — Use filters (dimension vs measure) and understand filter order conceptually

Master how Tableau's filter pipeline processes data and why the sequence of operations determines your results.

Tableau illustration with a dashboard presentation, data visualization, and database
Inside this lesson 10 sections 5 questions 8 figures

SECTION 1

Historical Context & Motivation

Data visualization has always been intertwined with the challenge of managing large datasets, and the concept of filtering — selectively including or excluding data before rendering a visual — predates modern BI tools by decades. Early statistical software like SAS and SPSS offered rudimentary row-level filters akin to SQL WHERE clauses, but these operated in a flat, single-pass model with no notion of an ordered pipeline. When Chris Stolte, Pat Hanrahan, and Jock Mackinlay began developing VizQL at Stanford in the late 1990s — the algebraic language that would become the engine behind Tableau — they recognized that a visual analytics system needed a well-defined order of operations for filters, much like the operator precedence rules familiar to any compiler designer.

1999 • VizQL Conceived at Stanford

Stolte, Hanrahan, and Mackinlay develop VizQL, a formal language that combines data query and visual encoding in a single declarative expression — laying the foundation for Tableau's query pipeline.

2003 • Tableau 1.0 Released

Tableau Desktop ships with a drag-and-drop interface. Filters on dimensions and measures are supported, but the filter order is implicit and mostly hidden from users.

2010 • Context Filters Introduced

Tableau introduces the concept of context filters, enabling users to explicitly promote a dimension filter to an earlier stage in the pipeline — a direct response to user demands for finer-grained control over the order of operations.

2018 • Data Source Filters & Performance Focus

With the rise of big-data back ends, Tableau emphasizes data source filters that push predicates down to the database layer, reducing network transfer and memory pressure — making filter order a performance concern, not just a correctness one.

2023 • Filter Order Documentation Formalized

Tableau's official documentation formalizes the 'order of operations' diagram as a six-level pipeline, solidifying filter order as core literacy for any Tableau practitioner.

The central question that this lesson addresses is deceptively simple: when you add multiple filters to a Tableau worksheet, in what order are they evaluated, and why does that order matter? Understanding the answer requires distinguishing between dimension filters and measure filters, appreciating the role of context filters and data source filters, and recognizing how table calculations sit at the very end of the pipeline. If you have experience writing SQL queries that use WHERE versus HAVING clauses, the conceptual parallels will be illuminating.

SECTION 2

Core Principles & Definitions

Before diving into the mechanics of Tableau's filter pipeline, it is essential to clarify the taxonomy of data fields and filter types. In Tableau's data model, every field is classified as either a dimension or a measure. Dimensions are qualitative, categorical fields — think of them as the keys in a relational table (e.g., Region, Product Category, Order Date). Measures are quantitative fields that can be aggregated — the numeric columns you would pass through SUM(), AVG(), or COUNT() in SQL (e.g., Sales, Profit, Quantity). This distinction is not merely cosmetic; it determines when in the query pipeline a filter is evaluated.

1

Dimension Filter

Operates on unaggregated, row-level data. Analogous to a SQL WHERE clause. Applied before aggregation, so excluded rows never enter any aggregate computation.
2

Measure Filter

Operates on aggregated values. Analogous to a SQL HAVING clause. Applied after aggregation, so aggregates are computed first and then rows failing the predicate are removed.
3

Context Filter

A dimension filter promoted to an earlier pipeline stage. Creates a temporary, filtered dataset before other dimension filters are evaluated — useful for Top-N calculations that depend on a subset.
4

Data Source Filter

Applied at the data connection level, often pushed down to the database as a WHERE clause in the generated SQL. Reduces the data volume before Tableau's in-memory engine processes anything.
5

Table Calculation Filter

Filters on the results of table calculations (e.g., running totals, percent of total). Evaluated last — the underlying data is still aggregated and computed; only the mark-level display is toggled.
✦

KEY TAKEAWAY

Think of Tableau's filter order like a multi-stage compiler pipeline. Just as lexical analysis must happen before parsing, and parsing before semantic analysis, data source filters execute before context filters, context filters before dimension filters, dimension filters before aggregation, and measure filters after aggregation. Placing a filter at the wrong stage is like running an optimization pass on un-parsed tokens — the result may compile, but it will not be correct.

SECTION 3

The Filter Pipeline — Visual Explanation

The diagram below illustrates Tableau's order of operations as a top-to-bottom pipeline. Data enters from the source at the top and flows through each stage sequentially. Filters at higher stages remove data before lower stages ever see it, which is the fundamental principle behind every filter-order bug and performance optimization in Tableau.

TABLEAU ORDER OF OPERATIONS1. Extract Filters2. Data Source Filters3. Context Filters4. Dimension FiltersAGGREGATION5. Measure Filters6. Table Calc FiltersStage 1Stage 2Stage 3Stage 4Stage 5Stage 6GROUP BYData flows top → bottom through each stage sequentially
The pipeline shows six stages. Dimension filters operate at Stage 4 (before aggregation), while measure filters operate at Stage 5 (after aggregation). The context filter at Stage 3 allows you to pre-filter the dataset before standard dimension filters are applied.

Notice that the aggregation step sits in the middle of the pipeline, acting as a conceptual wall between the pre-aggregation world and the post-aggregation world. Every filter above that wall operates on individual rows of your data source, while every filter below it operates on aggregated marks. This is exactly analogous to the relationship between WHERE (pre-GROUP BY) and HAVING (post-GROUP BY) in SQL, a parallel that should feel natural to anyone with database experience.

SECTION 4

How Filters Translate to Queries

To build a precise mental model, consider the SQL that Tableau generates behind the scenes. When you connect Tableau to a relational database, VizQL compiles your visual specification — including all filters — into SQL. Understanding this compilation process clarifies why filter order matters and how it affects both correctness and performance.

SQL Analogy for Filter Stages

DIMENSION FILTER → SQL WHERE

SELECTRegion,SUM(Sales)FROMOrdersWHERERegionIN(′East′,′West′)GROUPBYRegionSELECT Region, SUM(Sales) FROM Orders WHERE Region IN ('East','West') GROUP BY Region

A dimension filter on Region is compiled into a WHERE clause. Rows with Region = 'South' or 'Central' are excluded before the SUM is computed.

MEASURE FILTER → SQL HAVING

SELECTRegion,SUM(Sales)ASTotalSalesFROMOrdersGROUPBYRegionHAVINGSUM(Sales)>50000SELECT Region, SUM(Sales) AS TotalSales FROM Orders GROUP BY Region HAVING SUM(Sales) > 50000

A measure filter on SUM(Sales) is compiled into a HAVING clause. All regions are aggregated first; then only regions exceeding $50,000 survive.

CONTEXT FILTER → TEMPORARY TABLE / SUBQUERY

SELECT∗FROM(SELECT∗FROMOrdersWHERECategory=′Furniture′)ASctxWHERERegionIN(′East′,′West′)SELECT * FROM (SELECT * FROM Orders WHERE Category = 'Furniture') AS ctx WHERE Region IN ('East','West')

A context filter on Category generates a subquery (or temp table) that materializes first. Subsequent dimension filters, such as Region, operate on this reduced dataset.

The key insight is that dimension filters reduce the row set before aggregation, which changes the aggregated values themselves, while measure filters only hide already-computed aggregates from view without altering the underlying computation. This distinction has direct consequences for calculations like percent-of-total or running sums: if you use a dimension filter, the total itself changes; if you use a measure filter, the total remains the same but some marks become invisible.

💡

Performance Tip

When working with large databases, always consider whether a filter can be pushed to an earlier stage. A data source filter is evaluated at the database before any data crosses the network, analogous to pushing a predicate into a B-tree index scan rather than doing a full table scan and post-filtering in the application layer. Context filters are similarly valuable because they materialize a smaller intermediate result set.

SECTION 5

Dimension Filters vs. Measure Filters — A Detailed Comparison

The distinction between filtering on a dimension versus filtering on a measure is the single most consequential filter decision in Tableau. Below is a visual scenario that demonstrates how the same underlying dataset can yield dramatically different results depending on which type of filter you apply.

DIMENSION FILTER vs MEASURE FILTER — SAME DATA, DIFFERENT RESULTSRaw DataRegion SalesEast $200East $300West $150West $350South $400South $100North $250North $50PATH A: Dimension FilterFilter: Region ≠ 'South'Region SUM(Sales)East $500West $500North $300Total = $1,300WHEREPATH B: Measure FilterFilter: SUM(Sales) > 400Region SUM(Sales)East $500 ✓West $500 ✓North $300 ✗South $500 ✓Displayed = $1,500HAVINGKey DifferencePath A: South rowsnever aggregated.Path B: All 4 regionsaggregated; North hidden.
In Path A (dimension filter), the South region's rows are excluded before aggregation, so the grand total is $1,300. In Path B (measure filter), all four regions are aggregated first, and then North (which has SUM(Sales) = $300 ≤ 400) is hidden — but South ($500) passes the filter. The displayed total is $1,500. Same data, different results.
PropertyDimension FilterMeasure Filter
Operates onIndividual rows (unaggregated)Aggregated marks (SUM, AVG, etc.)
SQL equivalentWHEREHAVING
Pipeline positionStage 4 — before aggregationStage 5 — after aggregation
Effect on aggregatesChanges computed values (e.g., SUM changes)Hides marks without changing computed values
Use caseExclude categories, date ranges, or specific membersShow only marks exceeding a threshold (e.g., top performers)

Dimension filter vs. measure filter comparison

SECTION 6

Worked Example — Top 5 Products by Sales in the Furniture Category

Suppose you are using the Tableau Superstore sample dataset and want to build a bar chart showing the Top 5 products by SUM(Sales), but only within the Furniture category. This is a classic scenario where filter order becomes critical. If you apply both a dimension filter on Category and a Top-N filter on Product Name without understanding the pipeline, you may get unexpected results.

Building a Top-5 Furniture Products View

  1. 1

    Step 1 — Identify the Problem

    You drag Product Name to Rows and SUM(Sales) to Columns. You then add a dimension filter on Category to keep only 'Furniture'. Next, you add a Top 5 filter on Product Name by SUM(Sales). Both filters sit at Stage 4 (dimension filters) and execute in the same pass. Tableau computes the Top 5 across all categories, not just Furniture. Why? Because both filters are peers — neither takes precedence.
    The Top 5 list may include products from Technology or Office Supplies — incorrect result
  2. 2

    Step 2 — Promote Category to a Context Filter

    Right-click the Category filter pill on the Filters shelf and select "Add to Context". The pill turns gray, indicating it is now a context filter. This promotes it from Stage 4 to Stage 3 in the order of operations.
    Tableau materializes a temporary result set containing only Furniture rows.
  3. 3

    Step 3 — Re-evaluate the Top 5

    Now the Top 5 dimension filter on Product Name executes at Stage 4 — but this time the input dataset contains only Furniture products, because the context filter (Stage 3) already removed all non-Furniture rows. The Top 5 is computed correctly within the Furniture subset.
    Correct result: Top 5 products are all from the Furniture category.
  4. 4

    Step 4 — Verify via Underlying Data

    Right-click any bar in the chart and select View Data. Confirm that the Category column shows only 'Furniture' and that the five displayed products indeed have the highest SUM(Sales) within that subset. You can also inspect the generated SQL via Tableau's Performance Recorder to confirm the subquery/temp-table approach.
    Underlying data validates: all rows belong to Furniture, and the Top 5 ranking is correct.
🔑

WHEN TO USE CONTEXT FILTERS

Promote a dimension filter to context whenever a subsequent filter (especially Top N, conditional, or set-based) depends on the result of the first filter. Think of it as adding a WITH clause (Common Table Expression) in SQL: you materialize an intermediate result so that downstream operations see only the relevant subset.

SECTION 7

Strengths, Limitations & Common Pitfalls

Each filter type occupies a specific niche in the pipeline. Choosing the right one requires balancing correctness, performance, and user experience. The table below summarizes the tradeoffs for every major filter type.

Filter TypeStrengthsLimitations / Pitfalls
Data Source FilterReduces data at the database level; best for security (row-level) and performance. Applied globally across all worksheets using the data source.Not visible on individual worksheets; easy to forget it exists. Cannot reference worksheet-level parameters without workarounds.
Context FilterCreates a materialized subset before other dimension filters. Essential for dependent Top-N and conditional filters.Can be slow with very large datasets because Tableau creates a temporary table. Overuse negates performance gains.
Dimension FilterIntuitive to use; supports interactive quick filters. Correctly reduces the row set for accurate aggregation.Cannot filter on aggregated values. Multiple dimension filters are peer-level (order among them is not guaranteed unless context is used).
Measure FilterFilters on computed aggregates — threshold, range, percentile. Useful for 'show only where SUM > X' views.Does not reduce the data before aggregation, so percent-of-total and running sums still use the full dataset. Users often mistake hiding for exclusion.
Table Calc FilterPreserves the full computation context. Ideal when you need running totals or rank-based filtering without recalculating.Evaluated last — cannot improve query performance. Hidden marks still affect axis ranges unless manually overridden.

Filter type strengths and limitations

⚠️

THE MOST COMMON MISTAKE

The number-one filter-order mistake among Tableau users is applying a measure filter when a dimension filter was intended, or vice versa. When your bar chart's totals don't add up to what you expect, check whether the filter is pre- or post-aggregation. If a percent-of-total column shows 100% when you expected partial values, you likely filtered with a dimension filter instead of a table calculation filter.

SECTION 8

Connections to Advanced Tableau Features

Understanding filter order is not merely a beginner skill — it is the foundation upon which several advanced Tableau features are built. Level of Detail (LOD) expressions, sets, and parameters all interact with the filter pipeline in specific, sometimes surprising, ways. The table below maps these advanced features to their position in the pipeline.

FeaturePipeline PositionInteraction with Filters
FIXED LODComputed after context filters but before dimension filters (between Stage 3 and Stage 4)A FIXED expression ignores dimension filters — it sees the context-filtered dataset. Only context filters and data source filters can restrict it.
INCLUDE / EXCLUDE LODComputed after dimension filters (at aggregation stage)These LOD expressions respect dimension filters, operating on the already-reduced row set.
SetsComputed after context filters, alongside FIXED LODsSet membership is determined before dimension filters, which is why set actions can drive cross-sheet interactivity reliably.
Table CalculationsComputed after measure filters (Stage 6, the very last stage)Table calcs see the fully aggregated, post-measure-filter data. Filtering on a table calc (Stage 6 filter) only hides marks — the calc itself uses all visible marks.

Advanced features and their pipeline positions

The practical implication is that when you write a {FIXED [Region] : SUM([Sales])} expression, it will ignore any dimension filter on your Filters shelf unless that filter is promoted to context. This behavior is a direct consequence of the pipeline ordering: FIXED LODs are evaluated between Stage 3 (context) and Stage 4 (dimension), so they only see the post-context, pre-dimension dataset. As you move toward Tableau Server deployments, row-level security and user filters also operate at the data source filter level, reinforcing the importance of understanding early-stage filtering.

ℹ

Looking Ahead

Mastering filter order positions you to tackle advanced topics such as dynamic zone visibility (Tableau 2022.3+), which lets you conditionally show or hide dashboard zones based on parameter and set membership — all of which interact with the order of operations in nuanced ways.

SECTION 9

Practice Problems

Question 1: CONCEPTUAL

Explain, in your own words, why a dimension filter on Category = 'Technology' changes the value of SUM(Sales) for each Region, whereas a measure filter on SUM(Sales) > 10000 does not change any Region's SUM(Sales). Reference the pipeline diagram in your explanation.
Show answer
A dimension filter on Category sits at Stage 4, before the aggregation step. It removes all non-Technology rows from the dataset before SUM(Sales) is computed, so each Region's sum now reflects only Technology sales — a fundamentally different number. In contrast, a measure filter on SUM(Sales) > 10000 sits at Stage 5, after aggregation. All rows have already been summed per Region; the filter merely hides Regions whose total falls at or below $10,000. The surviving Regions' SUM values remain unchanged because the computation occurred at an earlier stage.

Question 2: BASIC CALCULATION

You have a dataset with four regions: East ($800), West ($600), South ($400), North ($200). These are SUM(Sales) per region across all categories. You apply a dimension filter to exclude the 'Office Supplies' category, and the resulting sums become: East ($500), West ($350), South ($300), North ($150). You then add a measure filter: SUM(Sales) ≥ 300. Which regions survive, and what is the displayed grand total?
Show answer
After the dimension filter removes Office Supplies rows, the post-aggregation values are East = $500, West = $350, South = $300, North = $150. The measure filter SUM(Sales) ≥ 300 then evaluates each mark: East ($500 ≥ 300 ✓), West ($350 ≥ 300 ✓), South ($300 ≥ 300 ✓), North ($150 < 300 ✗). Three regions survive: East, West, and South. The displayed grand total is $500 + $350 + $300 = $1,150. Note that North's $150 was computed but then hidden by the measure filter.

Question 3: INTERMEDIATE

A colleague builds a view showing the Top 3 customers by SUM(Profit) and also applies a dimension filter to show only the 'West' region. However, the Top 3 list includes customers from the East region. Diagnose the issue and describe the exact steps to fix it.
Show answer
The issue is that both the Region dimension filter and the Top 3 filter on Customer Name are peer-level dimension filters at Stage 4. Tableau evaluates the Top 3 across the entire dataset (all regions) and the Region filter independently, then intersects the results. If the globally top-3 profitable customers happen to be from East, they will still appear even though the Region filter is set to 'West'. The fix is to right-click the Region filter pill on the Filters shelf and select 'Add to Context.' This promotes Region to Stage 3 (context filter), which materializes a temporary dataset containing only West-region rows. The Top 3 filter at Stage 4 then correctly identifies the top 3 customers within the West region only.

Question 4: APPLIED

You are building a dashboard for a retail company. One worksheet shows a running total of SUM(Sales) over months. The stakeholder wants to hide months where the running total exceeds $1M so the chart focuses on the 'ramp-up' period. However, when you add a measure filter SUM(Sales) ≤ 1000000, the running total itself changes because months with high individual-month sales are excluded. What type of filter should you use instead, and why?
Show answer
You should use a table calculation filter instead of a measure filter. The running total is itself a table calculation (RUNNING_SUM). A measure filter at Stage 5 would remove months based on their individual aggregated SUM(Sales) values — before the running total is computed at Stage 6 — thereby altering the running total's input data. Instead, you should create a calculated field that computes the running total, then use that field as a filter. Because it is a table calculation, the filter operates at Stage 6 (table calculation filter), which means the full running total is computed first across all months, and then only months where RUNNING_SUM ≤ $1M are displayed. The underlying computation is preserved; you are merely hiding marks at the end of the pipeline.

Question 5: CRITICAL THINKING

Consider a FIXED LOD expression {FIXED [Region] : SUM([Sales])} in a worksheet that has a dimension filter on Category = 'Furniture'. Explain what value the FIXED expression returns (all-category sales or Furniture-only sales), and describe two distinct approaches to make it respect the Category filter. Discuss the tradeoffs of each approach.
Show answer
The FIXED LOD expression returns the all-category SUM(Sales) per Region, not Furniture-only. This is because FIXED LODs are evaluated between Stage 3 (context filters) and Stage 4 (dimension filters) in the pipeline, so the Category dimension filter has not yet been applied when the FIXED expression is computed. Approach 1: Promote the Category filter to a context filter. This moves it to Stage 3, so the FIXED expression sees only Furniture rows. The tradeoff is performance — context filters materialize a temp table, which can be expensive on large datasets. Approach 2: Rewrite the LOD as an INCLUDE or EXCLUDE expression, e.g., {INCLUDE [Region] : SUM(IF [Category]='Furniture' THEN [Sales] END)}. INCLUDE/EXCLUDE LODs respect dimension filters because they are evaluated at the aggregation stage (after Stage 4). The tradeoff is flexibility — the logic is now hard-coded into the calculation rather than driven by a dynamic filter, so changing the category requires editing the formula rather than simply updating the filter shelf.

SUMMARY

Lesson Summary

Summary

Tableau's order of operations defines a six-stage pipeline: extract filters → data source filters → context filters → dimension filters → aggregation → measure filters → table calculation filters. The critical dividing line is aggregation: dimension filters operate before it (analogous to SQL WHERE), changing the data that enters aggregate functions, while measure filters operate after it (analogous to SQL HAVING), hiding already-computed marks without altering the underlying values.

When one filter must logically precede another — as in Top-N within a category — promote the prerequisite to a context filter to shift it to an earlier pipeline stage. FIXED LOD expressions sit between context and dimension filters in the pipeline, meaning they ignore standard dimension filters unless those filters are promoted. Choosing the correct filter type and placement is both a correctness concern and a performance optimization — pushing filters earlier reduces the data volume at every subsequent stage.

Varsity Tutors • Tableau • Filters & Filter Order