對於大多數資料庫,您可以連線到特定查詢,而非整個資料集。因為資料庫的 SQL 語法彼此略有不同,所以您連線到一個資料庫和連線到另一個資料庫時,分別使用的自訂 SQL 或許也不相同。但是,如果準確知道所需資訊並且知道如何編寫 SQL 查詢,則使用自訂 SQL 可能很有用。

儘管您使用自訂 SQL 可能有多種常見原因,但您可以使用自訂 SQL 跨表合併資料、重新轉換欄位以執行跨資料庫聯接、重構或減小資料大小以進行分析等。

對於 Excel 和文字檔資料來源,此選項僅在 Tableau Desktop 8.2 之間建立的工作簿中可用,或者在透過舊版連線在 Windows 上使用 Tableau Desktop 時可用。若要使用舊版連線來連線到 Excel 或文字檔,請連線到檔案,並在「開啟」對話方塊中按一下「開啟」下拉式功能表,然後選取「使用舊版連線開啟」

附註:從 Tableau 2020.2 開始,不再支援舊版 Excel 和文字檔連線。請參閱 Tableau 社群中的 Legacy Connection Alternatives(舊版連線替代方案)文件,瞭解使用舊版連線的替代方案。

連線到自訂 SQL 查詢

  1. 連線到資料後,按兩下「資料來源」頁面上的「新建自訂 SQL」選項。

  2. 在文字方塊中鍵入或貼上查詢。查詢必須為單個 SELECT* 陳述式。

  3. 完成後,按一下「確定」

按一下「確定」時,會執行查詢,而且自訂 SQL 查詢表會出現在畫布的邏輯層中。只有自訂 SQL 查詢的相關欄位才會顯示在「資料來源」頁面的資料網格中。

有關畫布的邏輯和實體層的詳情,請參閱 Tableau 資料模型

自訂 SQL 查詢的範例

垂直合併表(合併)

如果需要彼此相互附加資料,則可以直接在 Tableau 之畫布的邏輯層中,使用聯集選項。在某些情況下,您的資料庫不支援此選項,因此您可以改用自訂 SQL。

例如,假設您具有以下兩個表:November 和 December。

November December

您可以使用以下自訂 SQL 查詢將第二個表 December 附加到第一個表 November:

SELECT * FROM November UNION ALL SELECT * FROM December

查詢結果在資料網格中如下所示:

有關合併選項的詳細資料,請參閱合併資料

變更欄位的資料類型以執行跨資料庫聯接

要在兩個表之間執行聯結時,您加入的欄位資料類型必須相同。如果欄位的資料類型不相同,則您可以在執行聯接之前使用自訂 SQL 變更資料類型(轉換)欄位。

例如,假設您要分別使用「根」和「ID」欄位聯接「Main」和「Sub」這兩個表。「根」欄位是數位類型,「ID」欄位是字串類型。您可以使用以下自訂 SQL 查詢將「根」的資料類型從數位變更為字串,以便可以使用「根」和「ID」欄位聯接「Main」和「Sub」表。

SELECT [Main].[Root] AS [Root_Number]
CAST([Main].[Root] AS INT] AS [Root_String]
FROM [Main]

此查詢的結果顯示原始「根」欄位以及轉換為字串的「根」欄位。

有關聯接和跨資料庫聯接的詳細資料,請參閱聯結資料

減小資料的大小

在使用非常大的資料集時,如果先減小資料大小,則有時您可以在處理資料時節省時間。

例如,假設您有一個名為 FischerIris 的大表。您可以使用以下自訂 SQL 查詢來檢索指定的列和記錄,從而減少您從 Tableau 連線到的資料集的大小。

SELECT
[FischerIris].[Species] AS [Species],
[FischerIris].[Width] AS [Petal Width],
COUNT([FischerIris].[ID]) AS [Num of Species]
FROM [FischerIris]
WHERE [FischerIris].[Organ] = 'Petal'
AND [FischerIris].[Width] > 15.0000
GROUP BY [FischerIris].[Species], [FischerIris].[Width]

重新組建您的資料(樞紐分析)

在某些情況下,您可能要使用需要在分析之前重新組建的表。雖然這種類型的任務可以藉由使用像樞紐分析這樣的選項在 Tableau 之畫布的實體層中完成,但您的資料庫可能不支援它。在這種情況下,您可以改用自訂 SQL。

例如,假設您具有下表:

若要在 Tableau 中變更其結構並優化要分析的資料,則可以使用以下自訂 SQL 查詢:

