# Unless

Префикс и суффикс unless используется для создания условного предложения, определяющего вычисление или невычисление оператора либо условия «exit». Это короткое утверждение можно использовать вместо полного оператора if..end if.

Синтаксис:

(Unless condition statement | exitstatement Unless condition )

Действия statement или exitstatement выполняются, только если элемент condition имеет значение False.

Префикс unless можно использовать в операторах, включающих в себя один или несколько других операторов, в том числе дополнительные префиксы when или unless.

Аргументы

| Аргумент | Описание |
| --- | --- |
| condition | Логическое выражение, имеющее значение True или False. |
| statement | Любой оператор скрипта Qlik Sense, за исключением операторов управления. |
| exitstatement | Предложение exit for, exit do или exit sub или оператор exit script. |

## Когда это следует использовать

Оператор `Unless` возвращает результат в виде булева значения. Как правило, этот тип функции используется в качестве условия, когда пользователю требуется выполнить условную загрузку или исключить части скрипта.

Ниже приводится три примера использования функции `Unless`.

`exit script 
 unless A=1;` `unless A=1 
 LOAD  * from myfile.csv;` `unless A=1 
 when B=2 drop table Tab1;`

## Региональные настройки

Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе `SET DateFormat` скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами.

Региональные настройки по умолчанию в приложениях основаны на системных региональных настройках компьютера или сервера, где установлено ПО Qlik Sense. Если на сервере Qlik Sense, к которому обращается пользователь, выбран шведский язык, то редактор загрузки данных будет использовать шведские региональные настройки для даты, времени и валюты. Эти параметры регионального формата не связаны с языком, отображаемым в интерфейсе пользователя Qlik Sense. Qlik Sense будет отображаться на языке, который используется в браузере.

## Пример 1. Префикс Unless

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

#### Скрипт загрузки и результаты

Обзор

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

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

* Создание переменной A, которой присваивается значение 1.

* Набор данных, который загружается в таблицу под именем Transactions, если переменная A не имеет значение 2.

Скрипт загрузки

```
LET A = 1;

UNLESS A = 2

Transactions:
LOAD 
* 
Inline [
id, date, amount
1, 08/30/2018, 23.56
2, 09/07/2018, 556.31
3, 09/16/2018, 5.75
4, 09/22/2018, 125.00
5, 09/22/2018, 484.21
6, 09/22/2018, 59.18
7, 09/23/2018, 177.42
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `id`

* `date`

* `amount`

Результирующая таблица

| id | date | amount |
| --- | --- | --- |
| 1 | 08/30/2018 | 23.56 |
| 2 | 09/07/2018 | 556.31 |
| 3 | 09/16/2018 | 5.75 |
| 4 | 09/22/2018 | 125.00 |
| 5 | 09/22/2018 | 484.21 |
| 6 | 09/22/2018 | 59.18 |
| 7 | 09/23/2018 | 177.42 |

Так как в начале скрипта переменной A задается значение 1, проверяется выполнение условия после префикса `Unless` и возвращается результат `FALSE`. Таким образом, скрипт продолжает выполнение оператора `Load`. В таблице результатов отображаются все записи из таблицы `Transactions`.

Если этой переменной задано значение 2, данные не будут загружаться в модель данных.

## Пример 2. Суффикс Unless

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

#### Скрипт загрузки и результаты

Обзор

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

Скрипт загрузки сначала загружает начальный набор данных в таблицу под именем `Transactions`. Затем выполнение скрипта прерывается, если таблица `Transactions` содержит больше 10 записей.

Если это условие не приводит к прекращению выполнения скрипта, следующий набор транзакций добавляется в таблицу `Transactions` в результате объединения, после чего этот процесс повторяется.

Скрипт загрузки

```
Transactions:
LOAD 
* 
Inline [
id, date, amount
1, 08/30/2018, 23.56
2, 09/07/2018, 556.31
3, 09/16/2018, 5.75
4, 09/22/2018, 125.00
5, 09/22/2018, 484.21
6, 09/22/2018, 59.18
7, 09/23/2018, 177.42
];


