# 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/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#Examples).

* Если вы уже загрузили переменную скрипта с определенным именем в приложение, будущие попытки определить ограничения и значения для этой переменной могут завершиться неудачей из-за конфликтов между исходной и переопределенной переменными.

  Чтобы разрешить эти конфликты, сбросьте ограничения и значения переменной, вставив пустые определения. Примеры:

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

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

  После этого переменную и ее ограничения можно переопределить в последующих разделах скрипта загрузки. Подробный пример см. здесь: [Пример: разрешение конфликтов определений переменных](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#ConflictResolve).

* Порядок определений переменной и ограничений не имеет значения. Однако при сбое перезагрузки, связанной с переменной, строка, на которой срабатывает контрольная точка, будет другой.

* Оператор скрипта Constrain ограничивает определения переменных только для переменных скрипта. Ограничения также можно применить к переменным скрипта и конечного пользователя (которые созданы или обновлены в виде листа или как переменные сеанса с помощью API-интерфейса), используя общедоступный API-интерфейс. Для получения дополнительной информации см. раздел [Альтернативные варианты разработчика для определения ограничений переменных](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#Developer).

* Constraints are validated to avoid scenarios that cannot match any value for the variable. Примеры недопустимых ограничений:

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

## Альтернативные варианты разработчика для определения ограничений переменных

Для определения ограничений переменных можно использовать общедоступный API-интерфейс, а не оператор Constrain в скрипте загрузки. При определении ограничений через API, все попытки обновить значения переменных (непосредственно в Скрипте загрузки или в виде листа) будут подпадать под эти ограничения.

Чтобы определить ограничения переменных через общедоступный API-интерфейс, используйте свойство GenericVariableConstraints в API-интерфейсе QlikEngine JSON: [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)

#### Неудачная перезагрузка с "type"

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Оператор 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)

#### Неудачная перезагрузка с SET

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Оператор 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/ru-RU/sense/May2026/Subsystems/Hub/Content/Resources/Images/ui_script-variable_constrain-conflict-resolved.png)

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

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

[Работа с переменными в редакторе загрузки данных](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/work-with-variables-in-data-load-editor.htm)