跳到主要內容 跳至補充內容

透過自訂 SQL 建立 Direct Query 應用程式

Direct Query 應用程式中透過自訂 SQL 查詢在載入指令碼中建立資料模型。自訂 SQL 提供使用 資料模型管理員 的替代選項,以定義 Direct Query 的資料模型。

使用自訂 SQL 建立 Direct Query 資料模型可讓您使用 SQL 陳述式,以定義透過 SQL 查詢本身產生的表格和欄位。此外,Qlik 應用程式中的自訂 SQL 陳述式可以使用載入指令碼變數和自訂 SQL 陳述式中的 Qlik 運算式巨集。這可以呈現更動態的資料模型,並且可讓自訂 SQL 定義的表格和欄根據變數或運算式評估結果來調整。

自訂 SQL 可在載入指令碼中單獨使用。您也可以在 資料載入編輯器 中使用 資料模型管理員 和自訂 SQL 的組合,以定義資料模型。

提示備註

若可以透過 資料模型管理員 指定部分資料模型,請使用 資料模型管理員 指定這些部分,以獲得最佳 SQL 效能。若在定義的資料模型中執行 Direct Query 查詢時使用,資料模型管理員 在表格定義更有效率。

若要透過自訂 SQL 建立資料模型:

  1. section directquery 新增至載入指令碼。

    只有一個 SECTION DIRECTQUERY 區段可存在於載入指令碼。該區段必須是載入指令碼中的最後一個區段。

    即使您尚未透過 資料模型管理員 定義資料模型,在載入指令碼中新增 LIB CONNECT 陳述式,然後新增 section directquery 陳述式,然後載入指令碼,也會讓應用程式轉變為 Direct Query 應用程式。

  2. 透過下列陳述式建置資料模型:

    • SELECT

      使用 SELECT 陳述式選取要載入的表格和欄。例如:<TableName> SELECT <custom SQL>

      若您沒有在載入指令碼中定義自己的表格名稱,表格將命名為Table<指令碼行數>

      Select

    • CREATE RELATIONSHIP

      使用 CREATE RELATIONSHIP 在資料模型中定義欄位和表格之間的關係。

      Create relationship

    • DROP RELATIONSHIP

      使用 DROP RELATIONSHIP 從資料模型捨棄先前定義的關係。

      捨棄關係

    • DROP TABLE

      使用 DROP TABLE 從資料模型捨棄先前定義的關係,以防表格之間可能的衝突。

    • LETSET

      使用 LETSET 陳述式定義變數或 Qlik 運算式。

      Let

      Set

    表格和欄位必須有整個資料模型中的唯一名稱。若您在 資料模型管理員 中定義表格,然後嘗試以自訂 SQL 重新定義表格,將會失敗,除非您捨棄 資料模型管理員 中建立的表格或以自訂 SQL 重新命名表格和欄位。

section directquery 區段內不支援的任何指令碼陳述式會在載入資料時產生錯誤。會忽略用於指令碼偵錯或強制繼續的任何設定。

關於自訂 SQL 載入指令碼的範例,請參閱 Direct Query 的自訂 SQL 範例

自訂 SQL、變數和運算式

Direct Query 中的自訂 SQL 定義可讓您在自訂 SQL 陳述式內使用指令碼變數和 Qlik 運算式巨集。

此功能透過自訂 SQL 所定義且能根據變數或 Qlik 運算式評估結果調整的表格和欄,為應用程式的資料模型帶來動態變數和運算式影響以及彈性。

自訂 SQL 中的變數

使用 SET 或 LET 陳述式定義變數。使用格式 $(<variable name>) 在載入指令碼中新增變數。

範例:建構包括變數的資料模型

會在載入時間評估自訂 SQL 中的變數參考。若變數值在使用應用程式期間變更,將不會使用該變數在自訂 SQL 中反映變更,除非執行指令碼載入。

若您想要自訂 SQL 定義中的動態變數,參考變數作為 Qlik 運算式的一部分,以強制在每次使用這些自訂 SQL 定義的查詢執行時評估這些變數。

如需更多變數資訊,請參閱 在資料載入編輯器中使用變數

自訂 SQL 中的運算式

您可以使用運算式修改傳送至遠端資料庫的自訂 SQL 內容,以在應用程式資料模型中呈現表格和欄。用於資料模型的運算式必須解析為單一值。

提示備註

若要測試運算式是否評估為單一值,請作為運算式新增至 KPI。若這可行,則運算式可用於自訂 SQL。

會在每次使用這些 SQL 定義的查詢執行時動態評估運算式。每次表格或欄位的自訂 SQL 陳述式在執行查詢期間使用 Qlik 運算式時,會先評估這些 Qlik 運算式,以擷取目前的運算式結果。在自訂 SQL 陳述式中插入的這些結果會代表原始查詢執行。這些 Qlik 運算式評估可能會反過來對遠端資料庫產生 SQL 查詢。這些 Qlik 運算式評估可能會反過來對遠端資料庫產生 SQL 查詢。

若運算式在載入期間無法展開,這將會傳回 Null 值。這不代表運算式無效。運算式可能需要來自使用者的選項,以在應用程式中進行評估。

範例:透過 Qlik 運算式建構資料模型

透過自訂 SQL 和 資料模型管理員 建立資料模型

您可以為 Direct Query 使用自訂 SQL 和 資料模型管理員 的組合,以建立資料模型。有一些實際考量,不過:

  • 作為最佳做法,請在將自訂 SQL 新增至載入指令碼之前,完成您想要在 資料模型管理員 中進行的任何模型化。若 資料模型管理員 用來定義載入的表格和欄位之間的關係,以及自訂 SQL 用於其他自訂,自訂 SQL 和 資料模型管理員 最好一起使用。

  • 資料模型管理員 建立的資料模型部分和自訂 SQL 建立的部分會分開管理,然後在指令碼載入期間合併在一起。資料模型管理員 不會顯示自訂 SQL 定義的任何資料模型。若要檢視完整資料模型,使用 資料模型檢視器

  • 資料模型管理員 建立的資料模型和自訂 SQL 定義的資料模型必須使用相同的資料庫連線。

  • 您可以透過 資料模型管理員 移動新增至載入指令碼的 IMPORT LIVE 陳述式。會依序評估載入指令碼,因此新的位置可能會影響自訂 SQL 要求。例如,這可能會在最終資料模型建立不必要的關係或複製表格名稱。

  • 表格和欄位必須有整個資料模型中的唯一名稱。若您在 資料模型管理員 中定義表格,然後嘗試以自訂 SQL 重新定義表格,將會失敗,除非您捨棄 資料模型管理員 中建立的表格或以自訂 SQL 重新命名表格和欄位。

限制

Direct Query 的自訂 SQL 有下列限制:

  • 自訂 SQL 只能使用單一資料庫。

  • 透過內嵌 Qlik 運算式巨集使用一個或多個自訂 SQL 陳述式的 Direct Query 應用程式無法作為 On-Demand 應用程式的 selection 應用程式使用。這是因為任何產生的範本應用程式,即記憶體內應用程式,無法在載入指令碼中支援 Qlik 運算式巨集。

  • 在中心內新增的指令碼不支援 Direct Query 自訂 SQL。如需更多關於指令碼的資訊,請參閱 使用 指令碼編輯器

此頁面是否對您有幫助?

若您發現此頁面或其內容有任何問題——錯字、遺漏步驟或技術錯誤——請告知我們可以如何改善!