Relate Your Data
Relationships are a dynamic, flexible way to combine data from multiple tables for analysis. A relationship describes how two tables relate to each other, based on common fields, but doesn’t merge the tables together. When a relationship is created between tables, the tables remain separate, maintaining their individual level of detail and domains.
Think of a relationship as a contract between two tables. When you’re building a viz with fields from these tables, Tableau brings in data from these tables using that contract to build a query with the appropriate joins.
Learn more: The ability to combine data using relationships is an important feature of Tableau's new data modeling capabilities. For more information, see What's Changed with Data Sources and Analysis(Link opens in a new window). Learn more about how relationships work in these Tableau blog posts:
- Relationships, part 1: Introducing new data modeling in Tableau(Link opens in a new window)
- Relationships, part 2: Tips and tricks(Link opens in a new window)
- Relationships, part 3: Asking questions across multiple related tables(Link opens in a new window)
Watch a video: For an introduction to using relationships in Tableau, see this 5-minute video.
Note: The interface for editing relationships shown in this video differs slightly from the current release but has the same functionality.
Action Analytics(Link opens in a new window) also provides helpful video podcasts on using relationships in Tableau. For an introduction, see Why did Tableau Invent Relationships?(Link opens in a new window) Click "Video Podcast" in the Action Analytics website Library(Link opens in a new window) to see other podcasts.
What are relationships?
Relationships are the flexible, connecting lines created between the logical tables in your data source. Some people affectionately call relationships "noodles," but we usually refer to them as "relationships" in our help documentation.
We recommend using relationships as your first approach to combining your data because it makes data preparation and analysis easier and more intuitive. Use joins only when you absolutely need to(Link opens in a new window).
Relationships provide several advantages over using joins for multi-table data:
- You don't need to configure join types(Link opens in a new window) between tables. You only need to select the fields to define the relationship.
- Related tables remain separate and distinct; they aren’t merged into a single table.
- Relationships use joins, but they’re automatic. Tableau automatically selects join types based on the fields being used in the visualization. During analysis, Tableau adjusts join types intelligently and preserves the native level of detail in your data.
- Tableau uses relationships to generate correct aggregations and appropriate joins during analysis, based on the current context of the fields in use in a worksheet.
- Multiple tables at different levels of detail are supported in a single data source. You can build data models that contain more tables, and reduce the number of data sources needed to build a viz.
- Unmatched measure values aren’t dropped (no accidental loss of data).
- Using relationships prevents data duplication and filtering issues that can sometimes result from joins.
- Tableau generates queries only for the data that is relevant to the current view.
For related information, see:
Requirements for relationships
- When relating tables, the fields that define the relationships must have the same data type.
- You can't define relationships based on geographic fields.
- Circular relationships aren't supported in the data model.
- You can't define relationships between published data sources.
Factors that limit the benefits of using related tables are:
- Dirty data in tables (for example, tables that weren't created with a well-structured model in mind and contain a mix of measures and dimensions in multiple tables) can make multi-table analysis more complex.
- Using data source filters limits Tableau's ability to do join culling in the data. Join culling is a term for how Tableau simplifies queries by removing unnecessary joins.
- Tables with many unmatched values across relationships.
- In Tableau version 2024.2 and later, you can model shared dimensions and use multiple base tables using multi-fact relationships. For more information, see About Multi-fact Relationship Data Models(Link opens in a new window), When to Use a Multi-fact Relationship Model(Link opens in a new window), and Build a Multi-fact Relationship Data Model(Link opens in a new window).
Data that can't be related
Most relational connection types are completely supported. Cubes, SAP HANA (with OLAP attribute), JSON, and Google Analytics are limited to a single logical table in Tableau 2020.2. Stored procedures can only be used within a single logical table.
Published data sources can't be related to each other.
Unsupported
- Cube databases don’t support the new logical layer. Connecting to a cube offers the same experience as pre-2020.2.
- Stored Procedures: Don't support federation, relationships, or joins. They’re represented in a single logical table, and don't allow opening the Join/Union canvas (physical layer).
- Splunk: Doesn't support left joins (and therefore relating logical tables).
- JSON: Doesn't support federation, custom SQL, joins, or relationships (only unions).
- Data sources that don’t support LOD calcs. For more information, see Data Source Constraints for Level of Detail Expressions(Link opens in a new window).
Limited support
- Salesforce and WDC Standard Connections: These are represented as joined tables within a logical table. Adding these connections is currently supported only for single, logical table data sources. Standard connections can’t join to an existing table.
- SAP HANA: Doesn't currently support relating logical tables when the connection has the OLAP attribute set.
Create and define relationships
For a single base table model, after you drag the first table to the top-level canvas of the data source, each new table that you drag to the canvas must be related to an existing table. When you create relationships between tables in the logical layer, you’re building the data model for your data source.
In version 2024.2 and later: For multiple base table models, each new table you add to the model must be related in at least one base table tree. For more information, see Build a Multi-fact Relationship Data Model(Link opens in a new window).
Create a relationship
You create relationships in the logical layer of the data source. This is the default view of the canvas that you see in the Data Source page.
The steps in this topic specifically address how to set up relationships for a single base table model.
in version 2024.2 and later, you can build a single base table model or a multiple base table model. For information on how to create multi-fact relationships with multiple base tables, see Build a Multi-fact Relationship Data Model(Link opens in a new window).
-
Drag a table to the canvas.
For a single base table model: The first table that you add to the canvas becomes the base table. All other tables that you add will be related to that table.
For a multiple base table model: You will need to decide which tables are base tables. To create another base table, drag a table from the left pane to the New Base Table drop area. For more information, see Build a Multi-fact Relationship Data Model(Link opens in a new window).
-
Drag another table to the canvas. When you see the "noodle" between the two tables that you want to relate, drop that table.
The relationship settings open below the canvas in the Table Details pane. Tableau automatically attempts to create the relationship based on existing key constraints and matching fields to define the relationship. If it can't determine the matching fields, you’ll need to select them.
To change the fields: Select a field pair, and then select from the list of fields below to set a new pair of matching fields.
To add multiple field pairs: After you select the first pair, select Close, and then select Add more fields.
If no constraints are detected, a Many-to-many relationship is created and referential integrity is set to Some records match. These default settings are a safe choice and provide the most flexibility for your data source. The default settings support full outer joins and optimize queries by aggregating table data before forming joins during analysis. All column and row data from each table becomes available for analysis.
In many analytical scenarios, using the default settings for a relationship gives you all of the data you need for analysis. Using a many-to-many relationship will work even if your data is many-to-one or one-to-one. If you know the particular cardinality and referential integrity of your data, you can adjust the Performance Options settings(Link opens in a new window) to describe your data more accurately and optimize how Tableau queries the database.
-
Add more tables following the same steps, as needed.
After you have built your multi-table, related data source, you can dive into exploring that data. For more information, see How Analysis Works for Multi-table Data Sources that Use Relationships and Troubleshooting multi-table analysis(Link opens in a new window).
Note: The Salesforce connector doesn't support inequality operators. Google Big Query and MapR connectors support non-equal joins starting with version 2021.4. The MapR connector is deprecated as of version 2022.3.
Move a table to create a different relationship
To move a table, drag it next to a different table. Or, hover over a table, select the arrow, and then select Move.
Tip: Drag a table over the top of another table to replace it.
Change the root or base table of a data model
You can swap the root table (version 2020.2 through 2024.1) or a base table (version 2024.2 and later) with another downstream table. Right-click another logical table in the data model, and then select Swap with root or Swap with base table (table name) to make the change.
Remove a table from a relationship
To move a table, hover over a table, select the arrow, and then select Remove.
Deleting a table in the canvas automatically deletes its related descendants as well.
View a relationship
- Hover over the relationship line (noodle) to see the matching fields that define it. You can also hover over any logical table to see what it contains.
Edit a relationship
- Select a relationship line to open the relationship settings in the Table Details pane. You can add, change, or remove the fields used to define the relationship. Add more field pairs to create a compound relationship.
- To add multiple field pairs: After you select the first pair, select Close, and then select Add more fields.
Tips on creating relationships
- The first table that you drag to the canvas becomes the root or base table for the data model in your data source. After you drag out the base table, you can drag out more tables in any order. You’ll need to consider which tables should be related to each other, and the matching field pairs that you define for each relationship.
- Before you start creating relationships, viewing the data from the data source before or during analysis can be useful to give you a sense of the scope of each table. For more information, see View Underlying Data. You can also use View Data to see a table's underlying data when a relationship is invalid.
- If you're working with data in a star schema, it can be helpful to drag the fact table out first to make it the base table, and then relate dimension tables to that base table.
- Each relationship must be made of at least one matched pair of fields. Add multiple field pairs to create a compound relationship. Matched pairs must have the same data type in the underlying database. Changing the data type in the Data Source page doesn’t change this requirement. Tableau uses the data type from the database for queries.
- Relationships can be based on calculated fields. You can also specify how fields should be compared by using operators when you define the relationship.
- Deleting a table in the canvas automatically deletes its related descendants as well.
- You can swap the root table (version 2020.2 through 2024.1) or a base table (version 2024.2 and later) with another downstream table. Right-click another logical table in the data model, and then select Swap with root or Swap with base table (table name) to make the change.
Validate relationships in your data source
You have several options for validating your data model for analysis. As you create the model for your data source, we recommend going to the sheet, selecting that data source, and then building a viz to explore record counts, unmatched values, nulls, or repeated measure values. Try working with fields across different tables to ensure everything looks how you expect it to.
What to look for:
- Are your relationships in the data model using the correct matching fields for their tables?
- What are the results of dragging different dimensions and measures into the view?
- Are you seeing the expected number of rows?
- Would compound relationships make the relationship more accurate?
- If you changed any of the Performance Options settings from the default settings, are the values in the viz what you expect? If not, check the settings, or reset to the default.
Options for validating relationships and the data model:
- Every table includes a count of its records, as a field named TableName(Count), at the level of detail for that table. To see the count for a table, drag its Count field into the view. To see the count for all tables, select the Count field for each table in the Data pane, and then click the Text Table in Show Me.
- Click View Data in the Data pane to see the number of rows and data per table. Also, before you start creating relationships, viewing the data from the data source before or during analysis can be useful to give you a sense of the scope of each table. For more information, see View Underlying Data(Link opens in a new window).
- Drag dimensions onto rows to see the Number of Rows in the status bar. To see unmatched values, click the Analysis menu, and then select Table Layout > Show Empty Rows or Show Empty Columns. You can also drag different measures to the view, such as <YourTable>(Count) from one of the tables represented in your viz. This ensures that you’ll see all values of the dimensions from that table.
Tip: If you would like to see the queries that are being generated for relationships, you can use the Performance Recorder in Tableau Desktop.
- Click the Help menu, and then select Settings and Performance > Start Performance Recording.
- Drag fields into the view to build your viz.
- Click the Help menu, and then select Settings and Performance > Stop Performance Recording.
- In the Performance Summary dashboard, under Events Sorted By Time, click an "Executing Query" bar and view the query below.
Another more advanced option is to use the Tableau Log Viewer(Link opens in a new window) on GitHub. You can filter on a specific keyword using end-protocol.query
. For more information, start with the Tableau Log Viewer wiki page(Link opens in a new window) in GitHub.
Dimension-only visualizations
When using a multi-table data source with related tables: If you build a dimension-only viz, Tableau uses inner joins and you won't see the full unmatched domain.
To see partial combinations of dimension values, you can:
- Use Show Empty Rows/Columns to see all of the possible rows. Click the Analysis menu, and then select Table Layout > Show Empty Rows or Show Empty Columns.
- Add a measure to the view, such as <YourTable>(Count) from one of the tables represented in your viz. This ensures that you’ll see all values of the dimensions from that table.
For more information, see Analysis in Multi-table vs. Single-table Data Sources(Link opens in a new window) and Troubleshooting multi-table analysis(Link opens in a new window).
Relationships (logical tables) versus joins (physical tables)
While similar, joins and relationships behave differently in Tableau, and are defined in different layers of the data model(Link opens in a new window). You create relationships between logical tables at the top-level, logical layer of your data source. You create joins between physical tables in the physical layer of your data source.
Joins merge data from two tables into a single table before your analysis begins. Merging the tables together can cause data to be duplicated or filtered from one or both tables; it can also cause NULL rows to be added to your data if you use a left, right, or full outer join. When analyzing joined data, you need to make sure that you correctly handle the effects of the join on your data.
Note: When duplication or the filtering effects of a join might be desirable, use joins to merge tables together instead of relationships. Double-click a logical table to open the physical layer and add joined tables.
A relationship describes how two independent tables relate to each other but doesn’t merge the tables together. This avoids the data duplication and filtering issues that might occur in a join and can make working with your data easier.
relationships | joins |
---|---|
Defined between logical tables in the Relationship canvas (logical layer) | Defined between physical tables in the Join/Union canvas (physical layer) |
Don't require you to define a join type | Require join planning and join type |
Act like containers for tables that are joined or unioned | Are merged into their logical table |
Only data relevant to the viz is queried. Cardinality and referential integrity settings can be adjusted to optimize queries. | Run as part of every query |
Level of detail is at the aggregate for the viz | Level of detail is at the row level for the single table |
Join types are automatically formed by Tableau based on the context of analysis. Tableau determines the necessary joins based on the measures and dimensions in the viz. | Join types are static and fixed in the data source, regardless of analytical context. Joins and unions are established prior to analysis and don’t change. |
Rows aren’t duplicated | Merged table data can result in duplication |
Unmatched records are included in aggregates, unless explicitly excluded | Unmatched records are omitted from the merged data |
Create independent domains at multiple levels of detail | Support scenarios that require a single table of data, such as extract filters and aggregation |
Relationships versus blends
While both relationships and blends support analysis at different levels of detail, they have distinct differences. One reason you might use blends over relationships is to combine published data sources for your analysis.
relationships | blends |
---|---|
Defined in the data source | Defined in the worksheet between a primary and a secondary data source |
Can be published | Can't be published |
All tables are equal semantically | Depend on selection of primary and secondary data sources, and how those data sources are structured. |
Support full outer joins | Only support left joins |
Computed locally | Computed as part of the SQL query |
Related fields are fixed | Related fields vary by sheet (can be customized on a sheet-by-sheet basis) |
Features of different options for combining data: Relationships, joins, and blends
There are many ways to combine data tables, each with their own preferred scenarios and nuances.
Relate |
Use when combining data from different levels of detail.
|
Join |
Use when you want to add more columns of data across the same row structure.
|
Union |
Use when you want to add more rows of data with the same column structure.
|
Blend |
Use when combining data from different levels of detail.
|