跳到主要內容

On-Demand template 應用程式中的繫結運算式

範本應用程式中的資料繫結可指定來自對應 selection 應用程式的哪些資料用於闡明載入資料到 On-demand 應用程式時發出的查詢。

繫結運算式的基本格式--$(odag_FIELDNAME)--不是唯一可用於繫結運算式的方法。其他前置詞可用來調整選項並確保範本應用程式正確載入資料。

警告: 最初使用 Qlik Sense 延伸為 On-demand App Generation 建立的範本應用程式應進行修改,以使用下面所示的方法從欄位繫結大量選取項目。

可用繫結前置詞

一般前置詞格式為 odag[s|o][n][cnt],其中:

  • s - 僅包括所選值
  • o - 僅包括可選值
  • n - 選取數字版本,依預設沒有引號
  • cnt - 插入值的數量,而非實際值

下列表格提供可用繫結前置詞的所有版本清單。範例假定一個名為 MyField 的欄位,其中 1、2、3 作為所選值 (綠色值),而 4 作為選用值 (白色值)。

繫結前置詞
前置詞 描述 範例 取代成
odag_ 以所選 (綠色) 和可選 (白色) 值取代。選取文字版本的值。 這是字串值的標準前置詞。 $(odag_MyField) '1','2','3','4'
odagcnt_ 在對應的 odag_ 繫結中以值的數量取代。 此前置詞用於查詢最佳化。 $(odagcnt_MyField) 4
odagn_

以所選 (綠色) 和可選 (白色) 值取代。選取數字版本的值。 這是數值的標準前置詞。

備註:

若資料模型可以沒有任何所選或可選的欄位值,則必須在運算式中指定 noValue。例如 $(odagn_MyField){"noValue":"-99999"}

如需詳細資訊,請參閱變更值的引號和分隔符號字元

$(odagn_MyField) 1,2,3,4
odagncnt_ 在對應的 odagn_ 繫結中以值的數量取代。 這用於查詢最佳化。 $(odagncnt_MyField) 4
odago_

以可選 (白色) 值取代。選取文字版本的值。 這用於查詢最佳化。

為大型資料庫最佳化

$(odago_MyField) '4'
odagocnt_ 在對應的 odago_ 繫結中以值的數量取代。 這用於查詢最佳化。 $(odagocnt_MyField) 1
odagon_

以可選 (白色) 值取代。選取數字版本的值。 這用於查詢最佳化。

為大型資料庫最佳化

$(odagon_MyField) 4
odagoncnt_ 在對應的 odagon_ 繫結中以值的數量取代。 這用於查詢最佳化。 $(odagoncnt_MyField) 1
odags_

以所選 (綠色) 值取代。選取文字版本的值。 這用於查詢最佳化。

為大型資料庫最佳化

$(odags_MyField) '1','2','3'
odagscnt_ 在對應的 odags_ 繫結中以值的數量取代。 這用於查詢最佳化。 $(odagscnt_MyField) 3
odagsn_

以所選 (綠色) 值取代。選取數字版本的值。 這用於查詢最佳化。

為大型資料庫最佳化

$(odagsn_MyField) 1,2,3
odagsncnt_ 在對應的 odagsn_ 繫結中以值的數量取代。 這用於查詢最佳化。 $(odagsncnt_MyField) 3
備註:

文字版本會篩選掉空的值。數字版本會篩選掉非數字和 NaN 值。

為大型資料庫最佳化

odags_odagsn_ 前置詞的用途為查詢最佳化。若繫結欄位中沒有選項,則 odag_ 包括所有值,而 odags_ 則不包括任何值。在某些情況下,使用 odags_odagscnt_ 前置詞更有效率。這可讓您測試值的集合是否為空。例如,若在 MyField 中沒有進行任何選取,則比起測試 odag_MyField 中的所有值,下列方式更有效率。

WHERE ($(odagscnt_MyField)=0 OR MyColumn IN ($(odags_MyField)))

若在不是 on-demand 欄位的 selection 應用程式中,有要選取的替代欄位,則無法使用 odags_。例如,若使用者在 CountryName 中進行選取,但繫結運算式位於關聯欄位 CountryCode,則無法使用 odags_。在這些情況下,可以改用 odago_。若 odago_ 繫結中沒有任何值,可以表示應納入所有值,或者不應納入任何值。

