使用預存程式
預存程序是可供存取關聯式資料庫系統的應用程式使用的常式。使用 Tableau 連線到 SAP Sybase ASE、Microsoft SQL Server 或 Teradata 資料庫時,可以使用預存程序來定義連線。
對於 Oracle,您可以使用表函數來定義連線。Oracle 表函數的功能類似於預存程序,列在 [資料來源] 頁面上的 [預存程序] 下。
當您使用其中一種資料類型建立資料來源時,預存程序下列出了可用的過程,如 Microsoft SQL Server 範例中所示:
從左側窗格中,將該程序拖動到畫布或按兩下列出的一個過程。如果該程序中有可用參數,將自動顯示 [參數] 對話方塊。
您可以使用現有 Tableau 參數而無需輸入值,或者為值建立新 Tableau 參數:
如果您隨後在檢視中公開 Tableau 參數,使用者將能夠以對話模式變更過程中的參數值。
預存程序不支援聯合、建立關聯或聯結。它們呈現在邏輯層的單一邏輯資料表中,而且不允許開啟聯結/聯集畫布(實體層)。
預存程序注意事項
如果您使用預存程序為 Tableau 定義資料來源,請注意以下幾點:
如果預存程序返回多個結果集,Tableau 將讀取第一個結果集並忽略其餘結果集。
如果預存程序具有輸出參數,Tableau 會篩選該預存程序。
不包括具有非標量類型的參數的預存程序。
記錄了 Tableau 中沒有相符類型的結果集欄(例如 varbinary、geometry 和 hierarchyid)。如果所有結果集欄都對應於未知資料類型,則 Tableau 會顯示訊息:
「結果集...沒有可用欄。」
沒有返回結果集的預存程序將在資料來源頁中列出,但如果選取這些預存程序,則會失敗。
如果沒有為預存程序所需的參數提供任何值,則會出現錯誤。Tableau 無法提前確定是否需要參數。
Tableau 不對預存程序執行任何事務管理。即,預存程序編寫器不必依賴 Tableau 即可在調用預存程序之前啟動事務,或者在調用預存程序之後提交事務。
列名稱必須唯一才可以使用預存程序。如果兩個列的名稱相同,或者未提供任何名稱,則預存程序可能會導致錯誤。
如果預存程序中有多個查詢(例如,用於從另一表讀取值或儲存臨時組合),則其中每個查詢必須以相同順序(相同名稱和資料類型)返回同一組欄。為確保欄順序和名稱在查詢結果中相符,您可能需要執行顯式
CAST
以確保資料類型正確(例如CAST(Username as VARCHAR(20))
),並顯式命名這些欄。如果預存程序不遵循這些指南,則可能出現錯誤訊息:「InsertData: 未繫結的欄錯誤」
如果預存程序中有多個查詢(例如,用於從另一表讀取值或儲存臨時組合)並且該程序將產生錯誤,請嘗試在該程序頂端新增
SET NOCOUNT ON
。這可防止顯示受 Transact-SQL 語句影響的列計數的訊息作為查詢結果集的一部分返回。
此外,以下約束適用於特定資料庫。
Teradata 資料庫的預存程序約束
以下約束適用於 Teradata 資料庫中的預存程序。
必須為每個參數提供值。如果使用者沒有為一個或多個參數提供值,則 Tableau 會顯示一條 Teradata 資料庫錯誤,指出為預存程序提供的值太少。
SQL Server 資料庫的預存程序約束
以下約束適用於 SQL Server 資料庫中的預存程序。
如果預存程序的結果集包含 IMAGE 或 TEXT 類型的列,則預存程序會失敗,並出現「語法不正確」錯誤訊息。
如果結果集的總寬度(每列中的位元組數)超過 8060,則預存程序將失敗。非常寬的表(幾百列)或具有大型文字列的表(旨在容納數千個文字字元)可能會出現這種情況。
Tableau 不會顯示架構 [sys] 中的預存程序。
如果使用者沒有為該程序需要的一個或多個參數提供值,則 Tableau 會以 [該程序需要參數 @x 的值,但是沒有提供] 的形式顯示一條 SQL Server 資料庫錯誤。
包含多個查詢的預存程序應遵循 [預存程序注意事項] (上文)中列出的指南。
Tableau Desktop 不支援 Microsoft SQL Server TIME 資料類型。當在 Microsoft SQL Server 資料庫上的預存程序中包含此類型的欄位時,Tableau Desktop 不會匯入這些欄位。
SAP Sybase ASE 資料庫的預存程序約束
以下約束適用於 SAP Sybase ASE 資料庫中的預存程序(僅限於 Windows)。
資料庫必須具有一個正確設定的遠端伺服器。
如果使用者沒有為該程序需要的一個或多個參數提供值,則 Tableau 會以「該程序需要參數 @x 的值,但是沒有提供」的形式顯示一條 Sybase ASE 資料庫錯誤。