---
schema_version: "1"
id: a2d29a0c10d9d9533f5c41600cda0696d783953b6bb645449010e7a8e34d6df7
title: 构建多事实关系数据模型
collection: tableau
version: current
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/current/zh-cn/server/datasource_mfr_build.md
canonical_url: https://help.tableau.com/current/server/zh-cn/datasource_mfr_build.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 32f9c2a2b6c6ab7bde4fca43365c8a2e592b437ffd1415c90bc71ba560cafae5
description: Build a multi-fact relationship data model using multiple base tables connected by shared tables.
---
[跳转到主要内容](#main-content)

# 构建多事实关系数据模型

分析通常涉及汇总彼此没有直接关系但都与相同的常见信息（例如日期或地点）相关的数据表。这种类型的分析有时被称为具有共享维度的多事实分析。

若要在 Tableau 中执行此类分析，请创建一个使用通过共享表连接的多个基表的数据源。

- _基表_是“数据源”选项卡上数据模型中最左侧的表。有关如何确定使用哪些表作为基表的指导，请参见[何时使用多事实关系模型](https://help.tableau.com/current/server/zh-cn/datasource_mfr_when_to_use.htm)。
- _共享表_是具有多个传入关系的下游表。这些表包含可在可视化项分析过程中将不相关的字段拼接在一起的字段。“Date”（日期）和“Location”（地点）是常用共享表的示例。

## 构建模型

构建多事实关系数据模型本质上与创建任何其他使用关系的数据源相同，但增加了两个部分：附加基表和共享表的多个传入关系。

1. [连接到数据](https://help.tableau.com/current/pro/desktop/zh-cn/basicconnectoverview.htm)。如果您的表不都在同一个数据库中，可以使用 [多个数据连接](https://help.tableau.com/current/pro/desktop/zh-cn/datasource_plan.htm#tableau-data-sources)。
2. 将表拖到画布上以创建第一个基表。
3. 将另一个表从左侧窗格拖到“新基表”放置区域。
    
    ![具有现有基表和新基表放置区域的数据建模画布](/tableau/current/zh-cn/server/zh-cn/Img/mfr_new_base_table.png)
    
    Tableau 显示一条警告，提示您正在构建具有多个基表的数据模型。我们建议您仅在数据需要时才设置多基表模型。否则，使用单基表模型来避免多基表模型带来的复杂性。
    
    ![具有两个基表的数据模型，其中一个具有多个基表的警告](/tableau/current/zh-cn/server/zh-cn/Img/mfr_multi_base_table_warning.png)
4. 将另一个字段拖到画布上并将其与其中一个基表关联。[如果需要，配置每个关系](https://help.tableau.com/current/pro/desktop/zh-cn/relate_tables.htm#create-and-define-relationships)。
    
    ![添加到数据模型的下游表](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_downstream.png)
5. 将鼠标悬停在尚未相关的基表上以显示加号（昵称“肉丸”）。
    
    ![“Clubs”（俱乐部）基表，上面有一个光标，并显示加号“肉丸”](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_meatball_base.png)
6. 将加号图标拖到共享表上，即可创建新的传入关系（也称为“面条”）。
    
    ![“肉丸”将新的“面条”拖到下游的现有表上](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_meatball.png)
7. _可选修：_继续添加下游表和基表。单击并拖动加号图标来根据需要构建共享表。

**注意**：您也可以先构建单个基表模型，然后再添加更多基表，而不是从基表开始。

## 探索模型

具有多个基表的数据模型是通过关系构建的，但并非所有表都具有相同程度的相关度。每个基表定义一个_树_，其中包含与该基表相关的每个表，无论是直接相关表还是相关表的下游表。共享表存在于多个树中。有关相关程度的详细信息，请参见[关于多事实关系数据模型](https://help.tableau.com/current/server/zh-cn/datasource_mfr_multiple_base_tables.htm)。

当您查看具有多个基表的模型时，有多种选项可用于探索和管理数据模型。当数据模型复杂时，这些选项特别有用。

![具有四个基表和多个共享表以及非共享下游表的数据模型](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_complex_model.png)

具有四个基表、多个共享表和下游表的复杂数据模型示例。下游表在基表之间既有共享的，也有不共享的。

2024.2 为数据模型引入了一些新的布局细节。在多事实关系数据模型中，关系捆绑在一起以帮助跟踪表具有多少个传入关系。与非共享表相比，共享表（以及下游共享表）具有更粗的轮廓。

### 术语

多基表数据模型中的表具有特定的角色。基表和共享表是多事实关系数据模型中必须存在的唯一表。（如果没有多个基表，它就不是多事实关系数据模型。如果没有连接基表的共享表，它就不是有效的数据模型。）

由于这些模型通常具有复杂的特性，建立一套共享的术语体系是非常有帮助的：

- _基表_位于最左边，没有传入关系。
    - 在示例中，“Inventory”（库存）、“Marketing”（营销）、“Sales”（销售）和“Support”（支持）是基表。
- _子基表_位于基表和共享表之间。
    - 在示例中，“Parts”（零件）是一个子基表。
- _共享表_具有多个传入关系。
    - 在示例中，“Products”（产品）、“Dates”（日期）、“Customer”（客户）和“Supplier”（供应商）是共享表。
- _下游共享表_恰好有一个传入关系，并且在它们上游某处有一个共享表。
    - 在示例中，“Subcategory”（子类）和“Category”（类别）是下游共享表。
- _下游非共享表_恰好有一个传入关系，并且其上游没有共享表。
    - 在示例中，没有下游非共享表。

![一个数据模型，列出了基表、子基表、下游非共享表、共享表和下游共享表等术语。](/tableau/current/zh-cn/server/zh-cn/Img/mfr_terminology.png)

测试您的理解：识别示例数据源中的表类型

![具有四个基表和多个共享表以及非共享下游表的数据模型](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_complex_model.png)

- **基表**：“Inventory”（库存）、“Marketing”（营销）、“Sales”（销售）和“Support”（支持）
- **子基表：**“Parts”（零件）
- **共享表：**“Products”（产品）、“Dates”（日期）、：“Customer”（客户）和“Supplier”（供应商）
- **下游共享表：**“Subcategory”（子类）和“Category”（类别）
- **下游非共享表：**无

### 识别关系树

将鼠标悬停在表上以突出显示与其相关的表。Tableau 强调该表的树并弱化不相关的表。

![复杂模型，其中一个基表的树突出显示，其他表则变暗](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_highlightedtree.png)

“Marketing”（营销）基表树由两个共享表（“Dates”（日期）和“Products”（产品））以及下游共享表（“Subcategory”（子类）和“Category”（类别））组成。

### 查看关系详细信息

将鼠标悬停在某个关系或一组关系上即可在工具提示中查看详细信息。

![一个三重“面条”包，带有一个工具提示，其中每行显示每一种关系的详细信息](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_noodle_bundle.png)

与“Products”（产品）表的传入关系包括与“Inventory”（库存）、“Marketing”（营销）和“Sales”（销售）基表的三种单独的关系。

### 选择关系

当选择一个关系时，它会在画布中以蓝色突出显示，并且其详细信息将显示在“表详细信息”窗格中。您可以在“表详细信息”窗格中[检查或修改关系子句](https://help.tableau.com/current/pro/desktop/zh-cn/relate_tables.htm#create-a-relationship)。

有多种选择关系的方式：

- 单击画布中的关系线（面条）。每个关系都有一个只选择那条“面条”的可点击区域。
- 右键单击或按住 Control 键单击画布中的表以打开其菜单。选择“选择关系”选项并选择您想要的表的关系。
- 单击画布中的关系包即可调出持久工具提示（将鼠标悬停在包上即可调出工具提示，单击使其持续显示）。然后在工具提示详细信息中选择一行来突出显示模型中的该关系。
- 打开“表详细信息”窗格工具栏中的菜单，并选择所需的关系。您还可以使用此菜单选择特定的表以在窗格中查看其预览。
    
    ![“表详细信息”窗格中的菜单](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_table_details_menu.png)

### 与基表交换

基表和共享表之间的关系中的中间表使您可以选择将下游表与基表交换。这纯粹是视觉上的变化，有助于概念理解，并不会改变数据模型的结构。

右键单击或按住 Control 键单击下游表，并选择“与基表交换（表名）”。交换选项也仅存在于下游表中，而不存在于基表中。

交换选项不适用于交换后会改变数据模型的表，例如共享表或下游共享表。只有下游非共享表或子基表才可以与基表交换。

#### _示例_

在此示例中，**“Parlor Info”（店铺信息）**和**“Ice Cream Sales”（冰淇淋销售）**可以交换表而不改变数据模型的基本结构。不可交换其他表。

- “Ice Cream Sales”（冰淇淋销售）表与“Parlor Info”（店铺信息）和“Date”（日期）共享表相关。
- “Parlor Info”（店铺信息）与“Ice Cream Sales”（冰淇淋销售）和“Location”（地点）共享表相关。
- “Weather”（天气）与“Date”（日期）和“Location”（地点）共享表相关。

这两个模型在概念上是等效的：

![两个版本的等效数据模型，其中基表与其非共享下游表交换](/tableau/current/zh-cn/server/zh-cn/Img/mfr_swapbase_icecream.png)

### 折叠基表

您还可以将关系路径或树折叠为其基表，以简化数据模型的视图。

在基表上单击“折叠”![](/tableau/current/zh-cn/server/zh-cn/Img/mfr_icon_collapse.png) 或“展开”![](/tableau/current/zh-cn/server/zh-cn/Img/mfr_icon_expand.png) 按钮可以折叠或展开其整个树。或者，右键单击或按住 Ctrl 键单击下游表并选择 “折叠此路径” 或“折叠其他路径”。此选项在共享表或共享表的下游表上不可用。

将树折叠到其基表纯粹是视觉上的，不会触发“不相关的表”通知。折叠路径由带有堆叠表和“展开”按钮的基表表示。折叠会影响仅与该树相关的所有表和关系，因此与未折叠路径共享的表不会被隐藏。

使用“展开”![](/tableau/current/zh-cn/server/zh-cn/Img/mfr_icon_expand.png) 按钮重新打开基表和树中的所有内容。

![支持基表的树被折叠和展开](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_collapsetree_gif.gif)

## 疑难解答

### 创建单一数据源

所有表都必须以某种方式与整个数据源相关。如果有任何表未与整体数据模型相关，则会出现通知。通知将一直持续，直到没有表或树与数据模型的其余部分完全分离为止。当通知处于活动状态时，无法发布数据源，并且您无法在分析中使用该数据源。

您可以打开通知并设置“视觉上分离不相关的表”来识别哪些表触发了通知。当您有一个复杂的模型并且需要确定哪个表或哪些表尚未与数据模型的其余部分相关时，此选项很有用。

#### _示例_

在[构建模型](https://help.tableau.com/current/pro/desktop/zh-cn/datasource_mfr_build.htm#Build)下的步骤中，在添加关系以连接第二个基表之前，步骤 4 中会出现一条通知。

![不相关的表通知消息](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_unrelated_alert.png)

将“视觉上分离不相关的表”设置为“启用”会将表**“Clubs”（俱乐部）**移至“不相关的表”线下方。将**“Clubs”（俱乐部）**与**“Students”（学生）**相关可解决通知。

![一个数据模型，在标有“不相关的表”的红色虚线下有一个不相关的表](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_visuallyseparate.png)

#### 解决循环

即使某些表彼此之间不直接相关，整个数据模型也必须是一个内聚的整体。在这个例子中，每个基表定义了一个树，但没有连接它们的共享表。这不是一个有效的分析模型。

![具有两个基表的数据模型，其不同的树不重叠](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_unrelated1.png)

两组相关表需要通过共享表合并...

![相同的数据模型，现在与共享表连接](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_unrelated2.png)

...或者需要将数据模型创建为两个独立的数据源。

![相同的数据模型，分为两个数据源](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_unrelated3.png)

### 数据模型限制

多基表模型中不支持表之间的某些关系路径。如果您在尝试在表上创建第二个传入关系时无法放下“肉丸”，请确保您尝试创建的结构在 Tableau 中受支持。不受支持的模型示例包括：

#### 循环

不支持循环（从上游表到同一个下游表存在多条关系路径）。这种不支持的结构有时被称为领结结构。若要在 Tableau 中对表之间的这种关系进行建模，请通过将下游表转换为另一个基表来使用多个基表而不是领结。

![一个领结图和另一个将下游表更改为附加基表的图](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_bowtie_tableauified.png)

数据模型必须是_有向无环图_。这意味着表的每个传入关系都必须可追溯到上游的不同基表。

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 34%;"><col style="width: 33%;"><col></colgroup><tbody><tr><td><b>不支持</b>。表 X 具有两个传入关系，它们均来自基表 A 的下游表</td><td><b>支持</b>。表 S 和 T 都具有多个传入关系，但每个关系都来自不同的基表。</td><td><b>支持</b>。尽管从视觉上看起来像是一个循环，但表 S 和表 T 的传入关系可以追溯到不同的基表。</td></tr><tr><td><img src="https://help.tableau.com/current/server/zh-cn/Img/mfr_build_cycle1.png" alt="由于循环而不支持的数据模型"></td><td><img src="https://help.tableau.com/current/server/zh-cn/Img/mfr_build_cycle2.png" alt="支持的数据模型，其中领结转换为第二个基表"></td><td><img src="https://help.tableau.com/current/server/zh-cn/Img/mfr_build_cycle3.png" alt="支持的数据模型，具有可追溯到不同基表的共享表的传入关系"></td></tr></tbody></table>

#### 嵌套共享表

不支持嵌套共享表。共享表（具有多个传入关系的表）下游的任何表只能有一个传入关系。

![不支持的模型，带有嵌套共享表](/tableau/current/zh-cn/server/zh-cn/Img/mfr_build_nestedshared.png)

不支持。表 T 位于共享表的下游，无法接收其他传入关系。