# Constrain

Constrain 陳述式可以與 Let 或 Set 陳述式合併使用，以定義指令碼變數。Constrain 陳述式可讓您對這些變數的可能值定義限制。如果變數定義違反限制，則載入會失敗。透過限制，您可以要求變數值符合特定類型、屬於特定數字範圍內並符合您定義的可接受值。

Constrain variablename = json

其中：

* variablename 是指令碼變數。

* json 是指定限制的有效 JSON 物件。各個限制以索引鍵/值組的形式在此物件中新增。

限制類型

| 限制類型 (索引鍵) | 意義 | 限制要求 (值) | 範例 |
| --- | --- | --- | --- |
| `"type"` | 將變數值限制為特定的資料類型。 | `"text"` 指定文字類型。<br><br>`"number"` 指定數字類型。 | ```<br>CONSTRAIN vExampleText = {"type": "text"}<br>```<br><br>```<br>CONSTRAIN vExampleNumeric = {"type": "number"}<br>``` |
| `"maxnum"` | 設定變數的最大值。 | 僅數字 (整數或浮點)。允許使用科學標記法。 | ```<br>CONSTRAIN vExample = {"maxnum": 5000}<br>``` |
| `"minnum"` | 設定變數的最小值。 | 僅數字 (整數或浮點)。允許使用科學標記法。 | ```<br>CONSTRAIN vExample = {"minnum": 250}<br>``` |
| `"valuesnum"` | 為變數定義可接受的數值清單。 | 方括號內以逗號分隔的數字清單。例如：`[1,2,3]` | ```<br>CONSTRAIN vExample = {"valuesnum": [1,2,3]}<br>``` |
| `"valuestext"` | 為變數定義可接受的文字值清單。 | 方括號內以逗號分隔的字串清單。例如：`["a","b","c"]` | ```<br>CONSTRAIN vExample = {"valuestext": ["Department A", "Department B", "Department C"]}<br>``` |

## 何時使用 Constrain 陳述式

使用 Constrain 陳述式可以防止不需要的變數值載入到分析應用程式中。

## 考慮事項

* 變數的 Constrain 定義必須是有效的 JSON 物件。

