Installs into .claude/skills of the current project.
Are you the author of Tableau?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/chrishuffman5-tableau)
---
name: tableau
description: "Expert coverage of Tableau across all versions. Provides deep expertise in VizQL, data modeling (relationships vs joins), LOD expressions, dashboard design, Tableau Server/Cloud administration, Prep Builder, Pulse, embedding, and performance optimization. WHEN: \"Tableau\", \"VizQL\", \"Tableau Desktop\", \"Tableau Server\", \"Tableau Cloud\", \"Tableau Prep\", \"Tableau Pulse\", \"LOD expression\", \"FIXED expression\", \"INCLUDE expression\", \"EXCLUDE expression\", \"table calculation\", \"Tableau extract\", \".hyper\", \"Tableau Bridge\", \"Tableau embedding\", \"Connected Apps\", \"Tableau Semantics\", \"Tableau Agent\", \"Tableau Einstein\"."
license: MIT
---
# Tableau
This skill covers Tableau across all supported versions (2024.x through 2026.1):
- VizQL engine internals and query generation
- Data modeling: relationships (logical layer) vs joins (physical layer)
- Calculations: basic, table calculations, LOD expressions (FIXED, INCLUDE, EXCLUDE)
- Dashboard design, layout containers, device-specific layouts, actions
- Tableau Server architecture (Gateway, VizQL Server, Backgrounder, Repository)
- Tableau Cloud (sites, projects, Bridge, Prep Conductor, Pulse)
- Tableau Prep Builder (flows, clean/pivot/join/union/aggregate steps)
- Tableau Pulse (AI-driven metrics, natural language summaries, proactive delivery)
- Embedding API v3 (web components, Connected Apps, JWT authentication)
- Extract optimization (.hyper files, incremental refresh, aggregation)
- Governance (permissions, certification, content lifecycle)
- Performance tuning (Performance Recording, Workbook Optimizer, mark reduction)
When a question is version-specific, read the matching file under `references/versions/`. When the version is unknown, provide general guidance and note where behavior differs across versions.
## How to Approach Tasks
1. **Classify** the request:
- **Data modeling** -- Load `references/architecture.md` for relationships vs joins, logical/physical layers, data connectivity
- **Calculations / LOD** -- Load `references/best-practices.md` for LOD patterns, table calculation guidance, filter interaction
- **Dashboard design** -- Load `references/best-practices.md` for layout, chart selection, color, actions, performance
- **Performance tuning** -- Load `references/diagnostics.md` for Performance Recording, Workbook Optimizer, common causes
- **Server/Cloud administration** -- Load `references/diagnostics.md` for TSM commands, log analysis, site management
- **Troubleshooting** -- Load `references/diagnostics.md` for diagnostic steps, common issues, embedding problems
- **Embedding** -- Load `references/architecture.md` for Embedding API v3, authentication methods, Connected Apps
- **Prep Builder / flows** -- Load `references/architecture.md` for flow design, step types, Prep Conductor
2. **Identify version** -- Determine which Tableau version the user runs. Features like VizQL Data Service (2025+), Pulse on Dashboards (2026.1), REST API Connector (2026.1), UATs (2025.3+), and AI-assisted color palettes (2026.1) are version-gated. If version is unclear, ask.
3. **Load context** -- Read the relevant reference file for deep technical detail.
4. **Analyze** -- Apply Tableau-specific reasoning. Consider data source type (live vs extract), deployment model (Server vs Cloud), license tier (Creator/Explorer/Viewer), and user skill level.
5. **Recommend** -- Provide actionable guidance with calculation examples, configuration steps, or design patterns.
6. **Verify** -- Suggest validation steps (Performance Recording, Workbook Optimizer, preview on target device, test in non-production).
## Product Suite Overview
### Core Authoring and Analysis
**Tableau Desktop** -- Primary authoring tool for creating visualizations and dashboards. Part of the Creator license. Connects to data sources, builds visualizations, publishes to Server/Cloud.
**Tableau Server** -- Self-hosted analytics platform for sharing, governance, and collaboration. Deployed on-premises or in private/public cloud. Multi-node architecture with Gateway, VizQL Server, Application Server, Data Server, Backgrounder, and PostgreSQL Repository.
**Tableau Cloud** -- Fully hosted SaaS analytics platform (formerly Tableau Online). Multi-tenant, auto-updating, with built-in high availability. Uses Tableau Bridge for private network data connectivity.
**Tableau Prep Builder** -- Visual data preparation tool using a flow-based interface: Input > Clean > Pivot > Join > Union > Aggregate > Script > Output. Part of Creator license. Prep Conductor automates scheduled flow execution on Server/Cloud.
**Tableau Public** -- Free platform for creating and sharing visualizations publicly. Not for sensitive or private data.
**Tableau Mobile** -- Companion app (iOS/Android) providing access to Server/Cloud content on mobile devices.
### AI and Insights
**Tableau Pulse** -- AI-driven insights engine delivering personalized metrics and natural language summaries via Slack, Teams, email, and Salesforce. Available on Tableau Cloud. Bi-weekly release cadence.
**Tableau Agent** -- AI assistant for creating visualizations and understanding dashboards using natural language.
**Tableau Semantics** -- Semantic layer for consistent metric definitions across the organization. GA since February 2025. Pre-built metrics for Salesforce data.
### Licensing
| License | Capabilities |
|---|---|
| Creator | Full authoring (Desktop + Prep Builder + Server/Cloud seat) |
| Explorer | Self-service interaction with published content |
| Viewer | View and interact with dashboards |
| Enterprise | Extended edition with Prep Conductor, Catalog, virtual connections |
| Tableau+ | Premium tier with Enhanced Q&A, advanced Pulse features |
## VizQL Engine
VizQL (Visual Query Language) is Tableau's proprietary engine that translates visual interactions into database queries:
1. User drags fields to shelves (rows, columns, filters, marks)
2. VizQL translates the visual description into optimized SQL (or native query language)
3. Query executes against the data source via the appropriate driver
4. Results return to VizQL for additional calculations (table calcs, formatting)
5. Engine renders the final visualization (layout, marks, color encoding, interactivity)
**Key characteristics:**
- Declarative: users describe "what" to visualize, not "how" to compute
- Query optimization: generates efficient queries tailored to each source's dialect
- VizQL Data Service (2025+): API for programmatic access to published data sources, bypassing visualization rendering
## Data Model
### Two-Layer Model (2020.2+)
**Logical layer** (default view) -- Relationships between independent tables. Tables remain separate and normalized. Relationships are dynamic and context-aware.
**Physical layer** (double-click a logical table) -- Joins and unions within a single logical table. Tables merge into one denormalized structure.
### Relationships vs Joins
| Aspect | Relationships | Joins |
|---|---|---|
| Table structure | Separate and independent | Merged into one table |
| Join type | Automatic based on context | User-specified explicitly |
| Granularity | Handles different levels naturally | May duplicate rows |
| Many-to-many | Supported natively | Causes row duplication |
| Performance | Queries only needed tables | Queries all joined tables |
| Deduplication | No LOD workarounds needed | May require LOD expressions |
| Layer | Logical (default) | Physical (inside logical table) |
**When to use relationships:** Multi-table models, different granularities, many-to-many, normalized data. Default choice for new models.
**When to use joins:** Explicit join type needed, single logical table, pre-2020.2 compatibility, deterministic query behavior.
## Calculations
### Basic Calculations
Row-level or aggregate expressions computed by the database engine.
- `[Sales] * [Quantity]`
- `IF [Region] = "West" THEN "Pacific" END`
### Table Calculations
Computed locally by Tableau on aggregated data already in the view. Applied last, just before rendering.
- Types: running totals, moving averages, percent of total, rank, difference, percentile
- Configured via partitioning (scope) and addressing (direction)
- Best for: recursive calculations, inter-row comparisons, period-over-period
### LOD Expressions (Level of Detail)
Computed by the database at a specified granularity. Three types:
**FIXED** -- Computes at exactly the specified dimensions, regardless of view context. Applied before dimension filters (unless context filters used).
```
{FIXED [Customer ID] : MIN([Order Date])}
```
**INCLUDE** -- Adds a dimension to the view's granularity. Applied after dimension filters.
```
{INCLUDE [Customer ID] : SUM([Sales])}
```
**EXCLUDE** -- Removes a dimension from the view's granularity. Applied after dimension filters.
```
{EXCLUDE [Region] : SUM([Sales])}
```
### Filter Interaction with LOD
```
Extract filters / Data source filters
--> Context filters
--> FIXED LOD expressions
--> Dimension filters
--> INCLUDE / EXCLUDE LOD expressions
--> Measure filters
--> Table calculations
```
FIXED ignores dimension filters unless a context filter is promoted. INCLUDE and EXCLUDE respect dimension filters. Data source and extract filters always apply before all LOD expressions.
## Dashboard Design
### Layout
- **Tiled containers** -- Snap to grid, fill available space, consistent alignment
- **Floating containers** -- Freely positioned, pixel-precise, can overlay
- **Horizontal/Vertical containers** -- Group items in rows/columns with proportional sizing
- Place KPIs and summaries at top-left (reading order); detail below
- Limit to 2-3 primary views per dashboard for clarity and performance
### Actions
| Action Type | Purpose |
|---|---|
| Filter | Use selections in one view to filter others |
| Highlight | Emphasize related marks, dim others |
| URL | Hyperlinks to external resources with field parameters |
| Set | Let users change set membership by selecting marks |
| Parameter | Change parameter values through mark interaction |
| Go to Sheet | Navigate to another dashboard or sheet |
### Device-Specific Layouts
Create separate layouts for Desktop, Tablet, and Phone. Single URL serves the appropriate layout. Device layouts inherit from Default; add/remove/resize objects per device.
## Embedding
### Embedding API v3
- Web component-based: `<tableau-viz>` and `<tableau-authoring-viz>`
- CDN-hosted: `https://embedding.tableauusercontent.com/tableau.embedding.3.x.min.js`
- Supports filtering, event listeners, toolbar customization, responsive sizing
### Authentication Methods
| Method | Description | Version |
|---|---|---|
| Connected Apps (Direct Trust) | JWT-based with shared secret | 2021.4+ |
| Connected Apps (OAuth 2.0) | External authorization server issues JWTs | Enterprise SSO |
| Unified Access Tokens (UATs) | JWT-based via Cloud Manager | 2025.3+ |
| SAML / OpenID Connect | Redirect-based SSO | All |
| Trusted Authentication | Legacy server-to-server token exchange | Legacy |
### Key Considerations
- Browsers must allow third-party cookies for cross-domain embedding
- Use CDN-hosted library to avoid CORS issues
- Use `resize()` method for dynamic container sizing
- Connected Apps control which content can be embedded and where
## Version Routing
## Version-Specific Guidance
| Version | Reference | What's Version-Specific |
|---|---|---|
| Tableau 2025.x | `references/versions/2025.x.md` | Einstein, Pulse enhancements, VizQL Data Service, Unified Access Tokens, Tableau Semantics GA |
| Tableau 2026.1 | `references/versions/2026.1.md` | REST API Connector, AI-assisted color palettes, Pulse on Dashboards, SCIM with OIDC |
## Anti-Patterns
1. **"Joins everywhere instead of relationships."** The logical layer with relationships is the default since 2020.2. Relationships handle different granularities and many-to-many without row duplication. Only drop to the physical layer (joins) when you need explicit join type control or deterministic query behavior.
2. **"Quick filters on every dimension."** Each quick filter generates a separate query. Replace with action filters (one selection filters all targets), parameters (single query with conditional logic), or set actions. Reserve quick filters for essential user-facing controls.
3. **"Live connections to slow databases."** If the source database is slow, every interaction waits for queries. Switch to extracts (.hyper) for orders-of-magnitude faster aggregation. Use incremental refresh to keep data fresh without rebuilding.
4. **"One dashboard with 10+ views."** High mark counts and many views multiply queries and rendering time. Split into focused dashboards with navigation actions. Aim for 2-3 views per dashboard.
5. **"Nested LOD expressions."** Deeply nested FIXED/INCLUDE/EXCLUDE expressions are hard to debug and slow to compute. Simplify by pre-computing in the data source, using Prep flows, or restructuring the data model.
6. **"Ignoring the filter order of operations."** FIXED LODs execute before dimension filters. Users expect filters to affect everything. Either promote filters to context (right-click > Add to Context), or use INCLUDE/EXCLUDE which respect dimension filters.
7. **"Embedding without Connected Apps."** Legacy trusted authentication requires server-to-server token exchange and is harder to secure. Connected Apps (2021.4+) with JWT are the modern, recommended approach. UATs (2025.3+) add finer-grained scope control.
8. **"No extract refresh monitoring."** Extract refresh failures silently break dashboards. Set up failure alerts, monitor backgrounder queue depth, and track refresh duration trends for capacity planning.
## Reference Files
Load these for deep technical detail:
- `references/architecture.md` -- VizQL engine, data connectivity (live/extract/Bridge), Server components (Gateway, VizQL Server, Backgrounder, Repository), Cloud architecture, Prep flow design, Embedding API v3, Pulse
- `references/best-practices.md` -- Extract optimization, query performance, LOD expression patterns, visual design, governance (permissions, certification, content lifecycle), extract refresh strategies
- `references/diagnostics.md` -- Performance Recording, Workbook Optimizer, common issues (slow dashboards, extract failures, connectivity), TSM commands, log analysis, embedding troubleshooting
## Diagnostic Scripts
Ready-made SQL against the Tableau Server repository (`workgroup` database, readonly user, port 8060) in `scripts/`, numbered by investigation order. All read-only — never write to the repository. Tableau Cloud: use Admin Insights instead.
- `scripts/01-slow-view-loads.sql` -- Slowest view loads (p95) from http_requests, last 7 days
- `scripts/02-extract-refresh-failures.sql` -- Failed/cancelled extract refreshes with error excerpts
- `scripts/03-content-usage-inventory.sql` -- Workbook usage ranking plus dormant content
- `scripts/04-background-job-queue.sql` -- Backgrounder queue latency by job type (capacity signal)