exit script unless NoOfRows('Transactions') < 10 ;

Concatenate
LOAD
* 
Inline [
id, date, amount
8, 10/01/2018, 164.27
9, 10/03/2018, 384.00
10, 10/06/2018, 25.82
11, 10/09/2018, 312.00
12, 10/15/2018, 4.56
13, 10/16/2018, 90.24
14, 10/18/2018, 19.32
];

exit script unless NoOfRows('Transactions') < 10 ;

Concatenate
LOAD
* 
Inline [
id, date, amount
15, 10/01/2018, 164.27
16, 10/03/2018, 384.00
17, 10/06/2018, 25.82
18, 10/09/2018, 312.00
19, 10/15/2018, 4.56
20, 10/16/2018, 90.24
21, 10/18/2018, 19.32
];

exit script unless NoOfRows('Transactions') < 10 ;
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `id`

* `date`

* `amount`

Результирующая таблица

| id | date | amount |
| --- | --- | --- |
| 1 | 08/30/2018 | 23.56 |
| 2 | 09/07/2018 | 556.31 |
| 3 | 09/16/2018 | 5.75 |
| 4 | 09/22/2018 | 125.00 |
| 5 | 09/22/2018 | 484.21 |
| 6 | 09/22/2018 | 59.18 |
| 7 | 09/23/2018 | 177.42 |
| 8 | 10/01/2018 | 164.27 |
| 9 | 10/03/2018 | 384.00 |
| 10 | 10/06/2018 | 25.82 |
| 11 | 10/09/2018 | 312.00 |
| 12 | 10/15/2018 | 4.56 |
| 13 | 10/16/2018 | 90.24 |
| 14 | 10/18/2018 | 19.32 |

В каждом наборе данных из скрипта загрузки имеется семь записей.

Первый набор данных (с `id` транзакции от 1 до 7) загружается в приложение. Условие `Unless` проверяет, содержится ли в таблице `Transactions` меньше 10 строк. Возвращается значение `TRUE`, поэтому в приложение загружается второй набор данных (с `id` транзакции от 8 до 14). Второе условие `Unless` проверяет, содержится ли в таблице `Transactions` меньше 10 записей. Возвращается значение `FALSE`, поэтому выполнение скрипта прекращается.

## Пример 3. Несколько префиксов Unless

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

#### Скрипт загрузки и результаты

Обзор

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

В этом примере набор данных, содержащий одну транзакцию, создается в таблице под именем `Transactions`. Затем запускается цикл for, в котором проверяются два вложенных оператора unless:

1. Если в таблице `Transactions` не больше 100 записей

2. Если количество записей в таблице `Transactions` не кратно 6

Если эти условия возвращают результат `FALSE`, еще семь записей создаются и объединяются с существующей таблицей `Transactions`. Этот процесс повторяется, пока одна из двух транзакций не вернет значение `TRUE`.

Скрипт загрузки

```
Transactions:
Load
        0 as id
Autogenerate 1;

For i = 1 to 100
        unless NoOfRows('Transactions') > 100 unless mod(NoOfRows('Transactions'),6) = 0
                Concatenate
      Load
if(isnull(Peek(id)),1,peek(id)+1) as id
		Autogenerate 7;	
next i
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение:`id`.

Результирующая таблица

| id |
| --- |
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| +30 строк |

Вложенные операторы unless в цикле for проверяют следующие условия:

1. Содержит ли таблица `Transactions` больше 100 строк?

2. Является ли количество записей в таблице `Transactions` кратным 6?

Когда оба оператора unless возвращают значение `FALSE`, еще семь записей создаются и объединяются с существующей таблицей `Transactions`.

Эти операторы возвращают значение `FALSE` пять раз, после чего таблица `Transactions` содержит всего 36 строк данных.

После этого второй оператор `Unless` возвращает значение `TRUE`, и поэтому следующий оператор load уже не выполняется.