Оператор Constrain можно использовать в сочетании с оператором Let или Set для определения переменных скрипта. Оператор Constrain позволяет определить ограничения на возможные значения этих переменных. Если определение переменной нарушает ограничения, перезагрузка завершится неудачей. С помощью ограничений можно требовать, чтобы значения переменных соответствовали определенным типам, попадали в определенные числовые диапазоны и совпадали с допустимыми значениями, которые вы определите.
Синтаксис:
Constrain variablename = json
Где:
variablename — это переменная скрипта.
json — это допустимый объект JSON, определяющий ограничения. Отдельные ограничения добавлены в этот объект в виде пар «ключ-значение».
Типы ограничений
Тип ограничения (ключ)
Значение
Требования к ограничению (значение)
Примеры
"type"
Ограничивает значения переменных определенным типом данных.
"text" определяет тип текста.
"number" определяет числовой тип.
CONSTRAIN vExampleText = {"type": "text"}
CONSTRAIN vExampleNumeric = {"type": "number"}
"maxnum"
Устанавливает максимальное значение для переменной.
Только числа (целые или с плавающей запятой). Разрешено экспоненциальное представление чисел.
CONSTRAIN vExample = {"maxnum": 5000}
"minnum"
Устанавливает минимальное значение для переменной.
Только числа (целые или с плавающей запятой). Разрешено экспоненциальное представление чисел.
CONSTRAIN vExample = {"minnum": 250}
"valuesnum"
Определяет список допустимых числовых значений для переменной.
Список разделенных запятыми чисел, заключенный в квадратные скобки. Пример: [1,2,3]
CONSTRAIN vExample = {"valuesnum": [1,2,3]}
"valuestext"
Определяет список допустимых текстовых значений для переменной.
Список разделенных запятыми строк, заключенный в квадратные скобки. Пример: ["a","b","c"]
Используйте оператор Constrain для предотвращения загрузки нежелательных значений переменных в аналитические приложения. В следующих разделах описаны конкретные способы его использования.
Обновление переменных при перезагрузке
Оператор Constrain особенно полезно использовать в сочетании с обновлениями переменных при перезагрузке. С помощью обновлений переменных при перезагрузке можно динамически обновлять переменные во время перезагрузки приложения, используя свойство variables в API-интерфейсе перезагрузок. Оператор Constrain предотвращает включение вредоносных или неправильно отформатированных определений переменных в перезагружаемое аналитическое приложение.
Обновления переменных при перезагрузке вместе с оператором Constrain поддерживают сценарии применения, перечисленные ниже.
Шаблонные приложения, которые загружают данные выборочно на основе таких условий, как идентификатор или имя клиента (их можно передавать во время загрузки как переменные).
Централизованный контроль над приложениями, распределенными по многим клиентам Qlik Cloud.
Перенос рабочих процессов и задач, ориентированных на переменные, с QlikView и Qlik Sense под управлением клиента в облако.
Безопасность, надежность и совместная работа
Даже когда оператор Constrain используется вне сценариев обновления переменных при перезагрузке, он усиливает средства контроля безопасности при создании скриптов загрузки, например, во время их совместной разработки. К примеру, владелец приложения может определить ограничения для значений переменных, информируя коллег о конкретных необходимых условиях для успешной перезагрузки приложения.
Замечания
Определение Constrain для переменной должно быть допустимым объектом JSON.
Для одной переменной можно указать более одного ограничения. Все ограничения для переменной должны содержаться в одном объекте ограничения. Для ознакомления с примерами см. раздел Примеры: множественные ограничения.
Если переменная скрипта с определенным именем уже загружена в приложение, будущие попытки определить ограничения и значения для этой переменной могут закончиться неудачей из-за конфликтов между исходной и переопределенной переменными.
Чтобы разрешить эти конфликты, сбросьте ограничения и значения переменной, вставив пустые определения. Примеры:
Порядок определений переменной и ограничений не имеет значения. Однако при сбое перезагрузки, связанной с переменной, строка, на которой срабатывает контрольная точка, будет другой.
Оператор скрипта Constrain ограничивает определения переменных только для переменных скрипта. Ограничения также можно применить к переменным скрипта и конечного пользователя (которые созданы или обновлены в виде листа или как переменные сеанса с помощью API-интерфейса), используя общедоступный API-интерфейс. Для получения дополнительной информации см. раздел Альтернативные варианты разработчика для определения ограничений переменных.
Альтернативные варианты разработчика для определения ограничений переменных
Для определения ограничений переменных можно использовать общедоступный API-интерфейс, а не оператор Constrain в скрипте загрузки. При определении ограничений через API-интерфейс все попытки обновить значения переменных (непосредственно в скрипте загрузки, в виде листа или через API-интерфейс перезагрузок) будут подпадать под эти ограничения.
Чтобы определить ограничения переменных через общедоступный API-интерфейс, используйте объект GenericVariableConstraints в API-интерфейсе Qlik Sense Engine (qix): GenericVariableConstraints.
Пример: type
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Оператор Constrain, который указывает, что определение переменной для a должно иметь тип number.
Оператор LET, определяющий переменную a.
Скрипт загрузки
CONSTRAIN a = {"type": "text"};
LET a = 1000;
Результаты
Загрузите данные.
Перезагрузка не удастся, потому что ограничение требует, чтобы переменная a была текстового типа. Определение переменной — это число.
Напротив, если в ограничении указать typenumber, это приведет к успешной перезагрузке.
Пример: maxnum
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Оператор Constrain, который указывает, что определение переменной для b может иметь максимальное значение 3000.
Оператор LET, определяющий переменную b.
CONSTRAIN b = {"maxnum": "3000"};
LET b = 3001;
Результаты
Загрузите данные.
Перезагрузка не удастся, потому что ограничение требует, чтобы максимальное значение переменной b составляло 3000. Переменная определена со значением 3001.
Напротив, если указать для b значение 2999, это приведет к успешной перезагрузке.
Пример: minnum
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Оператор Constrain, который указывает, что определение переменной для b может иметь минимальное значение 3000.
Оператор LET, определяющий переменную c.
CONSTRAIN c = {"minnum": "3000"};
LET c = 2999;
Результаты
Загрузите данные.
Перезагрузка не удастся, потому что ограничение требует, чтобы минимальное значение переменной c составляло 3000. Переменная определена со значением 2999.
Напротив, если указать для c значение 3000, это приведет к успешной перезагрузке.
Пример: valuesnum
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Оператор Constrain, который указывает, что определение переменной для d должно быть числовым и иметь значение 2, 3 или 4.
Оператор LET, определяющий переменную d.
CONSTRAIN d = {"valuesnum": [2,3,4]};
LET d = 1;
Результаты
Загрузите данные.
Перезагрузка не удастся, потому что значение переменной d оценивается как 1, которого нет в списке из трех возможных значений.
Напротив, если указать для d значение 2, это приведет к успешной перезагрузке.
Пример: valuestext
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Оператор 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, но эти принципы применимы ко всем типам ограничений в целом.
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Оператор Constrain, который указывает, что определение переменной для f должно иметь тип number.
Оператор SET, определяющий переменную f.
Скрипт загрузки
CONSTRAIN f = {"type": "number"};
SET f = 500*2;
Результаты
Загрузите данные.
Перезагрузка не удастся, потому что ограничение требует, чтобы переменная f была числового типа. Определение переменной содержит числовое выражение, но поскольку используется оператор SET, определение оценивается как текст.
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Оператор Constrain, который указывает, что определение переменной для g должно иметь тип text.
Оператор LET, определяющий переменную g.
Скрипт загрузки
CONSTRAIN g = {"type": "text"};
LET g = 500*2;
Загрузите данные.
Перезагрузка не удастся, потому что ограничение требует, чтобы переменная g была текстового типа. Определение переменной содержит числовое выражение и используется оператор LET, в результате чего определение оценивается как число.
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Оператор Constrain, который указывает, что определение переменной для h должно иметь тип text.
Оператор SET, определяющий переменную h.
Скрипт загрузки
CONSTRAIN h = {"type": "text"};
SET h = 500*2;
Загрузите данные.
Перезагрузка пройдет успешно. Ограничение требует, чтобы переменная h была текстового типа. Определение переменной содержит числовое выражение, но поскольку используется оператор SET, определение оценивается как текст.
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Оператор Constrain, который указывает, что определение переменной для i должно иметь тип number.
Оператор LET, определяющий переменную i.
Скрипт загрузки
CONSTRAIN i = {"type": "number"};
LET i = 500*2;
Загрузите данные.
Перезагрузка пройдет успешно. Ограничение требует, чтобы переменная i была числового типа. Определение переменной содержит числовое выражение и используется оператор LET, в результате чего определение оценивается как число.
Примеры: множественные ограничения
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Оператор Constrain, который указывает, что определение переменной для j должно иметь значение от 1 до 5.
Перезагрузка пройдет успешно. Значение переменной f равно 2, что находится в допустимом диапазоне.
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Оператор Constrain, который позволяет переменной принимать как текстовое, так и числовое значение, если это одно из допустимых значений.
Оператор LET, определяющий переменную k.
Скрипт загрузки
CONSTRAIN k = {"valuestext": ["abc","def","ghi"], "valuesnum": [0,1,3,5]};
LET k = 'def';
Загрузите данные.
Перезагрузка пройдет успешно. Значение переменной k находится в списке допустимых значений. Аналогично, если указать для k значение 3, это приведет к успешной перезагрузке.
Пример: разрешение конфликтов определений переменных
Обзор
Этот пример показывает, как могут возникнуть конфликты определений переменных при добавлении ограничений для переменной, которая уже была определена в приложении при предыдущей загрузке.
Скрипт загрузки 1: установка переменной скрипта
Откройте Редактор загрузки данных. Добавьте следующий скрипт:
LET vConflictExample = 'Department C';
Загрузите данные. Перезагрузка пройдет успешно. Переменная vConflictExample создана в приложении как переменная скрипта.
Скрипт загрузки 2: попытка определения ограничений для ранее загруженной переменной скрипта
Удалите скрипт загрузки 1. Добавьте следующий скрипт:
CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;
Загрузите данные.
Перезагрузка завершится неудачей с ошибкой ограничения, даже если новое ограничение и определение значения совместимы. Это произойдет потому, что скрипт загрузки 1 уже загрузил переменную в приложение с текстовым значением и это значение все еще сохраняется в приложении. Чтобы решить эту проблему, необходимо сбросить ограничение и определение переменной. См. скрипт загрузки 3.
Скрипт загрузки 3: сброс определений ограничений и значений
Удалите скрипт загрузки 2. Добавьте следующий скрипт:
Перезагрузка пройдет успешно. Приведенный выше скрипт можно разбить на три части, разделив каждую из них пустыми строками.
Первая часть сбрасывает определение ограничений и значений для vConflictExample. В результате удаляется определение, которое было загружено в приложение с помощью скрипта загрузки 1.
Вторая часть повторно применяет новые определения ограничений и значений, которые не сработали в скрипте загрузки 2.
Третья часть добавляет фиктивные данные просто для того, чтобы можно было открыть вид листа и просмотреть значение переменной (см. ниже).
Откройте вид листа в режиме изменения, а затем диалоговое окно Переменные. Здесь видно, что переменная vConflictExample успешно создана.
В диалоговом окне «Переменные» в виде листа показано, что конфликт определений переменной для vConflictExample устранен.
Если вы обнаружили какую-либо проблему на этой странице или с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом!