# When

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

Синтаксис:

(when condition statement | exitstatement when condition )

Возвращаемые типы данных: Булево

В Qlik Sense логическое значение «истина» представлено как -1, а «ложь» — как 0.

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

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

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

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

Аргументы

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

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

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

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

Примеры функции

| Пример | Результат |
| --- | --- |
| ` exit script when A=1;  ` | Когда оператор `A=1` возвращает TRUE, выполнение скрипта прекращается. |
| `when A=1 LOAD * from myfile.csv;` | Когда оператор `A=1` возвращает TRUE, выполняется загрузка `myfile.csv`. |
| `when A=1 unless B=2 drop table Tab1;` | Когда оператор `A=1` возвращает TRUE, а `B=2` возвращает FALSE, то таблица `Tab1` удаляется. |

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

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

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

Обзор

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

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

* Набор данных с датами и суммами, который отправляется в таблицу под именем `Transactions`.

* Оператор `Let`, который объявляет создание переменной `A` и имеет значение `1`.

* Условие `When`, согласно которому скрипт продолжает загрузку, если `A` = `1`.

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

```
LET A = 1; 

WHEN A = 1 
 
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`, проверяется выполнение условия после префикса `When` и возвращается результат TRUE. Так как возвращен результат TRUE, скрипт продолжает выполнение оператора load. Отображаются все записи из таблицы.

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

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

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

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

Обзор

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

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

* Три набора данных с датами и суммами, которые отправляются в таблицу под именем `Transactions`.

  * Первый набор данных содержит транзакции 1-7.

  * Второй набор данных содержит транзакции 8-14.

  * Третий набор данных содержит транзакции 15-21.

* Условие `When`, которое определяет, содержит ли таблица `Transactions` больше 10 строк. Если любой из операторов `When` возвращает TRUE, выполнение скрипта загрузки прекращается. Это условие помещается в конце каждого из трех наборов данных.

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

```
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 when 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 when 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 when 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 |

Каждый из трех наборов данных содержит семь транзакций. Первый набор данных содержит транзакции 1-7 и загружается в приложение. Условие `When`, которое следует за этим оператором load, возвращает FALSE, так как таблица `Transactions` содержит меньше 10 строк. Скрипт загрузки переходит к следующему набору данных.

Второй набор данных содержит транзакции 8-14 и загружается в приложение. Второе условие `When` возвращает TRUE, так как таблица `Transactions` содержит больше 10 строк. Поэтому выполнение скрипта прекращается.

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

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

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

Обзор

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

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

* Набор данных, содержащий одну транзакцию, создается как таблица под именем `Transactions`.

* Запущенный цикл `For` содержит два вложенных условия `When`, которые проверяют следующее:

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

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

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

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

Результаты

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

* `id`

В таблице результатов отображаются только первые пять идентификаторов транзакций, но скрипт загрузки создает 36 строк, а затем завершает работу, как только выполняется условие `When`.

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

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

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

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

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

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

Условия `When` возвращают TRUE пять раз. На этом этапе таблица `Transactions` содержит всего 36 строк данных.

После того как в таблице `Transactions` создано 36 строк, второй оператор `When` возвращает значение FALSE и поэтому следующий оператор load больше не выполняется.