附註: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
TableauApp Tableau 應用程式的名稱。

Tableau Desktop Professional

Tableau Server

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

範例

以下範例顯示可以在初始 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;

 

感謝您的意見回饋!