Префикс и суффикс when используется для создания условного предложения, определяющего исполнение или неисполнение оператора либо условия «exit». Это короткое утверждение можно использовать вместо полного оператора if..end if.
В 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 Cloud. Qlik Cloud будет отображаться на языке, который используется в браузере.
Когда оператор 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
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Набор данных с датами и суммами, который отправляется в таблицу под именем 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
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Три набора данных с датами и суммами, которые отправляются в таблицу под именем Transactions.
Первый набор данных содержит транзакции 1-7.
Второй набор данных содержит транзакции 8-14.
Третий набор данных содержит транзакции 15-21.
Условие When, которое определяет, содержит ли таблица Transactions больше 10 строк. Если любой из операторов When возвращает TRUE, выполнение скрипта загрузки прекращается. Это условие помещается в конце каждого из трех наборов данных.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
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
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Набор данных, содержащий одну транзакцию, создается как таблица под именем Transactions.
Запущенный цикл For содержит два вложенных условия When, которые проверяют следующее:
В таблице Transactions не больше 100записей.
Количество записей в таблице 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 больше не выполняется.
Помогла ли вам эта страница?
Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!