假设存在联接的引用完整性
有些情况下,您可以通过从“数据”菜单中选择“假设存在引用完整性”选项来改善联接的查询性能。如果使用此选项,Tableau 将仅在视图中的字段明确引用查询中的联接表时才包含该表。
如果您知道数据具有引用完整性(请参见下面的定义)但数据库未强制或无法强制引用完整性,则适合于使用此设置。如果您可以选择在数据库中配置引用完整性,那么这是一个比使用此设置更好的选择,因为它可以同时提高数据库和 Tableau 的性能。Tableau 中的“假设存在引用完整性”选项只影响 Tableau 端的性能。如果您的数据没有引用完整性而您启用了此设置,则查询结果可能不可靠。
若要了解什么是引用完整性,请假设连接到包含两个表的销售数据:“销售额”和“产品目录”。这两个表如下所示:
销售额
| 产品目录
|
由于销售的所有产品都必须在“产品目录”中列出,因此销售表中的每一行在“产品目录”表中都有一个对应的行。这两个表通过产品 ID 联接后,您会得到与下面类似的表:
产品 ID | 产品名称 | 产品 ID | 销售额 | 交易日期 |
1 | 10 英寸平板电脑 | 1 | 100 | 2012 年 10 月 1 日 |
1 | 10 英寸平板电脑 | 1 | 2000 | 2012 年 10 月 2 日 |
2 | 智能手机 | 2 | 50 | 2012 年 9 月 30 日 |
3 | 台灯 | 3 | 10 | 2012 年 8 月 21 日 |
现在,假设您构建了一个视图来按区域查看销售额。默认情况下,将“销售额”字段拖到视图中可创建如下所示的查询:
SELECT SUM([Sales Amount]) FROM [Sales] S INNER JOIN [Product Catalog] P ON S.ProductID = P.ProductID
选择“假设存在引用完整性”即表示您告知 Tableau 联接的表具有引用完整性。换句话说,您确认“销售”表始终有一行与“产品目录”表相匹配。因为这是真的,因此 Tableau 不需要“产品目录”表中的任何信息来返回这些结果。将“销售额”字段拖到视图中后,Tableau 可将查询简化为:
SELECT SUM([Sales Amount]) FROM [Sales]
此简化的查询通常可更快地返回结果,因为它省去了联接操作。此选项仅影响内部联接,不影响只包含一个表的数据源。