Skip to content
Get App

Работа над ошибками в Qlik Sense. Исключительные ситуации и ErrorMode

Видео объясняет обработку ошибок в Qlik Sense с помощью системных переменных и показывает, как имитировать try-catch для управления исключениями.

Key Takeaways

  • В Qlik Sense отсутствует стандартный try-catch, но есть системные переменные для управления ошибками.
  • Установка error mode в 0 игнорирует ошибки, что может привести к некорректным данным и ошибкам в аналитике.
  • Правильная обработка ошибок критична для надежности и корректности данных в приложениях Qlik Sense.
  • Использование переменных script error, script error count и script error list помогает диагностировать и логировать ошибки.
  • Имитировать try-catch можно с помощью сохранения и восстановления значения error mode и проверки ошибок после выполнения операторов.

What the video covers

  • Автор рассказывает о работе с ошибками времени выполнения скрипта в Qlik Sense.
  • Объясняется, что в Qlik Sense нет конструкции try-catch, но есть четыре системные переменные для обработки ошибок.
  • Переменная error mode управляет поведением скрипта при возникновении ошибок: 0 — игнорировать ошибки, 1 — прервать с возможностью продолжения (QlikView), 2 — прервать без возможности продолжения.
  • Приводится пример, когда ошибка в скрипте прерывает загрузку всех данных, если error mode не изменён.
  • Переменная script error показывает код ошибки последнего оператора, а script error count — общее количество ошибок.
  • Переменная script error list содержит текстовое описание всех ошибок, разделённых переносами строк.
  • Автор предупреждает о рисках установки error mode в 0, так как это может привести к загрузке некорректных данных и ошибкам в модели данных.
  • Рассматривается пример кода, имитирующего поведение try-catch с помощью системных переменных Qlik Sense.
  • Подчеркивается важность правильной обработки ошибок для предотвращения неправильных управленческих решений и проблем с производительностью.
  • Видео направлено на профессионалов, работающих с Qlik Sense и желающих улучшить обработку исключительных ситуаций в скриптах.

Answers

Questions about this video

Что делает переменная error mode в Qlik Sense?

Переменная error mode управляет поведением скрипта при возникновении ошибок: значение 0 игнорирует ошибки и продолжает выполнение, 1 прерывает выполнение с возможностью продолжения (в QlikView), 2 прерывает выполнение без возможности продолжения.

Можно ли в Qlik Sense использовать конструкции try-catch для обработки ошибок?

В Qlik Sense нет встроенных конструкций try-catch, но можно имитировать их поведение, используя системные переменные error mode, script error, script error count и script error list для контроля и обработки ошибок.

Почему не рекомендуется устанавливать error mode равным нулю на постоянной основе?

Установка error mode в 0 приводит к игнорированию всех ошибок, что может привести к загрузке некорректных данных, неправильной модели данных и ошибочным управленческим решениям, что ставит под угрозу организацию.

Full Transcript — Download SRT & Markdown

