QlikWorld 2020 全球會議。加入我們以探索如何充分利用您的資料。 快速行動。立即註冊並儲存。

建立 On-demand template 應用程式

On-demand template 應用程式是一項常規 Qlik Sense 應用程式,但具有一項重大差異:其載入指令碼包含用於闡明其對資料來源之查詢的繫結運算式。On-demand 應用程式產生時會使用這些資料繫結運算式來從 selection 應用程式的選取狀態讀取值,並將其繫結至 template 應用程式指令碼,以便產生的應用程式載入使用者控制的資料子集。

template 應用程式通常連接至與 selection 應用程式相同的資料來源。Selection 應用程式的載入指令碼通常會載入彙總後的資料以減少資料量,同時仍提供重要維度和量值的互動性視覺化。Template 應用程式的載入指令碼使用查詢來載入更細微資料的控制子集。

備註: On-Demand template 應用程式不會直接載入資料。嘗試從 template 應用程式載入資料將會造成錯誤。template 本應用程式連接必須有效,但若要測試連接是否正確運作,您必須產生 on-demand 應用程式。產生 on-demand 應用程式時,on-demand 應用程式服務會修改載入指令碼,以載入 on-demand selection 應用程式的選取狀態。若 on-demand 應用程式產生時沒有發生錯誤,就能確定 template 應用程式中的連接正確運作。

Template 應用程式的結構

Template 應用程式使用 On-demand 應用程式導覽連結連結至 selection 應用程式。應用程式導覽連結包含的屬性,可在 On-demand 應用程式載入資料時控制查詢的記錄數。Template 應用程式的載入指令碼包含資料繫結運算式,這些運算式將指定來自 selection 應用程式的哪些欄位資料用於闡明載入資料到 On-demand 應用程式時發出的查詢。

備註: ProgramData\Qlik\Examples\OnDemandApp\sampleQlik Sense 安裝中包括樣本 On-Demand template 應用程式。

資料繫結運算式具有以下形式:

$(od_FIELDNAME)

od_ 前置詞用來將 selection 應用程式的選取狀態繫結到 on-demand 應用程式的載入指令碼,其建立方式是複製 template 應用程式。遵循 od_ p 前置詞的部分資料繫結運算式必須是符合 selection 應用程式中欄位的名稱。產生 on-demand 應用程式時,selection 應用程式的目前選取狀態會用來取得所需值,以繫結每個欄位。在新建立的 on-demand 應用程式的載入指令碼中,$(od_FIELDNAME) 運算式的每個出現項目均取代為針對 selection 應用程式選取狀態中對應欄位選取的值清單。

若要進一步瞭解如何使用內嵌 LOAD 陳述式繫結值,請參閱 On-Demand template 應用程式中的繫結運算式

SQL 語法有效的前提是,template 應用程式用於對多個值進行篩選的 SELECT 陳述式必須使用 IN 子句。建議的做法是寫入副程式來建立正確的 WHERE 子句:

SUB ExtendWhere(Name, ValVarName) LET T = Name & '_COLNAME'; LET ColName = $(T); LET Values = $(ValVarName); IF len(Values) > 0 THEN IF len(WHERE_PART) > 0 THEN LET WHERE_PART = '$(WHERE_PART) AND $(ColName) IN ( $(Values) )'; ELSE LET WHERE_PART = ' WHERE $(ColName) IN ( $(Values) )'; ENDIF ENDIF END SUB;

調用 ExtendWhere 副程式之前,必須設定 WHERE_PART 變數。

SET WHERE_PART = '';

如果您想要 SQL 陳述式除了即將由 selection 應用程式插入的子句外,還具有保持不變的 WHERE 子句,請在 SET 陳述式中插入 'WHERE <condition>'。否則,請使用簡單的 SET 陳述式。

下列範例說明如何使用 ExtendedWhere 副程式:

FOR EACH fldname IN 'ORIGIN', 'DEST', 'YEAR', 'QUARTER', 'ORIGIN_STATE_ABR', 'DEST_STATE_ABR' LET vallist = $(fldname); WHEN (IsNull(vallist)) LET vallist = ''; IF len(vallist) > 0 THEN CALL ExtendWhere('$(fldname)','vallist'); ENDIF NEXT fldname

欄位名稱清單應與您所建立之每個欄位繫結中所用欄位名稱相符。

每個欄位的值清單建立後,即可撰寫 SELECT 陳述式。例如︰

SQL SELECT "MKT_ID", "YEAR", "QUARTER", "ORIGIN", "ORIGIN_STATE_ABR", "DEST", "DEST_STATE_ABR", "TICKET_CARRIER", "FARE_CLASS", "PASSENGERS", "DISTANCE", 1 AS "FLIGHT_COUNT" FROM "SAPH7T"."/QT/AIRPORT_FACT" $(WHERE_PART);

SELECT 陳述式的 $(WHERE_PART) 部分將會擴充,以包含透過執行以上所示 FOR-NEXT 迴圈產生的 WHERE 子句。應修改 SELECT 關鍵字之後的資料行清單,以與您的特定資料庫表格的資料行相符。

警告: 建立 On-Demand 應用程式繫結變數時,避免使用來自 template 應用程式模型的欄位名稱。指令碼中定義的變數將可用於建立資料視覺化時參考的 template 應用程式模型。選擇沒有與模型中欄位重疊的 On-Demand 應用程式繫結變數,可避免 template 應用程式模型中的欄位與資料載入指令碼中 On-Demand 應用程式繫結變數之間產生意外的困擾。良好的做法是為 On-Demand 應用程式繫結變數建立前置詞。例如,使用 X_ORIGIN 取代 ORIGIN

單一登入 (SSO)

On-demand 應用程式可透過支援 SSO 的資料來源使用 single sign-on (SSO)。引擎和資料來源必須設定為允許 SSO

如需詳細資訊,請參閱使用 Qlik Sense 設定 SAML 單一登入的 SAP HANA設定單一登入的 Cloudera Impala

引擎和資料來源設定了 SSO 後,template 應用程式必須將下列語法新增至 template 應用程式指令碼,以啟用 SSO:

///!ODAG_SSO

On-Demand App Service 在產生 on-demand 應用程式以及每次重新載入時剖析指令碼。

on-demand 應用程式透過 SSO 載入時,使用者的身分識別會傳送至資料來源。使用者必須能夠存取用於 template 應用程式資料連線的來源。在這些來源中,只能載入使用者能夠存取的資料,即使選取了較大的資料集仍是如此。

警告: 從使用 single sign-on (SSO) 的 template 應用程式產生的 On-demand 應用程式無法發佈。

重新載入 template 應用程式的節點

管理員可以設定 template 應用程式上的載入平衡規則,以在多節點環境中控制 on-demand 應用程式重新載入的位置。載入平衡規則設定後,從前往 template 應用程式的連結產生的所有應用程式將會根據套用至 template 應用程式的規則載入。如需詳細資訊,請參閱管理 on-demand 應用程式