联接疑难解答
注意:如果您的联接是错误计数的数据,它可能是一个符号,您应改用关系。有关关系的详细信息,请参见关联您的数据。有关 Tableau 如何处理来自不同详细级别(例如多对多关系)的数据组合的信息,请参见关联基数和引用完整性。
过度计数的值或重复数据
连接到多个表并将这些表联接在一起时,将会建立一个非标准化数据版本。在某些情况下,Tableau 将多个表视为一个表。如果多个表被视为一个表,则在联接表之后将会查询所有表。这些值导致值被过度计数。
例如,假设您有两个表。第一个表包含员工信息,例如员工 ID 和工资。第二个表包含组织信息,例如部门名称。
表 1
| 表 2
|
如果针对“Employee ID”(员工 ID)联接这些表,则某个员工的工资将计数多次,因为该员工与多个部门关联。
Employee ID | 名称 | Salary | Department | Hire Date | Organization |
20107 | Wilson, Henry | 61,000 | Support | 7/28/2015 | Operations |
20107 | Wilson, Henry | 61,000 | 销售额 | 8/25/2016 | Operations |
这是一对多关联基数的示例(表 1 中的一个员工 ID 在表 2 中具有多个结果)。有关表之间的关联基数的详细信息,请参见使用性能选项优化关系查询。
为了帮助解决此问题,您可以执行以下操作之一:
关联数据:您可以使用关系,而不是创建可能会使数据重复的联接。有关详细信息,请参见关联您的数据。
更改聚合: 您可以根据您的分析使用 MIN 或 AVG 聚合来移除重复计数。
例如,如果将“Salary”(工资)的聚合从 SUM 更改为 MIN 或从 SUM 更改为 AVG。
创建用于移除重复值的计算字段:您可以创建一个计算,将要复制的字段的总和除以导致重复的字段实例数。
例如,系统按 Wilson, Henry 的“Employee ID”(员工 ID)的实例数复制了“Salary”(工资)值。在此情况下,请将视图中的“Salary”(工资)替换为使用以下公式的计算字段:
SUM ([Salary])/ COUNT ([Employee ID])
。您也可以使用详细级别表达式来删除重复数据。有关详细信息,请参见 Tableau 知识库中的使用 LOD 计算移除重复数据(链接在新窗口中打开)。
使用自定义 SQL: Tableau 支持使用自定义 SQL 连接到一个数据源的多个表。在使用 GROUP BY 子句联接表之前,可以预先聚合这些表。此选项需要一些有关编写 SQL 查询的知识以及数据库专家的帮助(如果可能)。有关如何从 Tableau 连接到自定义 SQL 查询的详细信息,请参见连接到自定义 SQL 查询。
表联接和跨数据库联接断开
在(从同一数据源中或使用跨数据库联接)联接表之前,请确保联接键的数据类型匹配。如果联接键的数据类型不匹配,则联接将断开,由红色的感叹号和错误文本“联接字段之间的类型不匹配”指明。若要修复断开的联接,请遵循以下建议之一:
您可以在联接对话框中更改字段(包括其数据类型)的格式,以通过创建联接计算使连接键匹配。联接计算支持计算子集,以允许您修改要合并的一个或多个表中的联接键格式。若要创建联接计算,请单击具有断开联接的表之间的联接图标,再单击其格式需要修改的字段,然后选择“创建联接计算”。有关详细信息,请参见联接疑难解答。
对于文本或基于 Excel 的数据,请使用数据网格中的数据类型菜单修改联接键中文本或 Excel 字段其中之一的数据类型。
仅限 Tableau Desktop:对于大多数连接,您可以使用 CAST () 之类的函数以及“转换为自定义 SQL”选项更改联接键中其中一个字段的数据类型。只有当数据源仅包含连接时,“转换为自定义 SQL”选项才可用。在这种情况下,请移除第二个连接,然后选择“数据”>“转换为自定义 SQL”。