Tableau interviews test your understanding of data connections, calculations, LOD expressions, dashboard design, performance optimisation, and Tableau Server administration. This guide covers 50 of the most common questions — with clear answers and practical examples.
Quick reference
| Topic | Most asked questions |
|---|---|
| Fundamentals | Components, file types, data source types |
| Data Connections | Live vs extract, joins, unions, blending |
| Calculations | Calculated fields, table calcs, parameters |
| LOD Expressions | FIXED, INCLUDE, EXCLUDE |
| Filters | Order of operations, context filters, data source filters |
| Visualisations | Dual axis, reference lines, chart types |
| Dashboards | Actions, layouts, containers |
| Performance | Extracts, aggregation, performance recording |
| Tableau Server | Publishing, permissions, schedules, projects |
| Advanced | Sets, groups, bins, Tableau Prep |
Fundamentals
1. What is Tableau and what are its main product components?
Tableau is a visual analytics platform that translates data queries into interactive visualisations without requiring SQL or programming.
Main components:
| Product | Purpose |
|---|---|
| Tableau Desktop | Build visualisations and workbooks |
| Tableau Server | On-premise sharing and collaboration |
| Tableau Cloud | SaaS version of Tableau Server (formerly Tableau Online) |
| Tableau Public | Free tier — published content is publicly accessible |
| Tableau Prep Builder | Visual ETL and data preparation tool |
| Tableau Prep Conductor | Automate and schedule Prep flows on Server/Cloud |
| Tableau Mobile | iOS/Android app for consuming dashboards |
| Tableau CRM (Einstein Analytics) | Salesforce-native analytics (now Salesforce Analytics) |
2. What are the different file types in Tableau?
| Extension | Name | Description |
|---|---|---|
.twb |
Tableau Workbook | XML file; references data but doesn't embed it |
.twbx |
Packaged Workbook | ZIP archive containing .twb + data/images |
.tds |
Tableau Data Source | Connection metadata only (no data) |
.tdsx |
Packaged Data Source | .tds + embedded data extract |
.hyper (.tde) |
Tableau Data Extract | Columnar extract file (.hyper replaces .tde) |
.tfl |
Tableau Flow | Tableau Prep flow definition |
.tflx |
Packaged Flow | Flow + embedded data |
.tbm |
Tableau Bookmark | Single saved sheet |
Use .twbx when sharing with others who don't have access to the original data source.
3. What is the difference between a Dimension and a Measure in Tableau?
| Dimension | Measure | |
|---|---|---|
| Type | Categorical / qualitative | Numeric / quantitative |
| Pill colour | Blue | Green |
| Default aggregation | None (used for grouping) | SUM, AVG, COUNT, etc. |
| Role in viz | Rows, columns, colour, filters | Size, axis values |
| Examples | Country, Category, Date (discrete) | Sales, Profit, Quantity |
Dimensions define the granularity of a view. Measures are aggregated based on the dimensions present.
4. What is the difference between discrete and continuous fields?
| Discrete | Continuous | |
|---|---|---|
| Pill colour | Blue | Green |
| Axis type | Creates headers (labels) | Creates a continuous axis |
| Typical use | Categorical grouping, colour | Axes with ranges |
| Date example | Month of Year (Jan, Feb…) | Date field as a timeline |
Right-click any field to toggle between discrete and continuous.
5. What is VizQL?
VizQL (Visual Query Language) is Tableau's proprietary language that translates drag-and-drop actions into database queries. When you drag a field to a shelf, Tableau generates VizQL, which is then converted to the native SQL dialect of the connected data source. This abstraction enables non-SQL users to query any database through visual interactions.
Data Connections
6. What is the difference between a Live connection and an Extract?
| Live Connection | Extract (.hyper) | |
|---|---|---|
| Data freshness | Real-time | Point-in-time snapshot |
| Performance | Depends on data source speed | Usually faster (in-memory columnar) |
| Network required | Yes | No (after extract created) |
| Best for | Frequently changing data, small datasets | Large datasets, slow databases, offline use |
| Scheduling | N/A | Refresh schedules on Server/Cloud |
When to use extracts: dashboards with millions of rows, slow database connections, or scenarios requiring offline access.
7. What are the types of data connections in Tableau?
- Direct connections — built-in connectors (Salesforce, Google Sheets, PostgreSQL, Snowflake, etc.)
- ODBC/JDBC — generic connectivity for unsupported databases
- Web Data Connector (WDC) — JavaScript API for connecting to web APIs
- Published Data Sources — shared data sources on Tableau Server/Cloud
- Spatial files — shapefiles, GeoJSON for map visualisations
- Statistical files — R
.rdata, SAS.sas7bdat, SPSS.sav
8. What is the difference between a Join and a Blend in Tableau?
| Join | Data Blend | |
|---|---|---|
| Mechanism | SQL JOIN at the database level | Left join performed in Tableau |
| Data sources | Same data source | Different data sources |
| Primary source | N/A | Left (primary) data source |
| Granularity | Controlled by join keys | Secondary aggregated to primary's level |
| Performance | Generally faster | Can be slower; aggregation step |
| Accuracy | Exact row-level | May lose rows without matching keys |
Blending limitation: Secondary source fields appear with an orange icon and are always aggregated to the primary source's granularity.
9. What is a Union in Tableau and when would you use it?
A Union appends rows from one table to another — equivalent to SQL UNION ALL. Use it when:
- You have identical schemas split across multiple files (e.g., monthly CSVs)
- Data for different time periods is stored in separate tables
In Tableau Desktop: drag a second table to the canvas and drop it in the Union zone that appears below the first table.
Tableau adds a Sheet field automatically to track which source each row came from.
10. What is a Relationship in Tableau (introduced in version 2020.2)?
Relationships are the default way to combine tables in Tableau since version 2020.2, replacing the need to define joins upfront.
Key differences from Joins:
| Relationship | Join | |
|---|---|---|
| When evaluated | At query time, based on fields used | At data source creation |
| Granularity | Preserved per table | Rows multiplied if not careful |
| Nulls | Table with nulls retained | Depends on join type |
| Aggregation | Correct across all tables | Can double-count |
| Context | Multi-table model | Single flat table |
Relationships behave like smart, context-sensitive joins that prevent many common pitfalls (row duplication, incorrect aggregations).
Calculations
11. What are the types of calculations in Tableau?
| Type | Evaluated | Scope | Example |
|---|---|---|---|
| Basic (row-level) | Per row in data | Before aggregation | [Profit] / [Sales] |
| Aggregate | After aggregation | At viz level | SUM([Sales]) / SUM([Profit]) |
| Table Calculation | After all SQL | On viz result | RUNNING_SUM(SUM([Sales])) |
| LOD Expression | Controlled scope | Fixed/include/exclude | {FIXED [Region] : SUM([Sales])} |
12. What is a Table Calculation and what are common examples?
Table Calculations operate on the aggregated query result displayed in the view — they don't touch the database. They depend on the Compute Using setting (Table Across, Pane Down, specific dimension, etc.).
Common Table Calculations:
| Function | Description |
|---|---|
RUNNING_SUM() |
Cumulative total |
WINDOW_SUM() |
Sum across a window |
RANK() / RANK_DENSE() |
Rank within partition |
PERCENT_OF_TOTAL() |
Row value as % of total |
LOOKUP(expr, offset) |
Value from a relative row |
FIRST() / LAST() |
Index from start/end of partition |
SIZE() |
Number of rows in partition |
WINDOW_AVG() |
Average across window |
// Running sum of Sales partitioned by Category, ordered by Order Date
RUNNING_SUM(SUM([Sales]))
// Compute Using: Order Date, partitioned by Category
13. What is a Parameter in Tableau?
A Parameter is a dynamic value that can be inserted into a calculation, filter, or reference line. Parameters let users interact with the workbook without changing the underlying data.
Use cases:
- Let users switch between metrics:
IF [Metric Selector] = "Sales" THEN SUM([Sales]) ELSE SUM([Profit]) END - Dynamic top-N filter:
RANK(SUM([Sales])) <= [Top N] - Dynamic reference lines (target value)
- Date range selectors
Parameters are created via Analysis → Create Parameter and exposed via Show Parameter Control.
14. What are Sets in Tableau?
A Set is a custom field that defines a subset of members from a dimension based on conditions or manual selection.
| Type | How defined |
|---|---|
| Fixed set | Manually selected members |
| Computed set | Condition (top N, formula) — updates with data |
Sets produce In/Out members. You can use sets in calculated fields:
IF [Top Customers] THEN "Top" ELSE "Other" END
Set Actions (Tableau 2018.3+) let dashboard interactions update set membership dynamically.
15. What are Groups and Bins?
Groups — manually combine dimension members into higher-level categories.
Example: group "Alabama", "Alaska", "Arizona"… into "West", "East" regions when no region field exists.
Bins — create equal-width buckets from a numeric measure to build histograms.
Example: bin [Age] into 5-year intervals. Tableau creates a dimension like [Age (bin)].
LOD Expressions
16. What is an LOD (Level of Detail) Expression?
An LOD expression controls which dimensions a calculation uses, independent of the dimensions in the view. This solves problems where you need a different granularity than what the view shows.
Syntax:
{ [FIXED | INCLUDE | EXCLUDE] <dimension(s)> : <aggregate expression> }
17. What is the difference between FIXED, INCLUDE, and EXCLUDE?
| LOD Type | Behaviour | Use Case |
|---|---|---|
FIXED |
Uses only the specified dimensions | Anchored calculations independent of view |
INCLUDE |
Uses view dimensions plus specified dimensions | Finer granularity than view |
EXCLUDE |
Uses view dimensions minus specified dimensions | Coarser granularity than view |
Examples:
// FIXED: Customer's total sales regardless of what's in the view
{ FIXED [Customer Name] : SUM([Sales]) }
// INCLUDE: Sales per Order within the current view context
{ INCLUDE [Order ID] : SUM([Sales]) }
// EXCLUDE: Regional total regardless of sub-category in view
{ EXCLUDE [Sub-Category] : SUM([Sales]) }
18. Give a real-world FIXED LOD example.
Problem: Show the percentage of each customer's orders that contain returns.
// Step 1: Total orders per customer
{ FIXED [Customer Name] : COUNTD([Order ID]) }
// Step 2: Returned orders per customer
{ FIXED [Customer Name] : COUNTD(IF [Returned] = "Yes" THEN [Order ID] END) }
// Step 3: Ratio
[Returned Orders per Customer] / [Total Orders per Customer]
This works even when the view is at Product level — FIXED anchors the calculation to Customer regardless.
19. What is the order of operations (Order of SQL) in Tableau?
Tableau evaluates filters in this order (highest to lowest precedence):
- Extract Filters — applied when extract is created
- Data Source Filters — applied to all sheets using the data source
- Context Filters — create a temporary table; top-N and fixed LODs respect this
- Dimension Filters — filter on categorical fields
- Measure Filters — filter on aggregated measures
- Table Calculation Filters — filter after table calcs are computed
Critical: FIXED LOD expressions are evaluated before dimension filters but after context filters. This is why FIXED may include filtered-out values — unless you use a context filter.
20. How do you ensure a FIXED LOD respects a dashboard filter?
By default, FIXED LODs ignore dimension filters. To make them respect a filter, promote that filter to a Context Filter (right-click → Add to Context). Context filters run before LOD computation.
Filters
21. What are the different types of filters in Tableau and their order?
| Filter Type | Purpose | Notes |
|---|---|---|
| Extract Filter | Subset data at extract creation | Permanent until rebuild |
| Data Source Filter | Apply to entire workbook | Across all sheets |
| Context Filter | Creates a temporary subset | LODs and top-N respect this |
| Dimension Filter | Filter categorical fields | After LOD evaluation |
| Measure Filter | Filter aggregated measures | After aggregation |
| Table Calculation Filter | Filter computed results | Last to run |
22. What is a Context Filter?
A Context Filter creates an independent subset of data that other filters, top-N sets, and LODs use as their universe. Without a context filter:
- Top-10 customers = top 10 out of ALL customers
- With a context filter on Region = "West": top 10 out of West customers only
To create: right-click a filter pill → Add to Context (turns grey).
Performance note: Context filters create a temporary table — useful for filtering large extracts to a smaller working set.
23. What is the difference between a data source filter and a dimension filter?
| Data Source Filter | Dimension Filter | |
|---|---|---|
| Scope | All sheets using this data source | Current sheet only |
| Position in order | Before all sheet-level filters | After LOD/context |
| Use case | Security row filtering, always-exclude data | Sheet-specific slicing |
Visualisations
24. How do you create a dual-axis chart in Tableau?
- Add a measure to the Rows shelf (creates a chart)
- Drag a second measure to the Rows shelf
- Right-click the second pill → Dual Axis
- Right-click the secondary axis → Synchronize Axis (if needed)
- On the Marks card, change each measure's mark type independently
Common use: bars for sales, line for profit margin on the same chart.
25. What are Reference Lines, Reference Bands, and Reference Distributions?
| Description | |
|---|---|
| Reference Line | Horizontal/vertical line at a fixed value, average, median, or parameter |
| Reference Band | Shaded area between two values (e.g., target range) |
| Reference Distribution | Multiple quantile lines (percentiles, standard deviations) |
| Box Plot | Automated quartile distribution using reference distribution |
Add via Analytics Pane → drag to viz.
26. What chart types can Tableau create and when should you use each?
| Chart Type | Best For |
|---|---|
| Bar chart | Compare categories |
| Line chart | Trends over time |
| Scatter plot | Correlations between measures |
| Heat map | Density across two dimensions |
| Treemap | Part-to-whole with hierarchy |
| Bubble chart | Three variables (X, Y, size) |
| Gantt chart | Project timelines |
| Box plot | Distributions and outliers |
| Bullet chart | Actual vs target |
| Waterfall chart | Running totals with additions/subtractions |
| Histogram | Distribution of a single measure |
| Map | Geographic data |
27. How do you create a calculated field for Year-over-Year growth?
// Current year sales
{ FIXED YEAR([Order Date]) : SUM([Sales]) }
// Previous year using LOOKUP (Table Calculation approach)
(SUM([Sales]) - LOOKUP(SUM([Sales]), -1)) / ABS(LOOKUP(SUM([Sales]), -1))
// LOD approach
([This Year Sales] - [Last Year Sales]) / [Last Year Sales]
Format as percentage. Set Compute Using to Year for the Table Calculation version.
28. What is a Trend Line and how is it different from a Reference Line?
| Trend Line | Reference Line | |
|---|---|---|
| Purpose | Statistical model fit | Static or aggregate value marker |
| Model types | Linear, logarithmic, exponential, polynomial, power | N/A |
| Shows | R-squared, p-value | Value label only |
| Interaction | Changes with filtered data | Can be static or dynamic |
Add via Analytics Pane → Trend Line. Right-click to edit the model or describe the trend.
Dashboards
29. What are Dashboard Actions and what types exist?
Dashboard Actions create interactivity between sheets and external targets:
| Action Type | Behaviour |
|---|---|
| Filter Action | Selection in source sheet filters target sheet(s) |
| Highlight Action | Selection highlights related marks in target |
| URL Action | Opens a URL (web page, email, custom protocol) |
| Go to Sheet Action | Navigate to another sheet/dashboard |
| Parameter Action | Selection updates a parameter value |
| Set Action | Selection updates a Set's members |
Configure via Dashboard → Actions. Trigger on hover, select, or menu.
30. What is the difference between tiled and floating objects on a dashboard?
| Tiled | Floating | |
|---|---|---|
| Layout | Grid-based, snap to layout | Free position anywhere |
| Responsiveness | Adapts to container resizing | Fixed pixel position |
| Best for | Structured layouts | Overlays, custom annotations |
Containers (horizontal/vertical) are key for responsive tiled layouts — they distribute space among children proportionally.
31. How do you make a dashboard responsive for different screen sizes?
- Device Layouts — define separate layouts for Desktop, Tablet, Phone
- Automatic sizing — set dashboard size to "Automatic" (expands to browser)
- Range sizing — specify min/max dimensions
- Containers — use nested horizontal/vertical containers with percentage widths
- Avoid absolute pixel sizes for text and objects when possible
Performance
32. What causes a Tableau dashboard to load slowly?
Common causes and fixes:
| Cause | Fix |
|---|---|
| Live connection to slow database | Switch to extract |
| Too many marks on one sheet | Aggregate, filter, or split into multiple sheets |
| Complex LOD expressions | Simplify or pre-compute in database/Prep |
| Many dashboard sheets loading simultaneously | Use dashboard actions to load sheets on demand |
| Unused data source joins | Remove unnecessary joins |
| High-cardinality dimensions | Reduce members, use bins/groups |
| Non-aggregated data | Enable "Aggregate Measures" in Analysis menu |
| Too many cross-database joins | Pre-join in Tableau Prep |
33. How do you use Performance Recording in Tableau Desktop?
- Help → Settings and Performance → Start Performance Recording
- Interact with the dashboard or workbook
- Help → Settings and Performance → Stop Performance Recording
Tableau opens a new workbook showing a Gantt chart of query execution, layout computation, and rendering times. Look for:
- Long Query bars → optimise the data source or SQL
- Long Layout bars → simplify dashboard layout
- Long Rendering bars → reduce mark count
34. How can extracts be optimised for performance?
| Technique | How |
|---|---|
| Extract filters | Exclude irrelevant rows at creation |
| Aggregation | Enable "Aggregate data for visible dimensions" |
| Materialise calculations | Compute calculated fields in the extract |
| Hide unused fields | Reduce extract size |
| Incremental refresh | Refresh only new rows (requires an incrementing key) |
| Partition | Large Hyper extracts can be partitioned logically |
35. What is the difference between a full refresh and an incremental refresh?
| Full Refresh | Incremental Refresh | |
|---|---|---|
| Replaces | All data | Appends new rows only |
| Speed | Slower | Faster for large datasets |
| Requires | Nothing extra | An incrementing column (date, ID) |
| Use when | Data can be deleted/modified | Append-only data (logs, events) |
| Risk | Higher database load | Won't capture updates to existing rows |
Tableau Server & Cloud Administration
36. What is a Project in Tableau Server/Cloud?
A Project is a container for organising workbooks, data sources, and flows — similar to a folder. Projects support:
- Nested projects (subfolders)
- Permissions set at project level (inherit to child projects and content)
- Content ownership and certification
Best practice: one project per team or business domain, with a locked permissions model so only admins can grant access.
37. What are the user roles in Tableau Server/Cloud?
| Role | Capabilities |
|---|---|
| Server Admin | Full access to all content, settings, users |
| Site Admin Creator | Manage a site, create/publish content |
| Site Admin Explorer | Manage site, can't create content |
| Creator | Publish workbooks, connect to data sources |
| Explorer (Can Publish) | View and edit published content, can publish |
| Explorer | View and interact with published content |
| Viewer | View and interact (limited); cannot edit or publish |
| Unlicensed | No access |
Roles are additive — higher roles include all lower capabilities.
38. How do Row-Level Security (RLS) work in Tableau?
Option 1: User Filters — filter data based on USERNAME() or USERDOMAIN():
[Sales Rep] = USERNAME()
Apply this as a data source filter.
Option 2: Entitlement table — join a permissions table to your data:
// Entitlement table: email, region_access
// Filter: [email] = USERNAME()
Option 3: VPD (Virtual Private Database) — database-native RLS passed via initial SQL.
Option 4: Data policies (Tableau Data Management) — centralised RLS on published data sources.
39. What is content certification in Tableau Server/Cloud?
Certification marks a data source or workbook as trusted and approved for use across the organisation. Certified content:
- Displays a certification badge
- Surfaces higher in search results
- Can include a certification note and certifier name
Only Publisher or Admin-level users with permission can certify content. It's used to steer users away from duplicate/unofficial data sources.
40. What are Subscriptions and Data-Driven Alerts?
| Feature | Description |
|---|---|
| Subscription | Scheduled email snapshot of a view/dashboard (PDF or PNG) |
| Data-Driven Alert | Email triggered when a measure crosses a threshold |
Subscriptions are time-based (daily at 8am). Alerts are condition-based (notify when Sales < 10,000). Both require a configured SMTP server on Tableau Server.
Advanced
41. What is Tableau Prep and when should you use it vs Desktop?
Tableau Prep Builder is a visual ETL (Extract, Transform, Load) tool for data preparation before connecting to Tableau Desktop.
| Task | Tableau Desktop | Tableau Prep |
|---|---|---|
| Clean/reshape raw data | Limited | ✅ (cleaning steps, scripts) |
| Union many files | Basic | ✅ (wildcard union) |
| Complex joins across sources | Limited | ✅ (visual join editor) |
| Pivot columns to rows | Basic | ✅ (multi-field pivot) |
| Deduplicate | Manual calc | ✅ (Remove Duplicates step) |
| Schedule automated refreshes | No | ✅ (via Prep Conductor) |
| Visualise results interactively | ✅ | No (profile only) |
42. What is the difference between SUM and TOTAL in Tableau?
SUM([Sales]) — aggregates the Sales field at the current view's granularity.
TOTAL(SUM([Sales])) — a Table Calculation that returns the total across the current partition (similar to WINDOW_SUM).
// Percentage of total using TOTAL
SUM([Sales]) / TOTAL(SUM([Sales]))
TOTAL respects Compute Using settings; use { FIXED : SUM([Sales]) } if you need an absolute total independent of view structure.
43. How do you handle NULL values in Tableau calculations?
// Replace NULL with 0
ZN([Profit])
// Custom null handling
IFNULL([Discount], 0)
// Conditional
IF ISNULL([Region]) THEN "Unknown" ELSE [Region] END
In filters: NULLs are excluded by default in dimension filters. Uncheck "Exclude Null Values" in the filter dialogue to include them.
44. What are the string functions available in Tableau?
| Function | Description | Example |
|---|---|---|
LEFT(str, n) |
First n characters | LEFT([Name], 3) |
RIGHT(str, n) |
Last n characters | RIGHT([Name], 4) |
MID(str, start, len) |
Substring | MID([SKU], 3, 5) |
LEN(str) |
Length | LEN([Email]) |
UPPER / LOWER |
Case conversion | LOWER([Country]) |
TRIM / LTRIM / RTRIM |
Remove whitespace | TRIM([City]) |
REPLACE(str, old, new) |
Find and replace | REPLACE([Code], "-", "") |
CONTAINS(str, sub) |
Boolean substring test | CONTAINS([Product], "Pro") |
STARTSWITH / ENDSWITH |
Prefix/suffix test | STARTSWITH([SKU], "A") |
SPLIT(str, delim, part) |
Split on delimiter | SPLIT([Email], "@", 2) |
REGEXP_MATCH |
Regex match (some DBs) | REGEXP_MATCH([Phone], "^\d{10}$") |
45. What are date functions in Tableau?
| Function | Description |
|---|---|
TODAY() |
Current date |
NOW() |
Current date and time |
YEAR([Date]) |
Year number |
MONTH([Date]) |
Month number (1–12) |
DAY([Date]) |
Day of month |
DATEPART('quarter', [Date]) |
Quarter (1–4) |
DATEDIFF('day', [Start], [End]) |
Difference in date parts |
DATEADD('month', 3, [Date]) |
Add date parts |
DATENAME('month', [Date]) |
Month name string |
DATETRUNC('month', [Date]) |
Truncate to period start |
ISDATE(str) |
Boolean date check |
46. What is the INDEX() function used for?
INDEX() returns the position of the current row in the Table Calculation partition (1, 2, 3…). Common uses:
// Show only every nth row (label every 5th)
IF INDEX() % 5 = 0 THEN SUM([Sales]) END
// Dynamic top-N with parameter
IF INDEX() <= [Top N Parameter] THEN SUM([Sales]) END
// Colour alternating rows
IF INDEX() % 2 = 0 THEN "Even" ELSE "Odd" END
Set Compute Using to control the partition direction.
47. What is the difference between WINDOW_AVG and RUNNING_AVG?
| WINDOW_AVG | RUNNING_AVG (=RUNNING_SUM/INDEX) | |
|---|---|---|
| Scope | All rows in the partition | Rows up to and including current |
| Result | Same for all rows | Changes per row |
| Use case | Show overall average on every row | Cumulative moving average |
// Moving 3-period average
WINDOW_AVG(SUM([Sales]), -2, 0) // previous 2 + current
48. How do you publish a data source to Tableau Server/Cloud?
In Tableau Desktop:
- Server → Publish Data Source (or via the data source tab right-click)
- Choose the target server, project, and name
- Set permissions (inherit from project or customise)
- Optionally embed credentials or prompt users
- Set extract refresh schedule (if applicable)
- Click Publish
Published data sources can be used by multiple workbooks and centrally governed.
49. What are the common anti-patterns in Tableau development?
| Anti-pattern | Problem | Fix |
|---|---|---|
| Overusing LOD expressions | Complex, slow queries | Pre-compute in database or Prep |
| Too many marks in one view | Slow rendering, visual noise | Aggregate or filter data |
| Live connection to transactional DB | Slow, query-per-filter | Use extract |
| Embedding large images | Workbook file bloat | Host images externally |
| Building everything in one workbook | Hard to maintain | Split by subject area |
Using EXCLUDE when FIXED is needed |
Wrong granularity | Understand LOD semantics |
| No context filter with top-N | Wrong top-N universe | Add context filter |
| Hardcoded values in calculations | Brittle, hard to update | Use Parameters |
50. How does Tableau compare to Power BI and Looker?
| Feature | Tableau | Power BI | Looker |
|---|---|---|---|
| Best for | Exploration, pixel-perfect viz | Microsoft ecosystem, self-service | Code-first, governed metrics |
| Language | VizQL, Tableau Calc | DAX / Power Query | LookML |
| Pricing (creator) | ~$75/user/mo | ~$10/user/mo | Custom (enterprise) |
| Self-hosting | Tableau Server | Power BI Report Server | Looker (GCP) |
| Data model | In-tool (relationships) | In-tool (Power Query) | LookML (version-controlled) |
| Embedded analytics | Tableau Embedded | Power BI Embedded | Looker Embedded |
| Learning curve | Moderate–High | Moderate | High (requires LookML) |
| Mobile | Tableau Mobile | Power BI Mobile | Looker Mobile |
| Git integration | Limited | None (native) | Full (LookML in Git) |
Common mistakes
| Mistake | Impact | Fix |
|---|---|---|
| Confusing row-level vs aggregate calcs | Wrong results | Know which calculation type to use |
| Forgetting LOD respects context, not dimension filters | FIXED returns unfiltered values | Add context filter |
| Using data blending when join is possible | Aggregation artefacts | Use joined data source |
| Not synchronising dual axes | Misleading visualisation | Right-click axis → Synchronize |
| Using too many detail marks | Performance issues | Aggregate to needed granularity |
| Not refreshing extract after schema change | Broken calculations | Rebuild extract after schema changes |
| Hardcoding date ranges | Dashboard breaks over time | Use relative date filters or parameters |
| Over-nesting table calculations | Difficult to debug | Break into intermediate calculations |
Tableau vs Power BI vs Looker vs Metabase
| Tableau | Power BI | Looker | Metabase | |
|---|---|---|---|---|
| Type | Commercial BI | Commercial BI | Enterprise semantic layer | Open source BI |
| Strengths | Exploration, viz quality | M365 integration, price | Governed metrics, LookML | Ease of use, free tier |
| Weaknesses | Price, Microsoft gap | Tableau viz flexibility | Learning curve, cost | Scale, enterprise features |
| Self-hosted | Tableau Server | Report Server | Yes (GCP) | Yes |
| SQL required | No | No | Yes (LookML) | Optional |
FAQ
Q: What is the difference between COUNTD and COUNT in Tableau?COUNT counts all non-null values (can include duplicates). COUNTD counts distinct values. Use COUNTD([Order ID]) for unique order count, COUNT([Order ID]) for total rows with an order.
Q: Can you use Python or R in Tableau?
Yes, via TabPy (Python) or Rserve (R). Configure the connection in Help → Settings and Performance → Manage Analytics Extension Connection. Then use SCRIPT_INT, SCRIPT_REAL, SCRIPT_STR, SCRIPT_BOOL table calculations.
Q: What is a "Mark" in Tableau?
A mark is a single data point rendered on the canvas — a bar segment, a dot, a line point. The number of marks = combinations of dimension values in the view. High mark counts slow rendering.
Q: How do you show the top 10 products by sales?
- Drag Product to Rows, SUM(Sales) to Columns.
- In the filter dialogue for Product → Top tab → By field: SUM(Sales) top 10.
- If other filters are active, add the main filter to Context first.
Q: What is Tableau's hyper file vs the older .tde format?.hyper (introduced Tableau 10.5) is the modern extract format. It uses a columnar storage engine with better compression, faster queries, and support for partial appends. .tde files are automatically converted to .hyper on first use in modern versions.
Q: How do you version-control Tableau workbooks?.twb files are XML and can be committed to Git. Use .twb (not .twbx) for version control — .twbx is a binary ZIP. Tools like Tableau Document API or Workbook Formatter can help normalise XML for cleaner diffs. Tableau Cloud/Server also maintains revision history natively.