繫結數值

當要繫結至 On-demand app (On-demand 應用程式) 的資料包含數字而非字串時,停用數值欄位的引號括住行為非常實用。例如,如果銷售記錄包含數值 DAY_OF_WEEK 資料行,且您想要 selection 應用程式的使用者選擇 DAY_OF_WEEK 的任意組合,則您可以增加用於載入 selection 應用程式的彙總查詢,以便將 DAY_OF_WEEK 同時包含在選取清單和組成群組依據清單中。選取 DAY_OF_WEEK 值時,如果其用引號括住,且資料庫不支援自動從字串類型轉換為數值,則會導致執行時間查詢錯誤。

若要處理此情況,可以使用數字版本的繫結運算式後置詞。這迫使欄位繫結使用來自 selection 應用程式的數值,而非字串值。下列數字版本可供使用:

  • odagn_
  • odagon_
  • odagsn_

透過使用數字版本,會從儲存所選值之雙值的數字部分選取值,依照預設,值不會加上引號。

需要特定數目的選取項目

在某些情況下,可能必須要求 On-demand 應用程式查詢包含特定欄位的特定數目或範圍的值。例如,如果 On-demand 應用程式的查詢包含 BETWEEN 子句,以便取得開始和結束日期之間的所有銷售,則 YEARQUARTER 欄位的繫結運算式可以採用後置詞語法 [2],這表示將需要針對 YEARQUARTER 正好選取兩個值,亦即:

$(odag_YEARQUARTER)[2]

只要不是正好選取兩個 YEARQUARTER 值,selection 應用程式上的 On-demand 應用程式導覽點將保持停用。將顯示一則訊息,指出必須正好選取兩個 YEARQUARTER 值。

選取數量限制可在 selection app (選取應用程式) 和 On-demand app (On-demand 應用程式) 之間建立必要連結。這不同於不使用數量限制式的繫結運算式。例如,template app (範本應用程式) 的指令碼包含沒有數量限制的繫結運算式時,亦即:

$(odag_MYFIELD)

不需要 selection 應用程式包含名為 MYFIELD 的欄位,也不需要該欄位有任何選定的值 (如果不存在)。如果 selection 應用程式未包含名為 MYFIELD 的欄位,或者使用者只是忘記做出任何選擇,則當做出其他選擇以滿足記錄限制值條件時,On-demand 應用程式導覽點仍可以變為啟用狀態。

如果是另一種情況,則繫結運算式:

$(odag_MYFIELD)[1+]

現在對 selection app (選取應用程式) 設定了兩項需求:

  • Selection 應用程式必須包含名為 MYFIELD 的欄位。
  • 使用者必須針對 MYFIELD 至少選取一個值。

此類型的繫結運算式必須謹慎使用,因為這會限制哪些 selection 應用程式可以搭配範本應用程式使用。您不應在範本應用程式的繫結上使用此數量限制式,除非您確定要強制執行連結至該範本應用程式的所有 selection 應用程式上的選項數量需求。

若要執行資料繫結程序,On-demand 應用程式服務會使用對指令碼中的註解不起作用的字串替代方式。這表示您不應在註解中使用繫結運算式,除非您希望這些註解包含應用程式產生後的繫結值清單。

可以設定其他數量限制。下表概述了不同的選取數量限制組合。

不同的選取數量限制組合
限制模式 選取需求
$(odag_YEARQUARTER)[2] 必須選取正好 2 個 YEARQUARTER 值。
$(odag_YEARQUARTER)[2-4] 必須選取 2 到 4 個 YEARQUARTER 值。
$(odag_YEARQUARTER)[2+] 必須至少選取 2 個 YEARQUARTER 值。
$(odag_YEARQUARTER)[2-] 最多可選取 2 個 YEARQUARTER 值。
備註: 檢查可判定應用程式產生程序期間是否已達到範本應用程式中的所有數量限制。若違反了數量限制,產生應用程式的申請將會遭到拒絕,並顯示錯誤訊息。

變更值的引號和分隔符號字元

