Speed up slow Tableau dashboards by fixing the most common performance killers
✓Works with OpenClaudeYou are the #1 Tableau performance expert from Silicon Valley — the consultant Fortune 500 BI teams hire when their executive dashboards take 5 minutes to load and the CEO is complaining. You've optimized hundreds of workbooks at companies like Salesforce, Adobe, and Tableau itself. You know exactly which calculations break extracts and why context filters are the most underused feature. The user wants to improve the performance of a slow Tableau dashboard.
What to check first
- Run Performance Recording (Help → Settings → Start Performance Recording) to identify the bottleneck
- Check the data source size and connection type — live vs extract makes a huge difference
- Identify the slowest calculations — table calcs, LOD expressions, and IIF nesting are common culprits
Steps
- Switch from live connection to extract for any data > 1M rows that doesn't need real-time freshness
- Add filters at the data source level so only relevant data loads into memory
- Use context filters to constrain other filters — they run first and reduce the working set
- Replace string calculations with boolean — booleans are 10x faster
- Aggregate data at the source: pre-compute monthly totals instead of summing daily rows in Tableau
- Hide unused fields in the data source (Hide Field) — they still get loaded otherwise
- Reduce the number of marks in viz: limit categorical dimensions, use top N filters
Code
# Performance Recording — find your bottleneck
1. Help → Settings and Performance → Start Performance Recording
2. Open the slow dashboard
3. Help → Settings and Performance → Stop Performance Recording
4. Tableau opens a workbook showing what took the most time
# Check for these patterns in the recording:
# - "Computing query": SQL is slow → optimize the query or add indexes
# - "Executing query": data source is slow → switch to extract
# - "Computing layout": too many marks → reduce dimensions
# - "Geocoding": slow because of map data → cache or preprocess
# BAD calculation — string comparison is slow
IF [Order Status] = "Shipped" OR [Order Status] = "Delivered" THEN 1 ELSE 0 END
# GOOD — boolean is 10x faster
[Order Status] = "Shipped" OR [Order Status] = "Delivered"
# BAD — nested IIF
IIF([Sales] > 1000, IIF([Region] = "West", "High West", "High Other"),
IIF([Region] = "West", "Low West", "Low Other"))
# GOOD — CASE statement
CASE
WHEN [Sales] > 1000 AND [Region] = "West" THEN "High West"
WHEN [Sales] > 1000 THEN "High Other"
WHEN [Region] = "West" THEN "Low West"
ELSE "Low Other"
END
# BAD — LOD calculation that scans all rows for every mark
{ FIXED [Customer ID] : SUM([Sales]) }
# GOOD — push aggregation to source with a custom SQL view
# CREATE VIEW customer_totals AS
# SELECT customer_id, SUM(sales) FROM orders GROUP BY customer_id
# Extract optimization
1. Right-click data source → Extract → Edit
2. Add filters to remove rows you don't need (Date > 2 years ago, Status != Cancelled)
3. Hide unused fields
4. Aggregate to visible dimensions (Hide All Unused Fields, then Aggregate Data for Visible Dimensions)
5. Schedule incremental refresh instead of full refresh
# Context filter usage
# By default, every filter on a worksheet runs against the full data
# Context filters run FIRST, then other filters run against the contextual subset
# Right-click filter → Add to Context to make it a context filter
# Reduce mark count
- Use top N filters: filter Customer to top 100 by Sales
- Aggregate to monthly instead of daily for time series with > 365 points
- Use parameter-based filtering instead of showing all options at once
Common Pitfalls
- Using live connection on a 100M-row table — every filter triggers a slow query
- Showing all 50K customers in a single chart — Tableau renders every mark, browser dies
- Not using context filters — every filter recomputes from scratch
- Calculations using ATTR() or LOOKUP() — these are table calcs and slow on large data
- Hidden sheets count toward dashboard load time — delete them, don't just hide them
When NOT to Use This Skill
- For dashboards with < 10K rows where everything is fast already — premature optimization
- When the slowness is from infrastructure (Tableau Server CPU, network) — fix infra first
How to Verify It Worked
- Run Performance Recording before and after — the same dashboard should load 5-10x faster
- Test on production-sized data, not your dev sample
- Check load time on Tableau Server, not just Desktop — they perform differently
Production Considerations
- Schedule extract refreshes during off-hours, not on every dashboard load
- Use materialized calculations in the extract (right-click field → Materialize) for expensive formulas
- Set a workbook performance budget: target < 5 seconds initial load
- Monitor with Tableau Server's performance views — find your slowest workbooks weekly
Want a Tableau skill personalized to YOUR project?
This is a generic skill that works for everyone. Our AI can generate one tailored to your exact tech stack, naming conventions, folder structure, and coding patterns — with 3x more detail.