---
schema_version: "1"
id: 3a72489b3815f6306e928cda6ac87df9e8dd0f83cc81bc5fb5cb8054bade2482
title: 提高跨数据库联接的性能
collection: tableau
version: current
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/current/zh-cn/public/desktop/joins_xbd_perf.md
canonical_url: https://help.tableau.com/current/public/desktop/zh-cn/joins_xbd_perf.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 55f6e0ef5af7ff92ee6a95a10d46f29f26be1f1627ac28ac79c30abe7149979c
description: Improve performance for cross-database joins between databases and files.
---
[跳转到主要内容](#main-content)

# 提高跨数据库联接的性能

> [!IMPORTANT]
> 
> **重要信息：**此功能会暂时将数据移动到 Tableau 之外。请确保您连接到的数据库来自受信任的源。

在单个数据库和单个文件之间联接数据时，Tableau 可以选择使用数据库而不是 Hyper 执行联接来提高性能。此默认设置允许 Tableau 选择最快的方法（Hyper 或连接的数据库）。如果 Tableau 使用连接的数据库，则会将来自文件连接的数据转移到数据库中的临时表，并在该处执行联接。

### 功能条件

仅当满足以下条件时，使用连接的数据库进行联接的选项才可用：

- 数据源由一个或多个基于文件的连接和单个基于 SQL 的连接组成。
- 要合并的文件必须是以下文件类型之一：Microsoft Excel、PDF 或文本（.csv、.txt、.tsv 或 .tab）。
- 连接的数据库是以下各项之一：
    - Microsoft SQL Server
    - Oracle
    - PostgreSQL
    - Vertica
    - Teradata
- 在 **Web 制作过程中：**“允许用户使用 Web 制作 ”选项已启用，

## 为跨数据库联接更改首选选项

1. 连接到第一个数据源。
    - 在 **Tableau Desktop 中：**在开始页面上的“连接”下，连接到支持的文件类型或支持的数据库类型。此步骤会在 Tableau 数据源中创建第一个连接。
    - **在 Web 制作过程中：**从“主页” 或“浏览”页面中，单击“创建”\>“工作簿”新建一个工作簿。然后连接到数据。此步骤会在 Tableau 数据源中创建第一个连接。
2. 选择要连接到的文件或数据库，然后双击表或将表拖到画布上。
    
    ![将表添加到联接。](/tableau/current/zh-cn/public/desktop/zh-cn/Img/joins_addtable.gif)
3. 在左侧窗格中的“连接”下，单击“添加”按钮（在 Web 制作中为 ![添加数据源图标。](/tableau/current/zh-cn/public/desktop/zh-cn/Img/add_web_datasource.png)）以将第二个连接添加到 Tableau 数据源。
    
    ![“添加连接”菜单。](/tableau/current/zh-cn/public/desktop/zh-cn/Img/cross_database_join4.png)
    
    将显示“跨数据库联接”选项。
    
    ![“编辑”按钮，用于访问跨数据库联接设置。](/tableau/current/zh-cn/public/desktop/zh-cn/Img/cross_database_join.png)
    
    **注意：**如果未看到此选项，请检查是否仅使用受支持的数据源类型，以及是否至少有两个数据源（一个数据库和一个或多个受支持类型的文件）。
4. 若要更改 Tableau 执行联接的方式，请在“跨数据库联接”选项旁边单击“编辑”。
5. 在“跨数据库联接”对话框中，选择以下选项之一，然后单击“确定”：
    
    - 始终在数据库中执行联接。此选项强制 Tableau 使用实时数据库执行联接。
    - 让 Tableau 决定在何处联接。此选项为默认选项，允许 Tableau 选择最快的选项来执行联接 - Hyper 或您连接到的数据库。
        
        ![跨数据库联接设置，可选择使用 Tableau 或现有数据库，或者仅使用 Tableau。](/tableau/current/zh-cn/public/desktop/zh-cn/Img/cross_database_join2.png)
    
    “多连接”面板上的“跨数据库联接”选项将更新以反映您的选择。
    
    ![“编辑”按钮，用于访问跨数据库联接设置。](/tableau/current/zh-cn/public/desktop/zh-cn/Img/cross_database_join3.png)
    
    > [!IMPORTANT]
    > 
    > **重要信息：**如果选择“让 Tableau 决定在何处联接”，Tableau 将在执行联接时选择最快的选项。此行为由一组条件（包括联接类型）预先确定。例如，Tableau 始终为非内部联接选择“Hyper”。
    
    如果 Tableau 使用 Hyper 来执行联接，则此过程将在后台进行，并且不会显示任何指示器来确定联接在何处执行。
6. 通过从一个数据源中选择字段、选择联接运算符并从添加的表中选择字段来添加一个或多个联接子句。检查联接子句以确保它反映您要连接表的方式。

## 关于使用多连接数据源

使用多连接数据源就像使用任何其他数据源一样，本部分中讨论了一些警告。

### 合并连接内的数据

若要合并数据，您必须使用同一连接中的文本表或 Excel 表。也就是说，您不能合并不同数据库中的表。在 Tableau Desktop 中，您可以合并不同 Excel 工作簿中的表以及不同目录中的文件。有关详细信息，请参见[使用通配符搜索来合并表 (Tableau Desktop)](https://help.tableau.com/current/public/desktop/zh-cn/union.htm#union_wildcard)。

如果需要合并来自不同数据库的数据，请使用 [Tableau Prep](https://www.tableau.com/zh-cn/support/releases/prep)。

### 计算

排序规则是指确定字符串值应如何进行比较和排序的数据库规则。通常，排序规则由数据库进行处理。然而，当使用跨数据库联接时，您可能会联接具有不同排序规则的列。

例如，假设您的跨数据库联接使用联接键，该联接键由 SQL Server 中区分大小写的列和 Oracle 中不区分大小写的列组成。在这种情况下，Tableau 会将某些排序规则映射到其他项，以尽量正确解释值。

跨数据库联接中使用以下规则：

- 如果某一列使用 Unicode 国际化组件 (ICU) 排序规则标准，则 Tableau 会使用其他列的排序规则。
- 如果所有列都使用 ICU 排序规则标准，则 Tableau 会使用左表的列的排序规则。
- 如果列不使用 ICU 排序规则标准，则 Tableau 会使用二进制排序规则。二进制排序规则是指数据库的区域设置和列的数据类型，用于确定字符串值应如何进行比较和排序。

#### 保持 Excel 数据区分大小写

如果在执行联接时需要保持 Excel 数据区分大小写，请从“数据”菜单中启用“保持字符大小写(Excel)”选项。

![Tableau 工作簿已打开，并且“数据”菜单已展开。从“数据”菜单中，“保持字符大小写(Excel)”选项突出显示。](/tableau/current/zh-cn/public/desktop/zh-cn/Img/Excel_character_case.png)

选择此选项后，Tableau 将保留大小写并唯一标识具有不同大小写的值（而不是将这些值合并），从而产生不同的行数。

例如，假设有一个包含“House”的工作表，以及另一个包含“house”和“HOUSE”的工作表。默认情况下，Tableau 会忽略大小写，并将“house”的所有三种变体视为相同。如果启用了“保持字符大小写(Excel)”选项，当您联接表时，Tableau 会保留字符大小写差异。“House”、“house”和“HOUSE”被视为不同的值。

**注意：**此选项适用于所有 Tableau 支持的语言，并且不依赖于操作系统的区域设置。此选项仅可用于 Microsoft Excel 数据源。

### 计算和多连接数据源

在多连接数据源中只能使用一部分计算。

- **在 Tableau Desktop 中：**您可以使用特定计算，条件是：

- 多连接数据源中的所有连接都支持
- Tableau 数据提取支持。

- **在 Web 制作（Tableau Cloud 和 Tableau Server）中：**如果多连接数据源中的所有连接都支持，您可以使用特定计算。

### 存储过程

存储过程不可用于多连接数据源。

### 从连接内对数据进行透视

若要对数据进行透视，您必须使用同一连接中的文本列或 Excel 列。也就是说，您不能在透视中包括不同数据库中的列。

### 使数据提取文件成为第一个连接（仅限 Tableau Desktop）

连接到多连接数据源中的数据提取文件时，请确保与数据提取 (.hyper) 文件的连接是第一个连接。这样会保留可能属于数据提取的任何自定义项，包括默认属性更改、计算字段、组、别名等。

**注意：**如果必须连接到多连接数据源中的多个数据提取文件，则只会保留第一个连接的数据提取中的自定义项。

### 包含基于文件的数据连接的多连接数据源的数据提取（仅限 Tableau Desktop）

如果要发布的多连接数据源的数据提取包含基于文件的数据（如 Excel 数据）连接，则选择“包括外部文件”选项会将基于文件的数据副本作为数据源的一部分放在服务器上。在这种情况下，可以下载基于文件的数据的副本，并且其他用户可以访问其内容。如果您有意从数据提取中排除的基于文件的数据中存在敏感信息，_请勿_在发布数据源时选择**“包括外部文件”**。

![“将数据源发布到 Tableau Server”对话框，其中突出显示了包含外部文件的选项。](/tableau/current/zh-cn/public/desktop/zh-cn/Img/join_multiconnection_include_external_files.png)

## 关于查询和跨数据库联接

对于每个连接，Tableau 会向联接中的数据库发送独立查询。结果存储在一个临时表中，采用数据提取文件格式。

> [!IMPORTANT]
> 
> **重要信息**：跨数据库联接可能会在数据库之间移动数据。确保您要联接的数据库是可信来源。

例如，假设您创建与两个表（dbo.listings 和 reviews$）的连接。这些表存储在两个不同的数据库（SQL Server 和 Excel）中。Tableau 会在每个连接中单独查询数据库。数据库执行查询，并应用诸如筛选器和计算等自定义项，Tableau 将每个连接的结果存储在一个临时表中。在此示例中，FQ\_Temp\_1 是与 SQL Server 的连接的临时表，FQ\_Temp\_2 是与 Excel 的连接的临时表。

<table><tbody><tr><td><p style="text-align: left;"><b>SQL Server 表</b></p><p style="text-align: left;"><img src="https://help.tableau.com/current/public/desktop/zh-cn/Img/join_query_temp1.png" alt="从 dbo 数据库查询列表表的 SELECT 语句。"></p></td><td><p><b>Excel 表</b></p><img src="https://help.tableau.com/current/public/desktop/zh-cn/Img/join_query_temp2.png" alt="演示对评论表执行选择操作的数据流程图。"></td></tr></tbody></table>

当您执行跨数据库联接时，Tableau Desktop 会联接这些临时表。这些临时表是 Tableau 执行跨数据库联接所必需的。

联接了这些表之后会应用“前 N 个”筛选器，以将数据网格中显示的值数限制为前 1000 行。应用此筛选器是为了帮助保持数据网格的响应性以及“数据源”页面的整体性能。

**联接的表**

![说明了依次执行联接、TopN 和选择操作的顺序的数据流程图。](/tableau/current/zh-cn/public/desktop/zh-cn/Img/join_query_join.png)