---
schema_version: "1"
id: f746b3aa118dcafbc93e57efb1025da960713fb762075d164bc5eb8fd629a757
title: 使用關係的資料來源的分析方式
collection: tableau
version: next
locale: zh-tw
portal_url: https://docs.salesforce.com/tableau/next/zh-tw/public/desktop/datasource_multitable_analysis_overview.md
canonical_url: https://help.tableau.com/v0.0/public/desktop/zh-tw/datasource_multitable_analysis_overview.htm
source_site: help.tableau.com
content_type: documentation
content_hash: e5fe0274307a0c65dc329c598308dba7a4e41ef4cf8db2559b78218464b69405
description: Understand how analysis works in data sources that use relationships across multiple tables.
---
[跳至主要內容](#main-content)

# 使用關係的資料來源的分析方式

使用具有多個相關資料表的資料來源時，會影響分析在 Tableau 中的運作方式。因為多個相關表具有獨立的領域，且保有其原生的詳細程度，因此當您將欄位拖曳至檢視中時：

- 資料會在其自然的詳細資訊層級查詢。
- 僅查詢與視覺效果相關的資料。
- 表之間的關係會影響查詢的結果。建置視覺效果的流程會因資料模型中資料表之間的關聯方式（或它們是否直接關聯）而有所不同。

有關資料來源增強功能的概觀以及使用關係的介紹，請觀看這段 5 分鐘的影片。

**附註**：本影片和本主題中顯示的編輯關係介面與當前版本略有不同，但功能相同。

可以在[善加運用關係](https://help.tableau.com/v0.0/public/desktop/zh-tw/datasource_dont_be_scared.htm)和以下 Tableau 部落格文章中瞭解關係如何工作的詳情：

- [關係，第 1 部分：在 Tableau 中導入新的資料建模](https://www.tableau.com/zh-tw/about/blog/2020/5/relationships-part-1-meet-new-tableau-data-model)
- [關係，第 2 部分：提示和技巧](https://www.tableau.com/about/blog/2020/5/relationships-part-2-tips-and-tricks)
- [關係，第 3 部分：在多個關聯資料表中提問](https://www.tableau.com/about/blog/2020/6/relationships-part-3-asking-questions-across-multiple-related-tables)

另請參閱[「動作分析」](https://action-analytics.com/library/)中有關關係的影片播客，例如 [Tableau 為何發明關係？](https://action-analytics.com/ep-1-why-did-tableau-invent-relationships/)按一下[內容庫](https://action-analytics.com/library/)中的「影片播客」以查看更多資訊。

在 Tableau 版本 2024.2 及之後版本中，Tableau 資料模型支援透過多重要素關係進行多事實分析與共用維度。有關詳情，請參閱[關於多事實關係資料模型](https://help.tableau.com/current/pro/desktop/zh-tw/datasource_mfr_multiple_base_tables.htm)、[何時使用多事實關係模型](https://help.tableau.com/current/pro/desktop/zh-tw/datasource_mfr_when_to_use.htm)與[建置多事實關係資料模型](https://help.tableau.com/current/pro/desktop/zh-tw/datasource_mfr_build.htm)。

**備註：**您仍然可以在 Tableau 中建立單一表資料來源。您可以使用聯結、聯集、自訂 SQL 等機制的組合來建置邏輯資料表。Tableau 中的單一資料表分析行為並未變更。對包含維度和度量混合的單一邏輯資料表進行分析的運作方式，與 Tableau 2020.2 預發行版本的運作方式相同。

## 分析注意事項

### 驗證關係

有多個選項可用來驗證資料模型以進行分析。為資料來源建立模型時，我們建議您前往工作表並建立視覺效果，以探索記錄計數、預期資料、不相符的值、null 或重複的度量值。透過使用不同資料表中的欄位，確保所有內容都符合預期。

要查找的內容：

- 您在資料模型中的關係是否使用符合其表的正確欄位？
- 新增多個相符欄位配對，是否會使關係更精確?
- 將不同的維度和度量拖曳至檢視中，會產生什麼結果？
- 您是否看到預期的列數？
- 若您已修改任何[效能選項設定](https://help.tableau.com/v0.0/public/desktop/zh-tw/datasource_relationships_perfoptions.htm)，您在視覺效果中看到的值是否符合預期？如果不是，您可能需要檢查設定，或重設為預設值。

驗證關係與資料模型的選項：

- 每個表在該表的詳細層級都會包含其記錄的計數，以名為 _TableName(Count)_ 的欄位表示。若要查看表的計數，請將「計數」欄位拖曳至檢視中。若要查看所有表的計數，請在「資料」窗格中，選取每個表的「計數」欄位，然後按一下「顯示」中的「文字表」。
- 按一下「資料」窗格中的**「檢視資料」**，以查看每個表的列數和資料。此外，在開始建立關係之前，在分析之前或期間檢視資料來源中的資料，可能有助於您瞭解每個表的範圍。有關詳情，請參閱[檢視基礎資料](https://help.tableau.com/v0.0/public/desktop/zh-tw/inspectdata_viewdata.htm)。
- 將維度拖曳到列上，即可在狀態列中查看「列數」。若要查看不符合的值，請按一下**「分析」**功能表，然後選取「表配置」\>「顯示空列」或「顯示空欄」。也可以將不同的度量拖曳到檢視中，例如從視覺效果中顯示的其中一個資料表中拖曳 _<YourTable>(Count)_。這樣可以確保您看到該資料表中所有維度的值。

**提示**：若要查看針對關係產生的查詢，請使用 Tableau Desktop 中的「效能記錄器」。

1. 按一下「說明」功能表，然後選取**「設定和效能」**\>**「啟動效能記錄」**。
2. 將欄位拖曳到檢視中以建立視覺效果。
3. 按一下「說明」功能表，然後選取**「設定和效能」**\>**「停止效能記錄」**。「效能記錄」工作簿將自動開啟。
4. 在「效能摘要」儀表板窗格中的「依時間排序的事件」下，按一下「執行查詢」列，並檢視下方查詢。

另一個更進階的選項，是使用 GitHub 上的 [Tableau 記錄檢視器](https://github.com/tableau/tableau-log-viewer)。可以使用 `end-protocol.query` 按特定關鍵字進行篩選。有關詳情，請先參閱 GitHub 中的 [Tableau 記錄檔檢視器 Wiki 頁面](https://github.com/tableau/tableau-log-viewer/wiki)。

### 僅維度視覺效果

將多表資料來源與相關資料表搭配使用時：如果建置僅維度的視覺效果，Tableau 會使用內部聯結，而且您無法看到完整的不相符網域。

若要查看維度值的部分組合，您可以：

- 使用「顯示空列/欄」以查看所有可能的列。按一下**「分析」**功能表，然後選取「表配置」\>「顯示空列」或「顯示空欄」。請注意，此設定也會觸發「日期」與「數位資料桶」欄位的密集化，這可能是不必要的。
- 將度量新增至檢視中，例如從視覺效果中顯示的其中一個資料表中拖曳 _<YourTable>(Count)_。這樣可以確保您看到該資料表中所有維度的值。

有關詳細資訊，亦請參閱[維度的不相符值行為可能會令您感到意外](https://help.tableau.com/v0.0/public/desktop/zh-tw/datasource_datamodel_whatschanged.htm#Unmatche)與[多資料表分析疑難排解](#Troubles)。

### 何時使用 LOD 計算與運算式

由於 Tableau 能夠瞭解資料表的詳細資料層級 (LOD)，因此您無需使用 LOD 計算來移除聯結中不需要的重複項。

您可能仍希望使用 LOD calcs 進行下列動作：

- 處理來源表中不當的重複資料。
- 計算多層彙總（例如，總和的平均值）
- 執列世代分析（例如，計算每位客戶的首次下單日期）

若 LOD 計算包含來自單一資料表的維度，則該 LOD 計算將顯示在「資料」窗格中其所屬的資料表中。

## 多資料表分析範例

以下範例組將示範如何跨多個相關表查詢資料。這個多表資料來源包含不同電影角色的演員演出簡短清單。

「演出」表中的列表示演員在特定電影中扮演了特定角色。在此資料集中，一個演員可以有零次或多次演出。

您可以在以下 Tableau 部落格文章中瞭解關係如何工作的詳情：

- [關係，第 1 部分：在 Tableau 中導入新的資料建模](https://www.tableau.com/zh-tw/about/blog/2020/5/relationships-part-1-meet-new-tableau-data-model)
- [關係，第 2 部分：提示和技巧](https://www.tableau.com/about/blog/2020/5/relationships-part-2-tips-and-tricks)

### 範例 1：聯結資料與相關資料的單一問題分析

在 2020.2 之前的 Tableau 中，資料來源可以是單一資料表，也可以是多個資料表聯結或聯集成的單一非標準化資料表。從 Tableau 2020.2 開始，Tableau 可以辨識並保留多資料表資料來源的個別標準化資料。這意味著資料表資料可保持獨立，每個資料表都會保留其原生詳細資料層級。以下範例說明了單一表與多表資料來源之間的分析差異。

此範例顯示三個電影資料表：「演出」、「演員」和「電影」。

![三個電影資料表，包括「演出」、「演員」和「電影」。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multitable_ex1.png)

這些資料表可以進行聯結：將「演出」資料表與「演員」資料表按「演員 = 演員」聯結，並將「演出」資料表與「電影」資料表按「電影 = 電影」聯結。如果聯結是完全外部聯結，就不會遺失任何列，最終輸出的外觀會如下所示。請注意，聯結子句中使用的欄位會顯示兩次。

![演出表與演員表（關於演員）以及演出表與電影表（關於電影）的完全外部聯結的輸出。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multitable_ex2.png)

以這種方式合併到單一表中的資料稱為非標準化或扁平。

這個聯結的資料是扁平資料。每列都會包含一位演員在一部電影中演出的一個角色（因此 John Rhys-Davies 在《魔戒三部曲：王者再臨》中有兩列，因為他扮演了兩個角色）；因此，資料的粒度為電影中的角色層級。多個列中的相關資訊會重複。《魔戒：王者歸來》的首映日期出現了兩次，因為資料集中有兩個來自該電影的角色。John Rhys-Davies 的身高列出五次，因為他的演員身份有 5 個不重複的角色/電影組合。

因此，這個扁平資料具有一些需要注意的特徵。例如，若您想繪製演員身高與其電影平均總收入的關係圖，可將「身高」置於欄中，「總收入」置於列中，然後計算「總收入」的平均值。但是，如果您這麼做，預設檢視看起來會不太對勁。在這裡，John Rhys-Davies 身高會是 925 公分，也就是超過 30 英尺！

![三位演員的平均總收入和身高的散佈圖。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multitable_ex3.png)

這是因為預設彙總為 SUM。資料中有 5 列是他的，因此我們會得出他真實身高 185 公分的 5 倍。您可以變更「身高」上的彙總（例如平均值或最小值）來解決此問題。這實際上只會傳回一列的值（因為所有列的值都相同）。

![三位演員的身高和平均總收入的散佈圖。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multitable_ex4.png)

變更彙總時，身高會更為逼真。但是，現在您必須注意平均總收入。請記住，Tableau 會將 John Rhys-Davies 身高的所有五列都列入考量。考慮他電影的平均總收入時，它不應該是五_列_資料的平均值，而應該是三部_電影_的平均值。您不想因為他一人分飾兩角就把《魔戒：王者歸來》的總收入計算兩次。但這就是所發生的狀況嗎？

快速計算一下，《魔戒》系列電影的平均值應該是 (869 + 923 + 1119)/3，或是 $970.3。但是，散佈圖中的值是 $990.6。目前的平均值來自五個列 (869 + 923 + 923 + 1119 + 1119)/5。

這個問題不像透過變更彙總來解決身高問題一樣容易。[詳細資料層級 (LOD) 運算式](https://help.tableau.com/v0.0/public/desktop/zh-tw/calculations_calculatedfields_lod.htm)可以變更 Tableau 查看的詳細資料層級，從預設 - 演出一直到電影層級。在我們來看，您可以將 LOD 總收入計算建立為 {FIXED \[Movie\] : MIN(\[Gross (USD millions)\])}，然後取得新的 LOD 總收入欄位的平均值。

LOD 運算式可以讀取為「對於每部電影，傳回其最低總收入」。這樣就能夠消除重複問題，因為即使檢視是以電影和演員組成，還是會一律傳回每部電影的總收入。

![三位演員的平均 LOD 總收入和身高的散佈圖。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multitable_ex5.png)

現在數字就正確了。John Rhys-Davies 身高 185 公分，他在此資料集中的電影平均總收入為 970.3。您需要瞭解資料為何會重複，以及 Tableau 如何彙總資料，才能確保傳回正確的值。

#### 多個表中的標準化資料

建立關係看起來類似於建立聯結，但 Tableau 不會將資料扁平化到單一資料表中，而是會始終注意資料表之間的關係。系統會在適當的詳細資料層級從每個表帶出資訊，並與其他資料建立關係。

在**「資料來源」**頁面上，您不會看到扁平表的「完整」網格檢視，因為它不存在。Tableau 會將所有三個資料表保持原樣，而且只會建立關係，並根據檢視的需求匯集所需資料。

![三個資料來源表，其中包含演員姓名、電影、總收入和身高。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multitable_ex6.png)

若要建立相同的散佈圖，請將「身高」和「總收入」拖到檢視中，並將「總收入」設為平均值。就這麼簡單。Tableau 會查看每個資料表的資料關聯方式，並推斷身高（按演員）應如何顯示和平均總收入（按電影）應如何計算。

![三位演員的身高和平均總收入的散佈圖。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multitable_ex7.png)

### 範例 2：單一表中的維度

如果視覺效果中的維度來自單一表，Tableau 就只會查詢一個表並顯示整個網域的結果。您可以新增度量，但仍然會看到整個網域。

例如，使用先前介紹的「電影演出」資料來源，將「演員」欄位新增至視覺效果中，會產生以下視覺效果：

![新增至列架中的「演員」欄位顯示一個包含演員姓名的資料表。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multi_ex2a.png)

由於視覺效果中的唯一維度是來自「演員」表，因此 Tableau 只會針對「演員」表執行查詢。「演員」資料表中的所有演員都會出現在視覺效果中，無論他們是否有任何演出。

![藍色方塊醒目提示演員表。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multi_ex2b.png)

將「演出演員」欄位透過 COUNT 彙總引入檢視中，會將其轉換為度量，並建立顯示演員演出次數的檢視。請注意，Sigourney Weaver 沒有任何演出，但她的名字仍然在檢視中。

![「演出演員」欄位作為欄架上的度量，會產生一個橫條圖，其中列出演員，但沒有演出計數。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multi_ex2c.png)

### 範例 3：來自多個表的維度

若檢視中的維度來自多個資料表，Tableau 會顯示關聯所有維度的資料表中的範圍。因此，您在範例 1 中看到的某些維度值會有所變更。

例如，將「電影」表中的欄位拖到視覺效果中會變更查詢。由於「電影」和「演員」表是因為「演出」表而相關，因此查詢只會傳回「演出」表中存在的「演員/電影」配對。

![演出表與演員表和電影表之間的關係。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multi_ex2d.png)

由於 Sigourney Weaver 在此資料集中沒有任何演出（因此與資料集中的任何電影都沒有關聯），「演員/電影」配對的視覺效果就不會顯示她：

![包含「演員」和「電影」欄位的列架會產生一個資料表，其中僅包含至少演出一次的演員。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multi_ex2e.png)

### 範例 4：無法依照維度拆分的度量

如果度量無法依照維度拆分，Tableau 就會在該維度間複製度量。

下一個視覺效果會依照電影顯示總收入金額。由於這兩個欄位都來自「電影」資料表，Tableau 只會查詢「電影」資料表。

![藍色方塊醒目提示電影表。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multi_ex2f.png)

「電影」資料表包含每部電影的已匯總總收入（《復仇者聯盟 3：無限之戰》的總收入在建立此資料集時尚未公佈，因此顯示為零）。

![使用電影表的橫條圖包括每部電影的彙總總收入。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multi_ex2g.png)

若將「演員」新增至此視覺效果，Tableau 會知道它無法按演員細分電影總收入，因為資料中沒有這種更細微的資訊。因此，Tableau 會顯示每部電影的總收入，而且會在演員之間重複顯示。

![使用電影和演員表的橫條圖顯示每部電影的電影總收入（並按演員複製）。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multi_ex2h.png)

### 範例 5：與度量並非以階層方式相關的維度

將「電影」維度從前一個視覺效果中移除後，會查詢每位演員的電影總收入總和。所得的結果是演員演出過之每部電影的彙總電影總收入。

在這種情況下，「演員」和「電影總收入」之間不存在階層關係——多位演員可能會出演同一部電影。例如，Benedict Cumberbatch 和 Chris Hemsworth 都在《奇異博士》中演出。在此案例中，Tableau 會將《奇異博士》的電影總收入包括在這兩位演員的總數中。

由於相同的影片總收入值包含在多位演員的總計中，因此 Tableau 無法直接計算這些值的總和。

![橫條圖顯示每位演員的電影總收入。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multi_ex2i.png)

但是，顯示此視覺效果的總數時，請注意：Tableau 會正確計算電影總收入，且不會包括重複的電影。

![資料表計算不包括重複電影的電影總收入。](/tableau/next/zh-tw/public/desktop/zh-tw/Img/data_model_multi_ex2j.png)

## 多資料表分析疑難排解

多表的相關表可能會有下列情況。下表說明了已知的情況，以及如何對分析進行疑難排解的高階說明。

| 分析情況 |   | 描述 |
| --- | --- | --- |
| 僅維度視覺效果的內部聯結 |   | 在您將多個維度新增至同一個檢視時，可能無法立即看見所有的預期值。或者，您可能會注意到，從不同的表對視覺效果新增維度時，會導致某些值從視覺效果中消失。  
  
Tableau 所使用的查詢，會保留資料中實際存在的值的組合。這表示您會看到由資料表的內部聯結所產生的列，這些資料表為視覺效果提供維度。  
  
若要查看維度值的部分組合，您可以開啟「顯示空列/欄」，以查看所有可能的列；或者，您可以從檢視中所呈現的其中一個表來新增度量（例如 <_MyTable_\>(Count)），以確保能看見該表中的所有維度值。 |
| 計算中的常量 |   | 在多表資料來源中，常量值的行為就像是來自其具有單一列的表。如果您彙總一個常量值，其行為就會像是在單一列上彙總。Sum(10) 會永遠等於 10。Avg(10) 也會永遠等於 10。Count(10) 會永遠等於 1。  
  
為能確保向後相容性，單一邏輯資料表資料來源中的常量值，其行為將會像是為表中的每個值複製的常量值。  
  
列層級計算中的常數不會變更計算的列詳細資料層級。\[Sales\] + 10 計算的行為會像是與 \[Sales\] 欄位來自同一個表。 |
| 強制外部聯結 |   | Tableau 會確保所有度量值都顯示在視覺效果中（以及資料中實際出現的所有維度值組合），因此，若您希望確保看到資料中的所有可能值，包括「不相符的 null」，可以透過將度量引入工作表中每個資料表的檢視來實現。 |
| 我沒有看見跨表計算所預期的度量值 |   | 計算的域是其輸入的內部聯結。若度量計算的所有輸入中沒有相符的值，則這些值將不會包含在度量計算中。  
  
在建立列層級計算之前，請考慮使用 LOD 計算將度量值移動至相同的物件。 |
| 在不同邏輯資料表的欄位之間切換的計算，會得出非預期的結果 |   | 若您有一個在列層級欄位之間切換的計算（使用 CASE 陳述式、IF 陳述式或類似「IFNULL」的函數），則可能會看到意外的結果，因為此計算會針對每一列進行計算，其中「列」是計算輸入之間的內部聯結。  
  
比較好的方法是在彙總值之間切換，而不是試圖在列層級計算之中切換。這也能在單一表情況中產生較好的效能。  
  
此外，這只是跨表計算的一項問題，所以也可以使用 LOD 計算將所有欄位帶入相同的表中。  
  
請勿執行此操作：  
`SUM( IF [Parameter] == "Foo" THEN [Field 1] ELSE [Field 2] END )`  
  
請執行此操作：  
`IF [Parameter] == "Foo" THEN SUM([Field 1]) ELSE SUM([Field 2]) END` |
| 非預期的不相符空值 |   | 您可能會看到與非預期的 Null 維度值相關聯的度量值。這可能表示資料來源中的關係設定不正確。此外，也可能表示包含度量的表中實際上有不相符的值，而維度表中沒有對應的列。  
  
在過去，如果選取錯誤的聯結類型，此資料就可能會遺失。但在使用關係時，這些不相符的值會被保留。如果您不想要看到不相符的值，可以使用篩選條件來排除。 |
| 彙總值不正確 |   | 您使用的是關係或是聯結？若使用關係，在預設情況下可以正確運算彙總。若使用聯結，則您可能需要編寫 LOD 計算以重複值。  
  
您對關係的「效能選項」設定是否不正確？請嘗試將「效能選項」重設為預設值，並查看是否能產生正確的彙總。 |
| 維度會複製度量值，而不是對其進行分區。  
  
維度篩選條件並不會子集度量。 |   | 檢查用於定義關係的欄位是否正確。 |
| Tableau 正在產生太多的查詢，或具有很多左聯結的查詢 |   | 檢查記錄或效能記錄，以查看產生了多少查詢，以及使用了多少左聯結。藉由新的資料建模功能，Tableau 可以產生具有左聯結的查詢及/或其他查詢，以確保不相符的度量值永遠會包含在視覺效果中。如果您不需要查看不相符的值，可以使用篩選條件從視覺效果中移除不相符 (NULL) 的值。這會導致較少的查詢。  
  
如果您知道資料中沒有任何不相符的值，您可以在「效能選項」中，將每個關係的「參考完整性」設定設為「所有值相符」。這也會導致較少的查詢。  
  
您還可以降低視覺效果的複雜性，以減少所產生的查詢數量。移除度量並隱藏篩選條件控制項，是簡化多表相關資料查詢的關鍵方法。 |
| 查詢包含許多子查詢 |   | 檢查記錄或效能記錄，以查看 Tableau 產生的查詢的複雜性。  
  
Tableau 會在必要時自動產生子查詢以重複資料，以產生正確的彙總。這類似於由 LOD 計算所產生的查詢。  
  
如果您知道資料中的邏輯資料表之間的關係具有「多對一」或「一對一」基數，則您可以在關係「效能選項」中設定這項基數資訊。這可讓 Tableau 消除不必要的子查詢，因為它知道不會發生重複。 |
| 我過去是使用聯結來篩選資料 |   | 在 2020.2 版本中，Tableau 會努力復原不相符的值。有時這意味著它會使用左聯結，而您可能原本已指定內部聯結來有意篩選資料。  
  
如果您將此聯結所帶入的不相符值篩選出來，Tableau 能夠將查詢最佳化為內部聯結。  
  
根據您的特定情況，可能可以將此內部聯結建模為邏輯資料表內的實體聯結。如果使用包含度量的表來篩選維度表，這種方法尤其有用，因為它不會導入額外的度量複製。 |