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

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

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

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

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

可以在善加運用關係和以下 Tableau 部落格文章中瞭解關係如何工作的詳情:

另請參閱「動作分析」(連結在新視窗開啟)中有關關係的影片播客,例如 Tableau 為何發明關係?(連結在新視窗開啟)按一下內容庫(連結在新視窗開啟)中的「影片播客」以查看更多資訊。

在 Tableau 版本 2024.2 及之後版本中,Tableau 資料模型支援透過多重要素關係進行多事實分析與共用維度。有關詳情,請參閱關於多事實關係資料模型(連結在新視窗開啟)何時使用多事實關係模型(連結在新視窗開啟)建置多事實關係資料模型(連結在新視窗開啟)

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

分析注意事項

驗證關係

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

要查找的內容:

  • 您在資料模型中的關係是否使用符合其表的正確欄位?
  • 新增多個相符欄位配對,是否會使關係更精確?
  • 將不同的維度和度量拖曳至檢視中,會產生什麼結果?
  • 您是否看到預期的列數?
  • 若您已修改任何效能選項設定,您在視覺效果中看到的值是否符合預期?如果不是,您可能需要檢查設定,或重設為預設值。

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

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

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

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

另一個更進階的選項,是使用 GitHub 上的 Tableau 記錄檢視器(連結在新視窗開啟)。可以使用 end-protocol.query 按特定關鍵字進行篩選。有關詳情,請先參閱 GitHub 中的 Tableau 記錄檔檢視器 Wiki 頁面(連結在新視窗開啟)

僅維度視覺效果

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

若要查看維度值的部分組合,您可以:

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

有關詳細資訊,亦請參閱維度的不相符值行為可能會令您感到意外多資料表分析疑難排解

何時使用 LOD 計算與運算式

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

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

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

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

多資料表分析範例

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

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

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

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

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

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

三個電影資料表,包括「演出」、「演員」和「電影」。

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

演出表與演員表(關於演員)以及演出表與電影表(關於電影)的完全外部聯結的輸出。

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

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

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

三位演員的平均總收入和身高的散佈圖。

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

三位演員的身高和平均總收入的散佈圖。

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

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

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

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

三位演員的平均 LOD 總收入和身高的散佈圖。

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

多個表中的標準化資料

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

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

三個資料來源表,其中包含演員姓名、電影、總收入和身高。

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

三位演員的身高和平均總收入的散佈圖。

範例 2:單一表中的維度

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

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

新增至列架中的「演員」欄位顯示一個包含演員姓名的資料表。

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

藍色方塊醒目提示演員表。

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

「演出演員」欄位作為欄架上的度量,會產生一個橫條圖,其中列出演員,但沒有演出計數。

範例 3:來自多個表的維度

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

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

演出表與演員表和電影表之間的關係。

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

包含「演員」和「電影」欄位的列架會產生一個資料表,其中僅包含至少演出一次的演員。

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

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

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

藍色方塊醒目提示電影表。

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

使用電影表的橫條圖包括每部電影的彙總總收入。

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

使用電影和演員表的橫條圖顯示每部電影的電影總收入(並按演員複製)。

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

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

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

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

橫條圖顯示每位演員的電影總收入。

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

資料表計算不包括重複電影的電影總收入。

 

多資料表分析疑難排解

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

分析情況 描述
僅維度視覺效果的內部聯結 在您將多個維度新增至同一個檢視時,可能無法立即看見所有的預期值。或者,您可能會注意到,從不同的表對視覺效果新增維度時,會導致某些值從視覺效果中消失。

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 能夠將查詢最佳化為內部聯結。

根據您的特定情況,可能可以將此內部聯結建模為邏輯資料表內的實體聯結。如果使用包含度量的表來篩選維度表,這種方法尤其有用,因為它不會導入額外的度量複製。
感謝您的意見反應!已成功提交您的意見回饋。謝謝!