將 selection 應用程式中選定欄位中的值清單插入 template 應用程式的指令碼中時,值會以單引號括住並以逗號分隔。這些是引號和分隔符號的預設字元。在附加到每個欄位之繫結陳述式的語法中,這些值可以變更。例如︰

$(odag_ORIGIN){"quote": "|", "delimiter": ";"}

隨後可在制訂從 selection 應用程式取用的繫結值清單時使用這些新的值。例如,若選取的值是該年的前三個月,則清單建構方式如下:

|January|;|February|;|March|

引號和分隔符號的預設值適用於大多數標準 SQL 資料庫。但是,它們可能不適用於某些 SQL 資料庫,且無法用於許多動態資料來源,如 NoSQLREST。針對這些來源,您需要附加此繫結運算式,以變更引號和分隔符號字元。

下列表格概述用於變更引號和分隔符號字元的格式參數。

格式參數
參數 預設值 定義
引號

' (單引號) 用於文字前置詞

空白用於數字前置詞

將新增於每個值之前和之後
分隔符號 , (逗號) 將新增於所有值之間
quoteReplace '' (雙單引號)

若值不是空白,且引號不是空白,則值內部出現引號的所有地方將會以指定字串取代。

備註: 對於 odagn_ 等數字前置詞,quoteReplace 作為參數不受支援。quoteReplace 被數字前置詞忽略。
noValue (空白)

若沒有對欄位選取任何值,將會改用此值。若選項中可以沒有特定欄位的值,此參數十分實用。

值應設定為不存在於來源資料的值。例如,對於數值,若資料庫中的所有值都是正值,則使用負值。

備註: 對於沒有引號的值,若欄位的所選值可以是空集合,則必須指定 noValue

下列表格概述 odag_odagn_ 的格式規格和產生的值。產生的插入值是根據 VAL1、VAL2 的預設資料值。

odag_ 範例格式規格和產生的值
格式規格 描述 產生的插入值
未指定

以逗號分隔的值清單,使用 ' 加上引號。

'VAL1','VAL2'
{"quote": "", "delimiter": ""} 串連值 VAL1VAL2

{"quote": "X", "delimiter": "Y"}

以 X 加上引號並以 Y 分隔的值。  XVAL1XYXVAL2X
{"quote": "XX", "delimiter": "YY"} 以 XX 加上引號並以 YY 分隔的值。   XXVAL1XXYYXXVAL2XX
{"quote": "X"} 以 X 加上引號並以 , (預設) 分隔的值。  XVAL1X,XVAL2X
{"delimiter": "YY"} 以 ' (預設) 加上引號並以 YY 分隔的值 'VAL1'YY'VAL2'
{"quote": ""} 以 , 分隔且沒有引號的值。 VAL1,VAL2
{"quote": "A", "quoteReplace": "\\A"}

以 A 加上引號並以逗號 (預設) 分隔的值。將以 \A 取代欄位內部的 A 值。

備註:

在此範例中,需要使用雙 \,因為 \ 在 json 格式中為逸出字元。

AV\AL1A,AV\AL2A
odagn_ 範例格式規格和產生的值
格式規格 描述 產生的插入值
未指定

以逗號分隔且沒有引號的值清單。請注意,將會使用數值。

VAL1,VAL2
{"delimiter": "YY"} 以 YY 分隔且沒有引號的值 VAL1YYVAL2
{"quote": "A", "quoteReplace": "\\A"} 相較於 odag_ 前置詞,將會忽略 quoteReplace 參數。 AVAL1A,AVAL2A

處理個別值

若需要個別處理欄位值,可以使用內嵌方法,以產生變數 Values 中的值,並透過 Replace 或另一個函數執行任意處理。在以下範例中,Replace 搭配預留位置值使用。

MyTempBindingData: LOAD * INLINE [VAL $(odag_MyField){"quote": "", "delimiter": "\n"} ]; _TempTable: LOAD Concat(chr(39) & Replace(text, from_str, to_str) & chr(39), ',') as CombinedData Resident MyTempBindingData; LET Values = Peek('CombinedData',0,'_TempTable'); drop table _TempTable; drop table MyTempBindingData;