Циклы – важный инструмент в работе с любыми сценариями. Естественно, скрипты QlikView здесь не исключение. Циклы позволяют повторять последовательность действий, не смотря на изменение параметров этих действий с каждым повтором. Их использование значительно ускоряет процесс рутинной разработки, поэтому сегодня расскажу о том, как работать с циклами на примерах.
Цикл – это все
Прежде всего, нужно понимать, что любое выражение в Qlik – уже своего рода цикл. В стандартном выражении загрузки мы определяем поля, которые будут загружаться/вычисляться, а QlikView затем повторяет указанные действия в выражении загрузки для каждой записи в таблице ввода. Здесь ничего сложного, поэтому пойдем дальше.
«For»-циклы с числами
Один из способов использования циклов – синтаксис For x = n to m. Такой цикл будет увеличивать переменную «х» от «n» до того момента, как не будет достигнуто значение «m». В этом выражении можно использовать знак доллара. Такой способ полезен для создания таблиц или организации цикла через комбинацию переменных.
Итоговая таблица:
«For»-циклы со списками
Также можно использовать список, чтобы задать цикл. Для каждого элемента списка, вы можете использовать затем элемент списка как переменную внутри цикла.
Итоговая таблица:
Циклы с «While»
Альтернативой циклов «For» являются циклы с «while», когда вы точно не знаете, сколько итераций нужно для работы цикла или например, вы хотите сделать некоторые числовые изменения в ваших переменных с каждым циклом. При этом каждый из них является более сложным. Только будьте внимательны – что-то должно завершить цикл!
Итоговая таблица:
Пример: Отслеживание изменений
Допустим, компания хочет отслеживать изменения бизнес-процессов во времени. Для каждого процесса люди загружают отчеты о текущем состоянии. Так, нам нужен фиксатор каждого процесса, поскольку в день приходит по нескольку отчетов.
Решим эту задачу при помощи циклов.
Обратимся к списку файлов отчетов.
Вот какой скрипт загрузки у меня получился.
Мы начинаем с загрузки источников и сбора мета-данных о версиях отчетов. Используем специальный знак «*» для загрузки всех файлов, соответствующих определенному паттерну:
Далее считаем флажки изменений. В этом случае используется цикл «for». Так становится гораздо проще работать, чем повторять целый список выражений с «if», помимо этого мы сможем просто добавить новые поля в список выражения for.
Отслеживание изменений разбито на два цикла:
- Описание (Description), в котором просто устанавливаем наличие (1) или отсутствие (0) изменений,
- Для числовых полей мы пойдем дальше и оценим качество изменений – были ли они негативными или позитивными.
Мы также хотим изменить метку изменения уровня записи. У нас это будет суммой полей изменений.
Далее мы используем функцию concat() в именах полей, чтобы применить наше выражение. Также нам нужно использовать функцию fabs(), чтобы получить абсолютные значения числовых полей (вне зависимости от знака).
Если все наши метки были равны единице или нулю, то можно просто использовать concat(DISTINCT FName, ‘ + ‘), чтобы выполнить выражение Field1 + Field2 + Field3 … и т.д.
Ниже вы видите таблицу с нашими метками. Изменения состояния отражается с помощью флажка и цвета.
Вот и все на сегодня!
Свежие комментарии