SELECT Table1.Season ID AS [Season ID],
Table1.Items - Don't like AS [Quantity],
"Don't Like" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table.Items - Defective AS [Quantity],
"Defective" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table1.Items - Too big AS [Quantity],
"Too Big" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS Season ID,
Table1.Items - Too small AS [Quantity]
"Too Small" AS [Reason]
FROM Table1

查詢結果在資料網格中如下所示:

有關樞紐分析表選項的詳情,請參閱樞紐分析表資料(從資料欄到列)

合併(聯接)和彙總您的資料

如果需要合併表並彙總資料,則可以在 Tableau 之畫布的實體層中,使用聯結和預設的彙總類型選項。在某些情況下,您可能需要改用自訂的 SQL。

例如,假設您具有以下兩個表:訂單和供應商。

訂單 供應商

您可以使用以下自訂 SQL 查詢來尋找訂單數計數,並在「訂單」和「供應商」表上執行左聯結:

SELECT Vendors.Name,COUNT(Orders.Order) AS Number Of Orders
FROM Orders
LEFT JOIN Vendors
ON Orders.VendorID=Vendors.VendorID
GROUP BY Name;

查詢的結果如下所示:

有關聯接的詳細資料,請參閱聯結資料

引用重複列時出現錯誤

如果自訂 SQL 查詢引用重複欄,則在 Tableau 中嘗試使用分析的某一欄時,可能會出現錯誤。即使查詢有效,也會發生這種情況。例如,考慮以下查詢:

SELECT * FROM authors, titleauthor WHERE authors.au_id = titleauthor.au_id

該查詢有效,但因為在此例中「au_id」欄位在「authors」表和「titleauthor」表中都存在,因此該欄位不明確。Tableau 將連線到查詢,但只要嘗試使用 au_id 欄位,就會出現錯誤。原因是 Tableau 不知道要引用哪個表。

附註:最佳做法是,在自訂 SQL 查詢中盡可能使用 AS 子句定義列別名。這是因為,在未使用別名的情況下,每個資料庫在自動產生欄名稱時都有自己的規則。

編輯自訂 SQL 查詢

編輯自訂 SQL 查詢

  1. 在資料來源頁面的畫布中,連按兩下邏輯層中的自訂 SQL 查詢。
  2. 將游標暫留在實體層中的自訂 SQL 表上,直到顯示箭頭。
  3. 按一下箭頭,然後選取「編輯自訂 SQL 查詢」
  4. 在對話方塊中,編輯自訂 SQL 查詢。

變更自訂 SQL 查詢名稱

當您將自訂 SQL 查詢拖曳至畫布的邏輯層時,Tableau 會提供預設名稱:Custom SQL Query、Custom SQL Query1 等。您可以將預設名稱變更為更有意義的名稱。

  1. 在資料來源頁面上,在畫布的邏輯層中,選取自訂 SQL 查詢表中的下拉式箭頭,並選取「重新命名」

  2. 輸入您要用於自訂 SQL 查詢的名稱。

在自訂 SQL 查詢中使用參數

您可以在自訂 SQL 查詢語句中使用參數以便將常量值替換為動態值。然後,可以在工作簿中更新參數以修改連線。例如,您可以連線到自訂 SQL 查詢,該查詢為 pageID 所指定的特定頁面提供 Web 流量資料。您可以插入參數,而不是在 SQL 查詢中為 pageID 值使用常量值。完成連線後,可以在工作簿中顯示參數控制項。使用參數控制項可以除去 pageID 並拉入每個所需頁面的資料,而不必編輯或複製連線。

Tableau Desktop 里,您可以直接從「自訂 SQL」對話方塊建立參數,也可以使用屬於工作簿的任何參數。如果建立新參數,它將可供在工作簿中使用,就像任何其他參數一樣。若要瞭解更多資訊,請參閱建立參數

對於 Web 製作(在 Tableau Online 或 Tableau Server 上),您可以使用 Tableau Desktop 所發佈的現有參數。您無法在 Web 製作中建立新的參數。

向自訂 SQL 查詢新增參數

  1. 在「資料來源」頁面上的畫布中,將滑鼠暫留在自訂表上,直至顯示編輯圖示,然後按一下編輯按鈕。
  2. 在對話方塊底部,按一下「插入參數」
  3. 在 SQL 語句中選取常量值,然後從「插入參數」下拉式功能表中選取要使用的參數。如果您尚未建立參數,請選取「建立新參數」。按建立參數中的說明建立參數。

