Measure first
Help → Settings and Performance → Start Performance Recording, interact with the workbook, then stop. Tableau opens a workbook showing where time went: query execution, layout, rendering, or connection.
This matters because the intuitive fix is often the wrong one. If 90% of the time is query execution, restyling your dashboard changes nothing.
The big levers
Use an extract instead of a live connection to a slow source. Usually the single largest improvement.
Reduce the data. Filter at the data source, hide unused fields before extracting, and aggregate to the granularity you actually display. A view showing monthly totals doesn't need row-level transactions.
Reduce marks. A view with 200,000 marks is slow to render and unreadable anyway. Aggregate or filter.
Fewer sheets per dashboard. Every sheet is at least one query. Six sheets means six round trips.
Filters, in cost order
Not all filters cost the same.
Cheapest: filtering on a continuous date range, or a relative date. Then a dimension filter with a small selected list.
Expensive: Only Relevant Values on a quick filter, which requires an extra query per filter to work out which values remain valid. Condition and Top N filters are also costly because they require computing over the full set first.
Context filters build a temporary table — worth it when you need the ordering, wasteful otherwise.
Quick filters showing all values from a high-cardinality dimension are a common hidden cost; a parameter or a search-style filter is cheaper.
Calculations
Prefer numeric and boolean calculations over string ones — they're much faster to evaluate.
Use CASE rather than long IF/ELSEIF chains where you're matching one field against discrete values. Avoid nesting LODs unnecessarily; each one adds a query pass.
For a live connection, calculations that can be pushed to the database will be. Row-level calculations on an extract get materialised, which is fast. Table calculations run in Tableau on the result set, so they cost little at the query stage but can slow rendering on very wide result sets.