00:00
Speaker A
Коллеги, приветствую вас! Вы на канале Пробей. Я — Gear Brodom. Я занимаюсь программированием, профессиональной разработкой, средствами аналитики и подготовкой персонала. В этом видео мы разберем работу с ошибками времени выполнения скрипта Clixsense, посмотрим на разные конструкции скрипта для обработки таких ошибок. Словом, будем заниматься тем, что в языках программирования называется обработкой исключительных ситуаций. Я называю ошибкой или исключительной ситуацией все те проблемы, которые происходят в Clixsense во время выполнения скрипта, в результате которых скрипт прерывается при стандартных настройках. Например, у нас есть такой скрипт. Здесь только указана системная переменная, и я кликаю на загрузить данные. Загрузка данных проходит отлично, все хорошо. Но допустим, у меня есть скрипте какая-то ошибка, например, синтаксическая ошибка. И когда я кликаю загрузить данные, система не загружает данные. На двадцать второй строке, где у меня допущена синтаксическая ошибка, скрипт прерывает свою работу и возвращается приложение к исходному состоянию до выполнения скрипта. В данном случае у нас простая ошибка — синтаксическая. Бывают ошибки, которые вызывают, например, источники данных, их необходимо как-то обрабатывать. Так вот, этим мы сегодня и займемся. Если вы программировали в языках программирования, то, скорее всего, вам встречались конструкции типа try-catch, с помощью которых реализована обработка исключительных ситуаций. Есть таких конструкций нет в Clixsense, нету конструкций языка, который позволяет обрабатывать исключительные ситуации. Однако в Clixsense есть четыре переменные, которые позволяют работать с ошибками. То есть вся работа с исключительными ситуациями происходит через переменные и выражения типа, и никаких отдельных блоков типа try-catch вы здесь не увидите. Итак, мы имеем четыре переменные. Это системные переменные, они уже заданы до выполнения скрипта. Первая из них называется error mode. Это очень простая переменная. Если вы установите ее значение в ноль, то все операторы скрипта будут выполняться последовательно, невзирая на то, что какой-то из них выполнился неправильно. Давайте разберем это на небольшом примере. Пусть у нас есть первая таблица, мы загружаем ее inline, непосредственный скрипт загрузки — все окей. И пусть у нас есть вторая таблица. Во второй таблице мы допускаем ошибку: у нас нет источника данных, который бы назывался в Clixsense, и скрипт у нас не загрузит вторую таблицу. Кроме этого, он у нас и первую таблицу не загрузит, потому что либо скрипт выполняется весь, либо он не выполняется. То есть, дойдя до 3-4 строки, где находится ошибка, Clixsense прерывает выполнение скрипта и возвращает все к исходному значению, в том числе и данные, которые были загружены. Однако если мы установим значение системной переменной error mode равным нулю, то ошибка будет игнорироваться, и когда мы кликнем на загрузить данные, произойдет следующее: первая таблица загрузится, далее система установит значение переменной error mode равным нулю, и все ошибки далее после того, как мы установили значение error mode равным нулю, будут проигнорированы, в том числе и ошибка загрузки данных из несуществующего источника. Таким образом, у нас приложение загрузило первую таблицу, вот значение поля в этой таблице. Теперь давайте вернемся в скрипт. Итак, первая переменная, с которой мы познакомились, — это переменная error mode. Если ее значение равно нулю, то все ошибки будут просто проигнорированы. То есть, если не выполнится какой-то оператор, система перейдет к выполнению следующего оператора. Если он будет не выполнен, сойдет после сервис шума и так далее, до тех пор, пока выполнение скрипта не закончится. При этом неважно, было что-то выполнено или не выполнено, система все равно сохранит то, что получилось в конце. Изначальное значение переменной error mode равно единице, что означает, что если появилась какая-то исключительная ситуация, то есть ошибка, то выполнение скрипта прервется. Однако если вы работаете в QlikView, то при значении error mode равном единице у вас высветится сообщение о том, хотите ли вы продолжить выполнение скрипта или нет. Это отличие Clixsense от QlikView. Если же мы установим error mode равным двум, то неважно, QlikView это или Clixsense, выполнение скрипта в любом случае прерывается, как только у вас происходит любая ошибка, и приложение вернется в состояние до выполнения скрипта. Кстати, если вы укажете какое-то другое значение, но не один и не два, то, скорее всего, все ошибки проигнорируются. А какие ещё есть переменные в Clixsense по ошибкам? Это переменная script error — ошибка последнего оператора. Она после каждого оператора обнуляется. Если при выполнении оператора нет ошибки, то в нее записывается значение 0. Если же в нее записано значение, отличное от нуля, то это означает, что при выполнении оператора возникла какая-то ошибка. Список числовых значений переменной script error, а также их расшифровки, вы видите сейчас на экране. Это все переменные, отвечающие за ошибки. Эта переменная error count показывает общее количество ошибок в скрипте. То есть это количество увеличивается с каждым оператором, который производит ошибку. И последняя переменная script error list содержит все ошибки скрипта в виде текста, и эти ошибки они разделены переносом строки. Итак, давайте посмотрим теперь, как это все выглядит в скрипте. Запустим отладку и поставим точку останова на тридцать пятой строке, затем запустим выполнение скрипта. А теперь выполним то, что находится после 35 строки. Обратите внимание, чему стали равны переменные, которые отвечают за ошибки. script error count — 1, то есть одна ошибка в скрипте всего. script error details содержит описание этой ошибки. Далее script error list и script error содержит наименование ошибок. На этом возможности системы по работе с ошибками заканчиваются. То есть всего четыре переменные, и с помощью них нам необходимо каждый раз выстраивать какую-то логику обработки ошибок. Самая плохая логика, которую вы можете создать в вашем приложении, — это то, что в начале приложения устанавливается error mode равный нулю, и скрипт игнорирует вообще все ошибки. Здесь надо всегда понимать, что возникновение ошибки в скрипте — это очень хорошо, ведь если бы ее не было, мы бы никогда не узнали, что с данными что-то не так. А если с данными будет что-то не так, и мы установим error mode равный нулю, то могут быть очень значительные проблемы. Сейчас я скажу парочку из них. Первая проблема, например, у вас загрузились данные, но какой-то оператор не выполнился, и часть данных не загружена, и пользователь, который зашел в систему, увидел некорректные показатели. Он по ним сделал некорректный вывод, то есть некорректное управленческое решение и тем самым поставил под угрозу организацию. Второй пример — когда в скрипте мы проигнорировали какую-то ошибку, связанную с оператором, и этот оператор как-то влиял на модель данных. В конечном итоге получилась модель данных неправильная и некорректная, не оптимальная, которая привела к неправильным вычислениям или, например, просто выдала всю оперативную память сервера. Итак, я вам рассказал, как не надо делать, то есть не надо устанавливать error mode равный нулю и просто закрывать глаза на все ошибки. Так что же надо делать? Для начала разберем небольшой блок кода, который поможет ответить на этот вопрос. Этот блок кода покажет нам, как можно с помощью системных переменных Clixsense имитировать поведение try-catch. Вернемся к нашему коду и запишем следующее. [музыка] Итак, у нас получился следующий кусочек кода. Есть потенциально опасная операция — загрузка данных из таблицы. Допустим, таблицы может не существовать, или у таблицы могут быть другие поля, или это могут быть какие-то другие варианты, например, REST API сервис недоступен. В данном случае это не важно. Важно следующее: в начале, перед этой операцией, мы сохраняем текущее значение error mode переменной out error mode, а в конце, после того как операция прошла успешно или не прошла успешно, мы возвращаем то значение error mode, которая была до того, как мы запускали что-то потенциально опасное. Вторым действием мы устанавливаем значение error mode равным нулю, то есть режим игнорирования ошибок. Далее у нас идет непосредственное выполнение какой-то операции, которая может...
00:17
Speaker A
обработки таких ошибок словом будем заниматься тем что в языках программирования называется обработка исключительных ситуаций я называю ошибкой или исключительной ситуации все те проблемы которые происходят clixsense во время выполнения скрипта в результате которых скрип прерывается при стандартных настройках примеру у нас есть такой скрипт здесь
00:40
Speaker A
только указано системная переменная и я кликаю на загрузить данные загрузка данных проходит отлично все хорошо но допустим у меня есть крипте какая-то ошибка сказано синтаксическая ошибка и когда я кликаю загрузить данные система не загружает данные на двадцать второй
00:57
Speaker A
строке где у меня допущенной синтаксическая ошибка скрипт прерывает свою работу и возвращается приложение к исходному состоянии до выполнения скрипта в данном случае у нас простая ошибка я синтаксическая бывают ошибки которая вызывает например источники данных их необходимо как-то обрабатывать
01:14
Speaker A
так вот этим мы сегодня и займемся если вы программировали в языках программирования то скорее всего вам встречались конструкций типа трахаешь файле с помощью которых вывели обработку исключительных ситуаций есть таких конструкций нет licks and нету конструкций языка который позволяет
01:33
Speaker A
обрабатывать так исключительной ситуации однако в clixsense есть четыре переменные который позволяет работать с ошибками то есть вся работа с исключительным ситуация происходит через переменные и выражение типа и никаких отдельных блоков типа troyka тьфай на ли вы здесь не увидите итак мы имеем четыре
01:56
Speaker A
переменные это системные переменные они уже заданные до выполнения скрипта первая из них называется герой мод это очень простая переменная если вы установите ее значение в ноль то все операторы скрипта будут выполняться последовательно невзирая на то что какой-то из них выполнился
02:15
Speaker A
неправильно давайте разберем это на небольшом примере пусть у нас есть первая таблице мы загружаем и и inline непосредственные скрипта загрузки все окей и пусть у нас есть вторая таблица во второй таблице мы допускаем ошибку у нас нет источника
02:47
Speaker A
данных которые бы назывался и беседе и скрипт у нас не загрузит вторую таблицу кроме этого он у нас и первую таблицу не загрузит потому что либо скрипт выполняется весь либо он не выполняется то есть дойдя до 3 4 строки где находится ошибка
03:07
Speaker A
clixsense прерывает выполнение скрипта и возвращает все к исходному значение в том числе и данные которые были загружены однако если мы установим значение системной переменной героем от равны нулю то ошибка будет игнорироваться и когда мы кликнем на загрузить данный
03:26
Speaker A
произойдет следующее первая таблица загрузится далее система установит значение переменной герой мод равны нулю и все ошибки далее после того как мы установили значение и роль в мод равны нулю будут проигнорированы в том числе и ошибка загрузки данных из
03:43
Speaker A
несуществующего источника таким образом у нас приложение загрузило в первой таблице вот значение поля в этой таблице теперь давайте вернемся в скрипт и так первая переменная с которой мы познакомились эта переменная мод если ее значение равно нулю то все ошибки будут просто
04:03
Speaker A
проигнорированы то есть не выполнит какой-то оператор система перейдет к выполнению следующего оператора если он будет не выполнен сок после сервис шума и так далее до тех пор пока выполнение скрипта не закончится при этом неважно было и что-то выполнена
04:20
Speaker A
или не выполнена система все равно сохранит то что получилось в конце изначального переменной и рома значения равны единице что означает что если появилась какая то исключительно ситуацию то есть ошибка то выполнение скрипта прервется однако если вы работаете в qlikview то при значении и
04:38
Speaker A
разуму от равными единице у вас высветится общение о том хотите ли вы продолжить выполнение скрипта или нет это отличие clixsense от qlikview если же мы установим и роль мудрого нам два то неважно qlikview это или clixsense выполнение скрипта в любом случае
04:53
Speaker A
прерывается как только у вас происходит любая ошибка и приложение вернется в состоянии до выполнения скрипта кстати если вы укажете какое-то другое значение не но не один не два то скорее всего все ошибки проигнорируете а какие ещё есть переменные в clixsense по ошибкам
05:10
Speaker A
это переменный stryker ошибка последнего оператора она после каждого оператора обнуляется если при выполнении оператора нет ошибки то в нее запишите значение 0 если же в нее записал значение и отличной от нуля то это означает что при выполнении оператора возникла какая-то
05:30
Speaker A
ошибка список числовых значений переменной script error а также их расшифровки вы видите сейчас на экране это все переменные отвечающие за ошибки этот скрипт герой аккаунт она показывает общее количество ошибок скрипте то есть это количество увеличивается с каждым оператором который производит
05:51
Speaker A
ошибку и последняя переменная скриптеров лист она содержит все ошибки скрипта виде текста и эти ошибки они разделены переносом строки и так давайте посмотрим теперь как это все выглядит скрипте запустим отладку и поставим точку останова на тридцать пятой строке затем
06:10
Speaker A
запустим выполнение скрипта а теперь выполним то что находится после 35 строки обратите внимание чем у стали равны переменные которые отвечают за ошибки скриптера аккаунт 1 то есть одна ошибка в скрипте всего скриптеров details содержит описание этой пытки далее скрепил лист и скрип пера содержит
06:35
Speaker A
наименование ошибок на этом возможности системы по работе с ошибками заканчиваются то есть всего четыре переменные и с помощью них нам необходимо каждый раз выстраивать какую-то логику обработки ошибок самая плохая логика которую вы можете создать вам приложение это то что в начале
06:55
Speaker A
преложения устанавливается героя мод равный нулю и скрипт игнорирует вообще все ошибки здесь надо всегда понимать что возникновении ошибки в скрипте это очень хорошо ведь если бы ее не было мы бы никогда не узнали что с данными что то не так а если с данными будет
07:12
Speaker A
что-то не так и мы установим героем от равный нулю то могут быть очень значительные проблемы сейчас я скажу парочку из них первая проблема например у вас загрузились данные но какой-то оператора не выполнился и часть данных не загружена и пользователь который зашел в
07:27
Speaker A
систему увидел некорректные показатели он по ним сделан не корректный вывод то есть некорректное управленческое решение и тем самым поставил под угрозу организация второй пример когда в скрипте мы проигнорировали какую-то ошибку связанную с оператором и этот оператор как-то влиял на модель данных
07:46
Speaker A
конечном итоге получилось модель данных неправильно и некорректные не оптимальные которые которые привела к неправильным вычислением или например просто выдала все оперативную память сервера итак я вам рассказал как не надо делать то есть не надо устанавливать error мод равный нулю и просто закрыть
08:05
Speaker A
глаза на все ошибки так что ж надо делать для начала разберем небольшой блок кода который поможет ответить на этот вопрос этот блок кода покажет нам как можно с помощью системных переменных clixsense имитировать поведение 35 вернемся к нашему коду и запишем
08:24
Speaker A
следующее [музыка] итак у нас получился следующий кусочек кода есть потенциально опасная операция загрузка данных из таблицы допустим таблицы может не существовать или у таблицы могут быть другие поля или это могут быть какие-то другие варианты например rest api сервис недоступен
09:17
Speaker A
данном случае это не важно важно следующее в начале перед этой операции мы сохраняем текущее значение новый мод переменный out герой мод а в конце после того как операция прошла успешно или не прошла успешно мы возвращаем то значение рожу моду которая была до того
09:37
Speaker A
как мы запускали что-то потенциально опасной вторым действием и устанавливаем значение героем от равным нулю то есть режим игнорирования ошибок далее у нас идет непосредственное выполнение какой-то операции которая может выдать исключительной ситуации данном случае загрузка данных из источника данных непосредственно после
09:58
Speaker A
этой операции мы делаем проверку произошла ли в последней операции ошибка переменный script error как я уже говорил ранее , ошибка это переменная с типом dual то есть она представим и и как число и как строка в данном случае я представляю ее как
10:16
Speaker A
строку и сравниваю с пустой строкой если строка не я пустая значит произошла ошибка и мы должны что то сделать строку 42 мы пишем код обработчика нашей ошибки и так какие варианты мы можем вписать в этот обработчик во первых мы можем выполнить какую-то
10:34
Speaker A
другую операцию делающую похожие действия или загружающие похожие данные примеру если у нас не загрузились данные из rest api сервиса то мы можем взять их из excel файла или например если у нас нет поля сумма то мы используем для
10:49
Speaker A
вычисление суммы два поля количество и цена за единицу таким образом можно настраивать загрузку данных например из разных форматов когда у нас есть три формата файла мы каждый раз не знаем какой это формат данных пытаемся загрузить первым форматом не
11:06
Speaker A
получается тогда пытаемся вторым не получается тогда третий и так далее это первый вариант того что мы можем делать с ошибкой второй вариант мы можем формировать отдельную таблицу в аналитическом приложение в которую будут записываться все ошибки например это можно сделать следующим образом сначала
11:27
Speaker A
изменим проверку дело в том что script error это переменный которая обновляется позы для каждого выполненного оператора данном случае если мы будем добавлять в таблицу вот здесь наименование ошибки которые записаны в скриптеров таблицу добавится пустая строка потому что последний оператор будет f dm
11:47
Speaker A
соответственно нам нужно предварительно сохранить скрип героев какую-то другую переменную давайте зафиксируем последнюю ошибку скрипта при загрузки таблицы из abcd какую-то другую переменную и затем добавим эту ошибку журнал записали теперь давайте загрузим данные проверим то что получилось и получилось
12:31
Speaker A
то что в таблице журнал ошибок у нас есть одна запись которой написано ошибка загрузки файла pound не описанию то которые мы указали поле для описания далее есть вариант попробовать еще раз ту же операцию повторно например если у нас какая-то ошибка произошла из-за того
12:50
Speaker A
что соединяем завершил с по таймауту мы можем попробовать еще раз выполнить ту же самую операцию или допустим следующие пять раз и уже если на 5 раз не получилось выполнить эту операцию то тогда завершить скрипт просто повторяем операцию в теле обработчика ошибки и
13:09
Speaker A
последний вариант мы можем завершить выполнение скрипта но завершить его не с ошибкой то есть не так как он завершается когда система получает какую-то ошибку и вообще все действия отменяются которые производстве а просто завершить действия скрипта и то что достигнет уже на строчку
13:28
Speaker A
завершения скрипта чтобы у нас применилась приложение это сделать достаточно просто надо только написать этот скрип давайте запустим в данном случае скрипт будет работать следующим образом если встретится ошибка то оно запишется в переменную last hero далее если значение переменной last girl
13:50
Speaker A
a не равно пустой строке то есть ошибка была та в журнал запишется информация об этой ошибке и скрипт завершится при этом все то что было загружено до завершения скрипта она так и останется в приложении это очень важное отличие от аварийного завершения
14:06
Speaker A
скрипта по ошибке когда у нас все изменения они обменяются вот примерно таким образом мы можем в clixsense имитировать поведение troyka с файлами которые есть языках программирования коллеги я благодарю вас за внимание надеюсь что это видео было полезным с вами был игорь буробин до новых встреч
Topics:Qlik Senseобработка ошибокErrorModeисключительные ситуациискрипты Qlik Senseпеременные Qlik Sensetry-catchаналитика данныхпрограммирование в Qlik Senseошибки выполнения

Get More with the SozAI App

Transcribe recordings, audio files, and YouTube videos — with AI summaries and speaker detection. 30 minutes free.

Or transcribe another YouTube video here →