Constrain
Constrain 陳述式可以與 Let 或 Set 陳述式合併使用,以定義指令碼變數。Constrain 陳述式可讓您對這些變數的可能值定義限制。如果變數定義違反限制,則載入會失敗。透過限制,您可以要求變數值符合特定類型、屬於特定數字範圍內並符合您定義的可接受值。
語法:
Constrain variablename = json
其中:
-
variablename 是指令碼變數。
-
json 是指定限制的有效 JSON 物件。各個限制以索引鍵/值組的形式在此物件中新增。
| 限制類型 (索引鍵) | 意義 | 限制要求 (值) | 範例 |
|---|---|---|---|
| "type" | 將變數值限制為特定的資料類型。 |
"text" 指定文字類型。 "number" 指定數字類型。 |
|
| "maxnum" | 設定變數的最大值。 | 僅數字 (整數或浮點)。允許使用科學標記法。 |
|
| "minnum" | 設定變數的最小值。 | 僅數字 (整數或浮點)。允許使用科學標記法。 |
|
| "valuesnum" | 為變數定義可接受的數值清單。 | 方括號內以逗號分隔的數字清單。例如︰[1,2,3] |
|
| "valuestext" | 為變數定義可接受的文字值清單。 | 方括號內以逗號分隔的字串清單。例如︰["a","b","c"] |
|
何時使用 Constrain 陳述式
使用 Constrain 陳述式可以防止不需要的變數值載入到分析應用程式中。 以下區段概述了具體使用方式。
載入時間變數更新
Constrain 與載入時間變數更新合併使用時,特別實用。透過載入時間變數更新,您可以在應用程式載入期間使用 Reloads API 上的 variables 屬性動態更新變數。Constrain 陳述式可防止在分析載入中納入惡意或格式不正確的變數定義。
載入時間變數更新以及 Constrain 陳述式支援以下使用情況:
-
範本應用程式根據客戶 ID 或名稱等條件選擇性地載入資料 (可以在載入時間作為變數傳遞)
-
集中控制分佈在多個 Qlik Cloud 租用戶的應用程式
-
將變數導向的工作流程和任務從 QlikView 和 Qlik Sense 用戶端管理 遷移到雲端
安全性、可靠性和共同作業
即使在載入時間變數更新情境之外使用,Constrain 也能增強載入指令碼撰寫的安全性控制——例如,在共同作業載入指令碼開發期間。例如,應用程式擁有者可以定義變數值的限制,告知共同作業者需要滿足的特定條件,才能可靠地成功載入應用程式。
考慮事項
-
變數的 Constrain 定義必須是有效的 JSON 物件。
-
您可以為單一變數指定多個限制。變數的所有限制都需要包含在單一限制物件內。如需範例,請參閱 範例 - 多個限制。
-
如果您已經將具有特定名稱的指令碼變數載入到應用程式中,則將來嘗試為該變數定義限制和值時,可能會因為原始變數和重新定義的變數之間發生衝突而失敗。
若要解決這些衝突,請插入空白定義,以重設變數限制和值。範例:
CONSTRAIN x; LET x;CONSTRAIN x; SET x;然後,您可以在載入指令碼的後續區段中重新定義變數及其限制。有關長格式範例,請參閱 範例 - 解決變數定義衝突。
-
變數定義和限制定義的順序並不重要。不過,如果與變數相關的載入失敗,則發生斷點的行將會有所不同。
-
Constrain 指令碼陳述式僅限制指令碼變數的變數定義。您也可以使用公用 API 對指令碼和最終使用者變數 (在工作表檢視中建立或更新的變數或使用 API 作為工作階段變數的變數) 套用限制。如需詳細資訊,請參閱定義變數限制的開發人員替代方案。
-
限制會經過驗證,以避免變數無法比對任何值的情境。無效限制的範例:
-
{"minnum": 5000, "maxnum": 4}
-
{"type": "text", "maxnum": 4}
-
定義變數限制的開發人員替代方案
您也可以使用公用 API 來定義變數限制,而不是使用載入指令碼中的 Constrain 陳述式。透過 API 定義限制時,所有更新變數值的嘗試 (無論是直接在載入指令碼中、在工作表檢視中或透過 Reloads API) 都會受到限制。
若要透過公用 API 定義變數限制,請使用 Qlik Sense Engine (qix) API 中的 GenericVariableConstraints 物件:GenericVariableConstraints。
