Chart Builder (Tableau-style) is part of Practice Tools. Sign in or create an account, then subscribe for โฆ4,000/month to unlock it.
Step-by-step exercises for Chart Builder (Tableau-style) - read them here, then practice live in the tool above.
A full walkthrough of installing Tableau Public, connecting your first dataset, understanding the interface, and building your first bar chart, line chart, and simple dashboard.
Tableau Public is a free version of Tableau's data visualization software. It works the same way the paid Tableau Desktop product does for building charts and dashboards, with two differences that matter: every workbook you save is published publicly to Tableau Public's gallery (there's no private/local save), and it can't connect to internal databases behind a company firewall โ only flat files (Excel, CSV, text) and a limited set of public/cloud data sources. That trade-off is exactly why it's a good free lab environment: you get the real Tableau interface and the real drag-and-drop visual-building workflow with zero cost and zero install friction beyond the desktop app itself.
The beginner track gets you from "never opened Tableau" to "can take a spreadsheet and turn it into a clean chart and a two-visualization dashboard" without assuming any prior data-viz background.
Everything in Tableau revolves around dragging fields from a list on the left onto "shelves" that control what a chart shows. Learn these five areas before building anything:
| Area | What it does |
|---|---|
| Data pane (left sidebar) | Every column from your connected data, split into Dimensions (categories โ text, dates) and Measures (numbers you can aggregate, like Sales or Profit) |
| Columns / Rows shelves | Drag fields here to define the X and Y axes of your chart |
| Marks card | Controls how each data point is drawn โ as a bar, line, dot, etc. โ and lets you set Color, Size, Label, and Detail by dragging fields onto it |
| Show Me panel | A chart-type picker that highlights which chart types are valid given the fields you've currently selected |
| Sheet tabs (bottom) | Each sheet is one chart. Dashboards combine multiple sheets into one view. |
Compare your published dashboard against a few highly-viewed vizzes in the Tableau Public gallery (search "Superstore" โ thousands of people have built on this same sample dataset, so it's a fair comparison). Note what makes the well-designed ones easier to read: consistent color use, clear titles, and restrained use of chart types. Once bar/line charts, filtering, and basic dashboards feel automatic, move to the Intermediate track, which covers calculated fields, table calculations, and multi-source joins.
Where drag-and-drop stops being enough. This guide covers calculated fields, table calculations, joining and blending multiple sources, parameters, and building a genuinely interactive dashboard.
Beginner charts use fields exactly as they exist in your source data. Intermediate work is about creating new fields Tableau doesn't have out of the box โ profit margin, a running total, a custom category grouping โ and about combining more than one data source into a single view. This is also where dashboards stop being "two charts side by side" and start being genuinely interactive, with actions that let a user click one chart to filter or highlight another.
A calculated field is a new column you define with a formula, built from existing fields. Create one via Analysis โ Create Calculated Field, or right-click empty space in the Data pane โ Create Calculated Field.
// Basic arithmetic between two existing measures
[Profit] / [Sales]
// A conditional (IF) calculation โ bucket orders by size
IF [Sales] >= 1000 THEN "Large"
ELSEIF [Sales] >= 100 THEN "Medium"
ELSE "Small"
END
// String manipulation
LEFT([Customer Name], 1) + ". " + SPLIT([Customer Name], " ", -1)
// Date math
DATEDIFF('day', [Order Date], [Ship Date])
SUM([Profit]) / SUM([Sales]) โ note the explicit SUM() here; without it, a calculation dividing raw row-level values instead of aggregates behaves differently once placed on a shelf.DATEDIFF('day', [Order Date], [Ship Date])IF/ELSEIF chain bucketing a continuous measure into named tiers, as shown above.Table calculations are different from calculated fields โ they operate on the data after it's already been aggregated and arranged in the view, which makes them the right tool for running totals, rank, and percent-of-total. Right-click any measure already on a shelf and choose Quick Table Calculation, or build a custom one via Analysis โ Create Calculated Field using functions like RUNNING_SUM, RANK, and WINDOW_AVG.
// Running total of Sales along the current table's partition
RUNNING_SUM(SUM([Sales]))
// Rank each Sub-Category by total Sales, highest = 1
RANK(SUM([Sales]))
// Percent of total โ each mark's share of the whole view
SUM([Sales]) / TOTAL(SUM([Sales]))
| Join | Blend | |
|---|---|---|
| Where it happens | At the data-source level, before any sheet is built | At the sheet level, combining two separately-connected sources on the fly |
| When to use it | Same source type, related tables (e.g. Orders + Returns from the same Excel file) | Different source types entirely (e.g. an Excel file + a Google Sheet), or when a full join isn't possible |
| How to set it up | On the Data Source tab, drag a second table in and define the join clause (equivalent to SQL JOIN) | Connect both sources normally, then on a sheet, use a common field (like Region) โ Tableau links them automatically if the field names/types match |
A parameter is a single value a user of your dashboard can change, which then drives a calculated field, a filter, or a title. Create one via the dropdown in the Data pane โ Create Parameter.
// A calculated field that swaps which measure is displayed,
// driven by a parameter named [Measure Selector]
CASE [Measure Selector]
WHEN "Sales" THEN SUM([Sales])
WHEN "Profit" THEN SUM([Profit])
WHEN "Quantity" THEN SUM([Quantity])
END
Show the parameter control on your sheet (right-click the parameter in the Data pane โ Show Parameter Control), and users can now switch what the chart displays without you building three separate charts.
Beyond the "Use as Filter" quick-toggle from the beginner track, Dashboard โ Actions gives you fine control over three interaction types:
LOD expressions, advanced table calculations, performance optimization, and dashboard storytelling โ enough to build something worth putting in a portfolio.
Intermediate work solves "how do I calculate this" problems. Expert work solves "how do I calculate this at exactly the right level of granularity, keep it fast on a large dataset, and present it so a stranger understands the point in five seconds" โ which is a design and performance problem as much as a formula problem. This track assumes you're comfortable with everything in the intermediate guide and are ready to work with a real dataset of your own choosing rather than Sample - Superstore.
LOD expressions let you compute an aggregation at a granularity different from whatever's currently in the view โ something regular calculated fields and table calculations can't do cleanly. There are three types:
// FIXED โ always computes at the specified dimension(s), ignoring the view
{ FIXED [Customer Name] : SUM([Sales]) }
// โ total sales per customer, no matter what else is on the sheet
// INCLUDE โ adds a dimension to the computation beyond what's in the view
{ INCLUDE [Product Name] : SUM([Sales]) }
// โ useful inside a view that's aggregated higher than product level
// EXCLUDE โ removes a dimension from the computation
{ EXCLUDE [Sub-Category] : SUM([Sales]) }
// โ e.g. total category sales, shown alongside sub-category rows
// Step 1: total sales per customer, fixed regardless of view granularity
{ FIXED [Customer Name] : SUM([Sales]) }
// Step 2: bucket customers using that fixed value
IF { FIXED [Customer Name] : SUM([Sales]) } >= 5000 THEN "High Value"
ELSEIF { FIXED [Customer Name] : SUM([Sales]) } >= 1000 THEN "Mid Value"
ELSE "Low Value"
END
At this level you should understand addressing and partitioning โ which dimensions a table calculation "moves across" versus which it's "fixed within." Configure this explicitly via Edit Table Calculation โ Compute Using โ Specific Dimensions, ordering the dimensions to control the calculation direction precisely, rather than relying on Tableau's automatic default.
// A moving average table calc, explicit window
WINDOW_AVG(SUM([Sales]), -2, 0) // average of current + prior 2 periods
// Year-over-year growth using LOOKUP
(SUM([Sales]) - LOOKUP(SUM([Sales]), -1)) / ABS(LOOKUP(SUM([Sales]), -1))
Public workbooks with slow-loading vizzes get abandoned by viewers. A few habits that matter once your dataset grows past a few thousand rows:
Expert-level dashboards are built with intentional layout, not just sheets dropped onto a canvas:
This track assumes you bring a real dataset rather than continuing with Sample - Superstore โ public data from sources like data.gov, Kaggle, or a national statistics office works well. Before building anything: