Last 30 Days
No notifications
Tableau is the industry-leading visual analytics platform, known for its drag-and-drop interface and ability to handle millions of rows. It turns complex data into interactive dashboards that anyone can explore.
| Edition | Cost | Best For | ||||
| Tableau Public | Free | Portfolio building, public datasets | ||||
| Tableau Desktop | Licensed | Enterprise analysis, private data | ||||
| Tableau Server/Cloud | Licensed | Team collaboration, governance | Core Concepts | Concept | Definition | Example |
| Dimensions | Categorical/qualitative fields (blue pills) | Region, Category, Date | ||||
| Measures | Quantitative fields (green pills) | Sales, Profit, Quantity | ||||
| Marks Card | Controls visual encoding | Color, Size, Label, Detail, Tooltip | ||||
| Filters | Restrict data shown | Date range, Top N, conditional | ||||
| Parameters | User-controlled variables | "Select metric" dropdown |
// Profit Ratio
SUM([Profit]) / SUM([Sales])// CASE statement for categorization
CASE [Region]
WHEN "East" THEN "Eastern Division"
WHEN "West" THEN "Western Division"
ELSE "Other"
END
// Date calculation
DATEDIFF('month', [Order Date], TODAY())
LOD expressions compute at a different granularity than the visualization:
| LOD Type | Syntax | Use Case |
FIXED | {FIXED [Region] : SUM([Sales])} | Ignore viz filters, compute per region |
INCLUDE | {INCLUDE [Customer] : AVG([Sales])} | Add detail not in viz |
EXCLUDE | {EXCLUDE [Month] : SUM([Sales])} | Remove detail from viz |
LOD expressions are Tableau's superpower — they let you answer questions like "What is each customer's first purchase date?" or "How does each store compare to its regional average?"
Tableau is the drag-and-drop king of BI: connect to data, drop fields onto Rows / Columns / Marks, and a chart appears. Underneath, Tableau is writing optimised SQL for you. The skill is learning the mental model so you can build complex dashboards without fighting the tool.
Three pieces of the ecosystem:
| Tool | Job |
| Tableau Desktop | author workbooks |
| Tableau Server / Cloud | share & govern |
| Tableau Prep | visual ETL (clean & shape data) |
Files: .twb (workbook only), .twbx (workbook + extract), .hyper (Tableau's columnar extract format).
SUM by default).Columns: [Order Date] ← continuous → axis
Rows: SUM(Sales)
Marks > Color: [Region]That's a multi-line revenue trend by region — built without writing a single query.
1. Live connection to a transactional DB — slow + risky. Use an Extract (.hyper) unless you genuinely need real-time.
2. Quick filters everywhere. Each one re-queries the data source. Use Context filters + action filters instead.
3. Over-using dual-axis charts. Often misleading. Try side-by-side panels.
4. No Show Me discipline. "Show Me" is great for exploration; for dashboards build the chart deliberately on Rows/Columns.
5. Ignoring the data type icons. A date stored as string won't give you year/quarter/month drilldown. Right-click → Change Data Type.
6. Not aliasing the workbook. Cryptic field names (f_amt_lcl) reach the dashboard. Rename in the data pane.
Independent of dimension/measure: any field can be discrete (blue, makes headers) or continuous (green, makes axes).
Profit Ratio = SUM([Profit]) / SUM([Sales])
Is Top Region = IF [Region] = 'West' THEN 'Top' ELSE 'Other' END
Days Since Order = DATEDIFF('day', [Order Date], TODAY())Key rule: an aggregate (SUM, AVG) and a non-aggregate can't mix in the same calc. Wrap both sides or use an LOD.
LODs let you compute aggregations at a *different* granularity than the view. Three flavours:
{ FIXED [Customer ID] : MIN([Order Date]) } -- per customer, ignores all dim filters
{ INCLUDE [Customer ID] : SUM([Sales]) } -- view granularity + Customer ID
{ EXCLUDE [Month] : SUM([Sales]) } -- view granularity minus MonthWhen filters and LODs collide, this order decides who wins:
1. Extract filters
2. Data-source filters
3. Context filters
4. FIXED LODs ← computed before dim filters
5. Dimension filters
6. INCLUDE / EXCLUDE LODs
7. Measure filters
8. Table calculations ← run last, on the visible resultGotcha: {FIXED [Region]: SUM([Sales])} ignores a Category filter (step 4 < step 5). Promote the Category filter to Add to Context to make it apply.
Run on the *visible* result set, not the data source. Perfect for:
RUNNING_SUM(SUM([Sales])))WINDOW_AVG(SUM([Sales]), -2, 0))SUM([Sales]) / TOTAL(SUM([Sales])))(ZN(SUM([Sales])) - LOOKUP(ZN(SUM([Sales])), -1)) / ABS(LOOKUP(ZN(SUM([Sales])), -1)))COUNTD on huge dimensions — it's expensive.USERNAME() = [Sales Rep].1. Connect to Sample Superstore. Build a sheet with Order Date on Columns, Sales on Rows, Region on Color — read off the seasonality. 2. Add a parameter "Top N" + a calc to filter to the top N products by Sales. 3. Write a FIXED LOD for "Customer First Order Date" and use it to label new vs returning customers. 4. Build a dashboard with KPI strip + trend + breakdown, wire one chart to filter another with a Dashboard Action.