執行初始 SQL

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

連線到某些資料庫後,可以指定 Initial SQL 命令,該命令將在與資料庫建立連線(例如,開啟工作簿、重新整理擷取、登入 Tableau Server 或發佈到 Tableau Server)時執行或使用快取的值。

附註:Initial 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 命令將伺服器設定為忽略 Initial SQL 陳述式:

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

若伺服器不允許使用 Initial SQL 陳述式,則工作簿會開啟,但不會傳送 Initial SQL 命令。

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

初始 SQL 語句中的參數

您可以將參數傳遞給初始 SQL 語句中的資料來源。以下清單列出了在 Initial 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 文件以瞭解正確的語法。

針對伺服器延遲執行

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

範例:

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

安全性和模擬

在 Initial SQL 陳述式中使用 TableauServerUserTableauServerUserFull 參數可建立一個無法與其他使用者共用的專用連線。這還可以限制快取共用,從而增強安全性,但也會降低效能。

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

如果是 MySQL 連線,使用 Initial SQL 建立資料表後未列出資料表

連線到 MySQL 並執行 Initial SQL 陳述式後,可能會因為 Tableau 建構查詢的方式而未顯示資料表。

CREATE TABLE TestV1.testtable77(testID int);

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

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

如果是 Oracle 連線,使用 Initial SQL 建立資料表會導致 Tableau 停滯

連線到 Oracle 並執行 Initial 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;

 

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