* 您可以為單一變數指定多個限制。變數的所有限制都需要包含在單一限制物件內。如需範例，請參閱 [範例 - 多個限制](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#Examples)。

* 如果您已經將具有特定名稱的指令碼變數載入到應用程式中，則將來嘗試為該變數定義限制和值時，可能會因為原始變數和重新定義的變數之間發生衝突而失敗。

  若要解決這些衝突，請插入空白定義，以重設變數限制和值。範例：

  ```
  CONSTRAIN x;
  LET x;
  ```

  ```
  CONSTRAIN x;
  SET x;
  ```

  然後，您可以在載入指令碼的後續區段中重新定義變數及其限制。有關長格式範例，請參閱 [範例 - 解決變數定義衝突](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#ConflictResolve)。

* 變數定義和限制定義的順序並不重要。不過，如果與變數相關的載入失敗，則發生斷點的行將會有所不同。

* Constrain 指令碼陳述式僅限制指令碼變數的變數定義。您也可以使用公用 API 對指令碼和最終使用者變數 (在工作表檢視中建立或更新的變數或使用 API 作為工作階段變數的變數) 套用限制。如需詳細資訊，請參閱[定義變數限制的開發人員替代方案](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#Developer)。

* 限制會經過驗證，以避免變數無法比對任何值的情境。無效限制的範例：

  * {"minnum": 5000, "maxnum": 4}
  * {"type": "text", "maxnum": 4}

## 定義變數限制的開發人員替代方案

您也可以使用公用 API 來定義變數限制，而不是使用載入指令碼中的 Constrain 陳述式。透過 API 定義限制時，所有更新變數值的嘗試 (無論是直接在載入指令碼中或在工作表檢視中) 都會受到限制。

若要透過公用 API 定義變數限制，請使用 QlikEngine JSON API 中的 GenericVariableConstraints 屬性：[GenericVariableProperties](https://help.qlik.com/en-US/sense-developer/May2026/Subsystems/EngineJSONAPI/Content/models-genericvariableproperties.htm) （僅提供英文版）。

## 範例 - type

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 以 "類型" 載入失敗

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* Constrain 陳述式用來指定 a 的變數定義需要具有 number 類型。

* 定義變數 LET 的 a 的陳述式。

載入指令碼

```
CONSTRAIN a = {"type": "text"};
LET a = 1000;
```

結果

載入資料。

載入失敗，因為限制要求變數 a 為文字類型。變數定義是一個數字。

相較之下，在限制中指定 type 的 number 將導致載入成功。

## 範例 - maxnum

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 以 "maxnum" 載入失敗

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* Constrain 陳述式用來指定 b 的變數定義的最大值為 3000。

* 定義變數 LET 的 b 的陳述式。

```
CONSTRAIN b = {"maxnum": "3000"};
LET b = 3001;
```

結果

載入資料。

載入失敗，因為限制要求變數 b 的最大值為 3000。變數定義評估為 3001。

相較之下，將 b 指定為 2999 將導致載入成功。

## 範例 - minnum

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 以 「minnum」 重新載入失敗

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* Constrain 陳述式用來指定 b 的變數定義的最小值為 3000。

* 定義變數 LET 的 c 的陳述式。

```
CONSTRAIN c = {"minnum": "3000"};
LET c = 2999;
```

結果

載入資料。

載入失敗，因為限制要求變數 c 的最小值為 3000。變數定義評估為 2999。

相較之下，將 c 指定為 3000 將導致載入成功。

## 範例 - valuesnum

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 重新載入失敗，並帶有 "valuesnum"

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* Constrain 陳述式用來指定 d 的變數定義必須是數字，且必須是 2、3 或 4。

* 定義變數 LET 的 d 的陳述式。

```
CONSTRAIN d = {"valuesnum": [2,3,4]};
LET d = 1;
```

結果

載入資料。

載入失敗，因為變數 d 評估為 1，而這不在三個可能值的清單中。

相較之下，將 d 指定為 2 將導致載入成功。

## 範例 - valuestext

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 以 「值文字」 載入失敗

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* Constrain 陳述式用來指定 e 的變數定義必須是下列文字值之一：

  * Department A

  * Department B

  * Department C

* 定義變數 SET 的 e 的陳述式。

```
CONSTRAIN e = {"valuestext": ["Department A", "Department B", "Department C"]};
SET e = Department D;
```

結果

載入資料。

載入失敗，因為變數 e 是 Department D，這不在限制定義的允許值清單中。

相較之下，將 e 指定為 Department C 將導致載入成功。

## 範例 - SET 與 LET

這些範例顯示了在變數定義期間使用 SET 或 LET 時套用限制的方式之差異。所有範例都使用套用 type 要求的限制，但這些原則通常適用於所有限制類型。

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 以 設定 載入失敗

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* Constrain 陳述式用來指定 f 的變數定義需要具有 number 類型。

* 定義變數 SET 的 f 的陳述式。

載入指令碼

```
CONSTRAIN f = {"type": "number"};
SET f = 500*2;
```

結果

載入資料。

載入失敗，因為限制要求變數 f 為數字類型。變數定義包含數字運算式，但由於使用了 SET 陳述式，因此將定義評估為文字。

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 以 LET 載入失敗

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* Constrain 陳述式用來指定 g 的變數定義需要具有 text 類型。

* 定義變數 LET 的 g 的陳述式。

載入指令碼

```
CONSTRAIN g = {"type": "text"};
LET g = 500*2;
```

載入資料。

載入失敗，因為限制要求變數 g 為文字類型。變數定義包含數字運算式，並使用了 LET 陳述式，導致將定義評估為數字。

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 透過 SET 成功重新載入

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* Constrain 陳述式用來指定 h 的變數定義需要具有 text 類型。

* 定義變數 SET 的 h 的陳述式。

載入指令碼

```
CONSTRAIN h = {"type": "text"};
SET h = 500*2;
```

載入資料。

載入成功。限制要求變數 h 為文字類型。變數定義包含數字運算式，但由於使用了 SET 陳述式，因此將定義評估為文字。

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 透過 LET 成功載入

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* Constrain 陳述式用來指定 i 的變數定義需要具有 number 類型。

* 定義變數 LET 的 i 的陳述式。

載入指令碼

```
CONSTRAIN i = {"type": "number"};
LET i = 500*2;
```

載入資料。

載入成功。限制要求變數 i 為數字類型。變數定義包含數字運算式，並使用了 LET 陳述式，導致將定義評估為數字。

## 範例 - 多個限制

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 設定最小值和最大值

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* Constrain 陳述式用來指定 j 的變數定義需要介於 1 和 5 之間。

* 定義變數 LET 的 j 的陳述式。

載入指令碼

```
CONSTRAIN j = {"minnum": 1, "maxnum": 5};
LET j = 2;
```

載入資料。

載入成功。變數 f 評估為 2，在可接受的範圍內。

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 接受清單中的文字和數字

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* Constrain 陳述式允許變數為文字或數字，只要是可接受的值之一即可。

* 定義變數 LET 的 k 的陳述式。

載入指令碼

```
CONSTRAIN k = {"valuestext": ["abc","def","ghi"], "valuesnum": [0,1,3,5]};
LET k = 'def';
```

載入資料。

載入成功。變數 k 的值在可接受的值清單中找到。同樣地，將 k 指定為 3 會導致載入成功。

## 範例 - 解決變數定義衝突

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### 載入指令碼和結果

概述

此範例顯示了在為應用程式中已從先前載入定義的變數新增限制時，如何發生變數定義衝突。

載入指令碼 1：設定指令碼變數

開啟 資料載入編輯器。新增下列指令碼：

```
LET vConflictExample = 'Department C';
```

載入資料。載入成功。變數 vConflictExample 已在應用程式中建立為指令碼變數。

載入指令碼 2：嘗試對先前載入的指令碼變數進行限制定義

刪除載入指令碼 1。新增下列指令碼：

```
CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;
```

載入資料。

即使新的限制和值定義相容，載入也會因限制錯誤而失敗。這是因為載入指令碼 1 已經將變數載入到應用程式中，其中含有文字值，並且此值仍然保留在應用程式中。為了解決這個問題，我們需要重設變數限制和定義。請參閱載入指令碼 3。

載入指令碼 3：重設限制和值定義

刪除載入指令碼 2。新增下列指令碼：

```
CONSTRAIN vConflictExample;
LET vConflictExample;

CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;

MockData:
LOAD 
* 
Inline [
id, date, amount
1, 05/30/2025, 23.56
];
```

載入資料。

載入成功。上面的指令碼可以分成三個部分，每個部分都以空白行分隔：

* 第一部分重設 vConflictExample 的限制和值定義。這會移除使用載入指令碼 1 載入到應用程式中的定義。

* 第二部分重新套用在載入指令碼 2 中失敗的新限制和值定義。

* 第三部分簡單地新增模擬資料，以便我們可以開啟工作表檢視並檢查變數值 (見下文)。

以編輯模式開啟工作表檢視，然後開啟 the 變數 icon對話方塊。我們可以看到成功建立了變數 vConflictExample。

工作表檢視中的變數對話方塊顯示已解決 vConflictExample 的變數定義衝突。

工作表檢視中的變數對話方塊顯示已解決 vConflictExample 的變數定義衝突。

工作表檢視中的變數對話方塊顯示已解決 vConflictExamplevConflictExample 的變數定義衝突。 ![Variables dialog in sheet view showing that the script variable has successfully been created.](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Resources/Images/ui_script-variable_constrain-conflict-resolved.png)

[Let](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Let.htm)

[Set](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Set.htm)

[在資料載入編輯器中使用變數](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/work-with-variables-in-data-load-editor.htm)