執行初始 SQL

附註:Tableau Prep Builder 2019.2.2 及更高版本可支援使用初始 SQL,但還不支援 Tableau Desktop 所支援的所有相同選項。有關使用初始 SQL 搭配 Tableau Prep Builder 的資訊,請參閱 Tableau Prep Builder 線上說明中的使用初始 SQL 查詢連線(連結在新視窗開啟)

連線到某些資料庫後,可以指定連線到資料庫(例如,開啟工作簿、重新整理擷取、登入到 Tableau Server 或發佈到 Tableau Server)時執行的初始 SQL 命令。重新整理檢視時不會執行初始 SQL。請注意,這個初始 SQL 與自訂 SQL 連線不同。自訂 SQL 連線定義針對其發出查詢的關係(或表)。有關詳情,請參閱連線到自訂 SQL 查詢

可使用此命令:

  • 設定將在會話期間使用的臨時表。

  • 設定自訂資料環境。

您可以在「伺服器連線」對話方塊中或在「資料來源」頁上選擇新增初始 SQL 命令。

附註:如果您的資料來源支援執行初始 SQL 語句,則「伺服器連線」對話方塊的左下角中會出現「初始 SQL」連結。有關資料來源的資訊,請參閱支援的連接器

使用初始 SQL

  1. 在「伺服器連線」對話方塊上,按一下「初始 SQL」。或者,在「資料來源」頁面上,選取「資料」>「初始 SQL」「資料」>「查詢分段和初始 SQL」,具體取決於您要連線的資料庫。

  2. 在「初始 SQL」對話方塊中輸入 SQL 命令。可使用「插入」下拉式功能表將參數傳遞給您的資料來源。

附註: Tableau 不會檢查陳述式有無錯誤。連線時,會將此 SQL 陳述式直接傳送到資料庫。

您的軟體許可證可能會限制您針對連線使用初始 SQL。如果發佈到 Tableau Server,則必須對該伺服器進行設定以允許使用「初始 SQL」語句。預設情況下,已將伺服器軟體設定為在 Web 瀏覽器載入工作簿時允許運行這些語句。

管理員可以使用 tsm configuration set 命令將伺服器設定為忽略初始 SQL 陳述式:

tsm configuration set -k vizqlserver.initialsql.disabled -v true

如果伺服器不允許使用初始 SQL 陳述式,則該工作簿仍會開啟,但不會傳送初始 SQL 命令。

有關 tsm configuration set 指令更多的詳情,請參閱 Tableau Server 說明(連結在新視窗開啟)

初始 SQL 語句中的參數

您可以將參數傳遞給初始 SQL 語句中的資料來源。這之所以很有用,有以下幾個原因:

  • 您可以使用 TableauServerUserTableauServerUserFull 參數設定類比。

  • 如果您的資料來源支援此功能,則可以設定列級別安全性(例如,針對 Oracle VPD 或 SAP Sybase ASE),以確保使用者只看到他們有權看到的資料。

  • 您可以在日誌記錄中提供更多詳細,例如,Tableau 版本或工作簿名稱。

初始 SQL 語句中支援以下參數:

參數說明返回值的範例
TableauServerUser當前伺服器使用者的使用者名稱。在伺服器上設定模擬時使用。如果使用者未登入到 Tableau Server,則傳回空字串。jsmith
TableauServerUserFull當前伺服器使用者的使用者名稱與網域。在伺服器上設定模擬時使用。如果使用者未登入到 Tableau Server,則傳回空字串。domain.lan\jsmith
TableauAppTableau 應用程式的名稱。

Tableau Desktop Professional

Tableau Server

TableauVersionTableau 應用程式的版本。9.3
WorkbookNameTableau 工作簿的名稱。僅用於具有嵌入式資料來源的工作簿。Financial-Analysis

警告:Tableau Desktop 不包含網域。若不使用委派,並設定 tsm configuration set -k DelegationUseFullDomainName=-v true--force-keys,則可以包括。

以下範例顯示可以在初始 SQL 語句中使用參數的不同方式。

  • 本範例在 Microsoft SQL Server 上設定安全上下文:

    EXECUTE AS USER = [TableauServerUser] WITH NO REVERT;

  • 本範例表明如何在 DataStax 的資料來源上使用參數在日誌記錄中新增詳細資訊,或設定會話變數來追縱資料:

    SET TABLEAUVERSION [TableauVersion];

  • 本範例可用於幫助設定 Oracle VPD 的列級別安全性:

    begin

     DBMS_SESSION.SET_IDENTIFIER([TableauServerUser]);

    end;

    附註:Oracle PL/SQL 代碼塊需要一個尾隨分號來終止代碼塊。請查閱 Oracle 文件以瞭解正確的語法。

針對伺服器延遲執行

可以延遲初始 SQL 陳述式,以便只在伺服器上執行該陳述式。針對伺服器延遲執行的一個原因是您沒有權限執行設定模擬的命令。使用 <ServerOnly></ServerOnly> 標記將只在伺服器上執行的命令括起來。

範例:

CREATE TEMP TABLE TempTable(x varchar(25));
INSERT INTO TempTable VALUES (1);
<ServerOnly>INSERT INTO TempTable Values(2);</ServerOnly>

安全性和模擬

如果在初始 SQL 陳述式中使用 TableauServerUserTableauServerUserFull 參數,則將建立一個不能與其他使用者共用的專用連線。這也將限制緩存共用,從而可以增強安全性,但也可能會降低效能。

對 MySQL 和 Oracle 連線的「建立表格」進行疑難排解

如果是 MySQL 連線,使用初始 SQL 建立表後不會列出表

連線至 MySQL 後,如果執行如下的初始 SQL 陳述式,可能會因為 Tableau 建構查詢的方式而不會顯示表:

CREATE TABLE TestV1.testtable77(testID int);

若要解決此問題,請將 IF NOT EXISTS 新增至 SQL 陳述式:

CREATE TABLE IF NOT EXISTS TestV1.TestTable(testID int);

如果是 Oracle 連線,使用初始 SQL 建立表格會導致 Tableau 停滯

連線至 Oracle 並執行如下的初始 SQL 陳述式後,Tableau 會因為 Tableau 建構查詢的方式而停滯,並出現轉圈圖示:

CREATE TABLE TEST_TABLE (TESTid int)

若要解決此問題,請使用下列 SQL 陳述式:

BEGIN
EXECUTE IMMEDIATE 'create table test_table(testID int)';
EXCEPTION
WHEN OTHERS THEN NULL;
END;

 

感謝您的意見反應!已成功提交您的意見回饋。謝謝!