How to Scroll Multiple Sheets at Once in Tableau
Scrolling through a Tableau dashboard with multiple sheets can feel like trying to pat your head and rub your stomach at the same time - one part moves while the others stay frustratingly still. This creates a disjointed experience when you're trying to compare long tables of data side-by-side. This article will show you exactly how to synchronize scrolling across multiple Tableau worksheets, providing a seamless user experience for anyone interacting with your dashboards.
Why Does Synchronized Scrolling Matter?
Imagine you've built a dashboard to compare sales, profit, and shipping costs for hundreds of products. You have three separate worksheets, one for each metric, all lined up horizontally. When you scroll down the list of products in the "Sales" sheet to see what's happening two hundred rows down, the "Profit" and "Shipping Cost" sheets remain at the top. You lose your point of reference instantly.
This breaks the flow of analysis. Instead of easily comparing the metrics for "Product #257," you have to scroll each sheet individually, trying to align the rows manually. It's inefficient, confusing, and defeats the purpose of having a unified dashboard view.
By implementing synchronized scrolling, you make all sheets move together. As you scroll down one, the others follow, keeping the corresponding rows perfectly aligned. This is a game-changer for dashboards that require detailed, row-by-row comparisons across large datasets.
Free PDF · the crash course
AI Agents for Marketing Crash Course
Learn how to deploy AI marketing agents across your go-to-market — the best tools, prompts, and workflows to turn your data into autonomous execution without writing code.
The Index() Function: Your Key to Control
Before diving into the steps, it's important to understand the primary tool we'll be using: the index() function in Tableau. This simple table calculation assigns a sequential number to each row in your partition (e.g., 1, 2, 3...). Essentially, it gives every row a unique numerical address. We can then use this "address" to controllably filter multiple sheets at once, creating the illusion of synchronized scrolling.
How to Synchronize Scrolling in Tableau: A Step-by-Step Guide
This technique relies on a clever workaround: we'll create a dedicated, nearly invisible "scroller" worksheet that controls what the other worksheets display via a parameter and a dashboard action. It sounds complex, but if you follow these steps, you'll have it working in no time.
Step 1: Prepare Your Main Worksheets
First, build the worksheets you want to scroll together. For this example, let's assume we have two tables built on the same data source: one showing Sales by Customer Name and another showing Profit by Customer Name.
- Add the Index Calculation: On each of your sheets, create a new calculated field called "Index":
INDEX() - Place Index on Rows: Drag your new Index field to the far left of the Rows shelf. Right-click it and select Discrete. This turns it into a blue pill that acts as a label rather than a continuous axis.
- Set the Table Calculation: If Tableau asks, ensure the calculation is computed using Table (Down). You can confirm this by right-clicking the Index pill, choosing "Edit Table Calculation," and selecting "Specific Dimensions." Usually, Tableau gets this right automatically.
- Ensure Consistent Sorting: For synchronized scrolling to work logically, all sheets must be sorted identically. In our example, sort both sheets alphabetically by Customer Name ascending.
At this point, both of your worksheets should have a numbered index column on the far left.
Step 2: Create a Parameter to Control the Scroll Position
A parameter is a dynamic value that an end-user can change. We'll use one to store the starting row number for our scrolling "window."
- Click the dropdown arrow in the top-left Data pane and select Create Parameter.
- Set up the parameter as follows:
- Name: Scroll Position
- Data type: Integer
- Allowable values: All
- Current value: 1
- Click OK. You'll see "Scroll Position" appear in the Parameters section at the bottom of the Data pane.
Step 3: Create a Dedicated "Scroller" Worksheet
This is the engine of our solution. The "Scroller" will be a long, thin sheet containing only the index numbers. Its scrollbar is the one users will interact with.
- Create a new worksheet and name it "Scroller".
- Drag the dimension that defines your rows (in our case, Customer Name) onto the Detail card in the Marks pane.
- Drag your Index calculated field to the Rows shelf.
- Your view will now be a list of numbers from 1 to the total number of customers.
- Optional formatting: You can change the Mark Type to "Square," resize it to be very small, and set the color to white with 0% opacity to help hide it on the dashboard.
Step 4: Create a "Display Filter" to Create a Viewing Window
Next, we need a calculated field that uses our Scroll Position parameter to determine which rows should be visible at any given time.
- Create a new calculated field named "Display Filter".
- Enter the following formula:
[Index] >= [Scroll Position] AND [Index] < [Scroll Position] + 25(You can change 25 to any number to show more or fewer rows at once.) - Go to your two main worksheets (Sales by Customer Name and Profit by Customer Name), and drag this new Display Filter field onto the Filters shelf.
- In the filter dialog box, check True and click OK.
- Important: Do not add this filter to your "Scroller" worksheet. It needs to display all rows so its scrollbar functions correctly.
Step 5: Assemble the Dashboard
Now, bring everything together:
- Create a new dashboard.
- Drag a Horizontal container onto the canvas.
- Add the Scroller: Drag your "Scroller" worksheet into the far left of the container. It will look like a thin column of numbers.
- Add main sheets: Drag your main sales and profit worksheets into the container to the right, arranging as desired.
- Clean up the Scroller's appearance:
- Right-click the title of the "Scroller" sheet and select Hide Title.
- Right-click the "Index" axis header on the Scroller sheet and uncheck Show Header.
- Resize the width of the Scroller sheet by dragging its border to only show the scrollbar.
- Hide scrollbars in main sheets:
- On each, click on the down-arrow, go to layout, and uncheck Show scroll bars.
- Remove headers on main sheets:
- Right-click the "Index" header on your main worksheets and uncheck Show Header. The dashboard should now display only the data, with no extra headers, side by side, plus a slim scroll control on the left.
Free PDF · the crash course
AI Agents for Marketing Crash Course
Learn how to deploy AI marketing agents across your go-to-market — the best tools, prompts, and workflows to turn your data into autonomous execution without writing code.
Step 6: Create the Dashboard Action
This final step links the scrollbar interaction to the scroll position:
- From the dashboard menu, choose Dashboard > Actions.
- Click Add Action and select Change Parameter....
- Configure as follows:
- Name: Update Scroll Position
- Source Sheets: Uncheck everything except your "Scroller" worksheet
- Run action on: Hover
- Target Parameter: Select Scroll Position
- Field: Choose Index, ensuring aggregation is None or Minimum
- Click OK to save.
Step 7: See it in Action!
Now, test your dashboard: scroll over the "Scroller" sheet on the left. As you hover, the Scroll Position parameter updates, which triggers the Display Filter to show only the desired rows, creating perfectly synchronized scrolling across your sheets.
Final Thoughts
Setting up synchronized scrolling in Tableau is an advanced technique that solves a common and frustrating user experience problem. By using an index function, a helper "scroller" sheet, and a parameter action, you create dashboards that are far more intuitive for comparing detailed data across multiple tables.
The time you spend configuring calculations, parameters, and actions is often the most time-consuming part of data analysis. At Graphed, we’ve built a tool that handles all of that technical overhead for you. Rather than building these components from scratch, you can simply ask for the report you need in plain language. We connect to your data sources, generate the right visualizations, and keep them automatically updated in a live dashboard, getting you from data to decision in seconds, not hours.
Related Articles
How to Create Facebook Ads API for Claude Code
Create a Meta Marketing API access token that never expires, using a system user, so Claude Code can pull Facebook ad reports and manage campaigns.
ClickHouse vs Postgres: When to Switch to Columnar
Comparing ClickHouse vs PostgreSQL means matching storage architecture to workload. Row storage wins for transactions. Columnar wins for scan-heavy analytics.
Google Ads for Orthodontists: Get More Booked Consults
Most orthodontic Google Ads campaigns waste money on low-intent searches. The problem is structure, not the platform.