附註: 參數只能替換文字值,不能替換運算式或識別字,例如表名稱。

在以下範例中,自訂 SQL 查詢會返回優先順序標記為「Urgent」的所有訂單。在自訂 SQL 語句中,訂單優先順序是常量值。如果要變更連線以檢視「High」優先順序訂單,必須編輯資料來源。

您可以將訂單優先順序常量值替換為參數,而不是建立並維護同一查詢的許多變體。參數應包含訂單優先順序的所有可能值。

建立參數後,可以將其插入到 SQL 語句以替換常量值。

編輯完連線後,新參數將在「資料」窗格底部的「參數」區域中列出,並且參數控制項將顯示在檢視右側。當您選取不同值時,連線將進行更新。

附註: 如果您正在使用擷取,則必須重新整理擷取才能反映對參數的變更。發佈使用自訂 SQL 參數的資料來源將會包括參數。系統會將參數傳輸至連線到該資料來源的任何工作簿。

Tableau Catalog 對自訂 SQL 的支援

從 2019.3 開始,Tableau Catalog 已納入Tableau Server 和 Tableau Online 的資料管理附加元件中。有關 Tableau Catalog 的詳情,請參閱 Tableau ServerTableau Online 說明中的《關於 Tableau Catalog》。

支援的查詢

Catalog 支援符合 ANSI SQL-2003 標準的自訂 SQL 查詢,但有三項例外:

  • 時區運算式
  • Multiset 運算式
  • Tableau 參數

從 2021.4 開始,Tableau Catalog 還支援在自訂 SQL 中使用 Transact-SQL (T-SQL) 方言,但以下情況除外:

  • 提示
  • FOR 子句
  • OPENROWSET、OPENXML 和 OPENJSON 函數
  • ODBC 標量函數
  • FOR SYSTEM_TIME
  • TABLESAMPLE
  • MATCH 運算式
  • CONTAINS 運算式
  • FREETEXT 運算式

支援的功能和函數

Catalog 支援下列額外功能,適用於資料來源、工作簿,以及具有使用 MySQL 或 PostgreSQL 驅動程式之連線的流程,例如 Amazon Aurora for MySQL、Amazon RedShift、Pivotal Greenplum Database、MemSQL、Denodo 和其他驅動程式。

  • MySQL GROUP_CONCAT 函數
  • PostgreSQL 陣列
  • PostgreSQL EXTRACT() 函數

其他自訂 SQL 案例和功能或許也可運作,但 Tableau 並未特別加以測試或支援。

支援的歷程

資產使用自訂 SQL 時,資產頁面的歷程索引標籤上會顯示一條帶有顯示自訂 SQL 查詢按鈕的訊息。按一下該按鈕可查看連線中使用的自訂 SQL。然後,若想將自訂 SQL 複製到剪貼板,請按一下複製

用於顯示自訂 SQL 查詢的按鈕

某些類型的自訂 SQL 會導致上游歷程不完整。發生這種情況時,會出現一條包含該資訊的訊息。欄位詳細資訊卡可能不包含已連線欄的連結,或者可能根本不顯示任何已連線欄。欄詳細資訊卡可能不包含使用該欄的欄位之連結,或者可能根本不顯示任何欄位。

若您正在檢查資料表的歷程,請注意,Catalog 不支援顯示使用自訂 SQL 收集的資料表中繼資料的歷程中的欄資訊。但是,若其他資產使用同一個資料表並且不使用自訂 SQL,則 Tableau Catalog 可能能夠顯示其透過這些其他資產發現的欄的相關資訊。

在下列螢幕擷取畫面中,factAccountOpportunityByQuarter 表格已編製索引,因為它是由資料來源所使用。但由於自訂 SQL 查詢加以參考,因此不會顯示其欄資訊。

在有多個資料來源、工作簿或流程使用某個表格的案例中,任何來自該表格的下游資產若使用了自訂 SQL 查詢,在套用欄層級篩選條件時都將被排除。因此,顯示在歷程中的下游資產會比實際使用的少。

有關使用歷程的詳細資訊,請參閱 Tableau Server(連結在新視窗開啟)Tableau Online(連結在新視窗開啟) 說明中的「使用歷程進行影響分析」。

另請參閱

使用自訂 SQL 和 RAWSQL 執行進階空間分析(連結在新視窗開啟)

感謝您的意見回饋!