Обработка исключительных ситуаций в Qlik Sense происходит не так как в языках программирования.
Здесь нет специальных конструкций языка позволяющих делать защищенный блок и обрабатывать исключение. Однако, здесь есть четыре переменные которые содержат режим ошибок скрипт и сведения об ошибках.
ErrorMode
— определяет режим работы скрипта. Для Qlik Sense значение 0 это игнорирование ошибок, значение 1 или 2 — аварийное завершение скрипта загрузки данных в случае ошибки. Значение вы можете менять в скрипте загрузки.
ScriptError
— ошибка последнего оператора. В это переменную записывается значение типа dual. Как текст оно равно пустой строке в случае если оператор выполнен без ошибок. Прошу обратите внимание! Это ошибка последнего оператора. То есть если ошибка произошла в предпоследнем операторе то переменная будет равна пустой строке.
ScriptErrorCount
и ScriptErrorList
— отвечают за общее количество ошибок в скрипте и детализацию ошибок.
TRY… CATCH… ?
Пример кода, для обработки исключительной ситуации ниже.
// Устанавливаем ВРЕМЕННО значение ErrorMode
LET OldErrorMode = $(ErrorMode);
SET ErrorMode = 0;
// Загрузка таблицы - выполняем потенциально ошибочную ситуацию
Таблица2:
LOAD * FROM abcd;<br>LET LastError = '$(ScriptError)';
// Проверяем не произошла ли ошибка
If ('$(LastError)' <> '') Then
// Делаем что-то если возникла ошибка
ЖурналОшибок:
LOAD
'$(LastError)' as ОшибкаЗагрузки,
'Проблема загрузки из abcd' as ОписаниеОшибки
AUTOGENERATE 1;
EXIT SCRIPT;
End if
// Возвращаем значение переменной ErrorMode
LET ErrorMode = $(OldErrorMode);
Это важно
Если возникла ошибка времени выполнения скрипта загрузки данных, то следует помнить о следующем:
1. Ошибку не следует просто подавлять. В случае подавления ошибки вы ее не обработали и какая то часть данных не загружена. А может быть не выполнен какой то важный оператор. В любом случае об этом никто не узнает и это будет проблема.
2. Ошибку можно записать в журнал ошибок (сделать отдельную таблицу с журналом ошибок).
3. Если ошибка возникла то может быть стоит загрузить данные из другого источника или попробовать операцию еще раз (для тех операций которые имеют разную успешность в зависимости от момента выполнения).
4. Скрипт можно завершить успешно и не продолжать загружать данные.