假设存在联接的引用完整性

有些情况下,您可以通过从“数据”菜单中选择“假设存在引用完整性”选项来改善联接的查询性能。如果使用此选项,Tableau 将仅在视图中的字段明确引用查询中的联接表时才包含该表。

如果您知道数据具有引用完整性(请参见下面的定义)但数据库未强制或无法强制引用完整性,则适合于使用此设置。如果您可以选择在数据库中配置引用完整性,那么这是一个比使用此设置更好的选择,因为它可以同时提高数据库和 Tableau 的性能。Tableau 中的“假设存在引用完整性”选项只影响 Tableau 端的性能。如果您的数据没有引用完整性而您启用了此设置,则查询结果可能不可靠。

若要了解什么是引用完整性,请假设连接到包含两个表的销售数据:“销售额”和“产品目录”。这两个表如下所示:

销售额

产品 ID(外键) 销售额 交易日期
1 100 2012 年 10 月 1 日
1 2000 2012 年 10 月 2 日
2 50 2012 年 9 月 30 日
3 10 2012 年 8 月 21 日

产品目录

产品 ID(主键) 产品名称
1 10 英寸平板电脑
2 智能手机
3 台灯
4 内存条

由于销售的所有产品都必须在“产品目录”中列出,因此销售表中的每一行在“产品目录”表中都有一个对应的行。这两个表通过产品 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]

此简化的查询通常可更快地返回结果,因为它省去了联接操作。此选项仅影响内部联接,不影响只包含一个表的数据源。

 

感谢您的反馈!