内容:

假设存在引用完整性

  • 版本 :2022.1 及更高版本

适用于: Tableau Desktop

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

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

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

销售额

产品 ID(外键)销售额交易日期11002012 年 10 月 1 日120002012 年 10 月 2 日2502012 年 9 月 30 日3102012 年 8 月 21 日

产品目录

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

由于销售的所有产品都必须在“产品目录”中列出,因此销售表中的每一行在“产品目录”表中都有一个对应的行。这两个表通过产品 ID 联接后,您会得到与下面类似的表:

产品 ID产品名称产品 ID销售额交易日期
110 英寸平板电脑11002012 年 10 月 1 日
110 英寸平板电脑120002012 年 10 月 2 日
2智能手机2502012 年 9 月 30 日
3台灯3102012 年 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]

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