Qlikview - вычислить и использовать вычисляемую переменную в скрипте
Как новый пользователь Qlikview, я ищу лучший способ создания вычисляемых переменных и переменных на основе вычисленных переменных в моих данных и использования их на дисплеях. Мои данные связаны через ODBC.
Например, допустим, я хочу переменную Rating, основанную на переменной "Risk" в моем наборе данных. Необработанные данные содержат переменную риска, которая является "L" или "H". Я хотел бы создать индикатор, например, Risk_H, который равен 0 или 1 (если Risk='H'). Затем я хотел бы создать рейтинг как "Рейтинг = 1 + Risk_H*2". Могу ли я сделать все это в сценарии и иметь переменную Rating в моем наборе данных?
Когда я пытаюсь описать вышеизложенное, я могу создать переменную Risk_H, но тогда я не уверен, как ссылаться на нее в сценарии для вычисления переменной Rating. Я читал другие посты, которые касаются с помощью оператора загрузки ( Qlikview Calculated Fields with Load Script), но мне не удалось использовать вычисленные переменные для создания новых переменных.
Пример кода (который работает):
SQL SELECT *,
case when (Risk = 'H') then 1
else 0
end as Risk_H
FROM [Data];
Как я могу создать Risk_H, чтобы использовать его в том же скрипте, как показано ниже? В других настройках я бы использовал что-то вроде "рассчитанного Risk_H" для ссылки на него.
SQL SELECT *,
case when (Risk = 'H') then 1
else 0
end as Risk_H,
(10 + Risk_H*2) as Rating // Qlikview says it can't find Risk_H
FROM [Data];
Я пытался создать Risk_H в скрипте загрузки, но Qlikview не распознает Risk_H в более позднем SQL-выражении. Я также попытался создать таблицу с помощью Risk_H и извлечь данные из этой таблицы. И на самом деле я пытаюсь создать 10+ индикаторов, а не только один, поэтому вложенные операторы не являются ответом.
РЕДАКТИРОВАТЬ: Мне сказали, что резидентные таблицы могут быть ответом на выполнение расчетов. Если вы можете предоставить синтаксис для этого, используя таблицы, подключенные через ODBC, это может ответить на вопрос.
1 ответ
Похоже, что ваш второй оператор Select не является допустимым SQL, поэтому QlikView будет жаловаться, что не может найти Risk_H
, Чтобы решить эту проблему, вы можете попробовать более сложный SQL-запрос с подзапросом или использовать резидентную загрузку в QlikView следующим образом:
Source_Data:
SQL SELECT *,
case when (Risk = 'H') then 1
else 0
end as Risk_H
FROM [Data];
Calculated_Data:
NOCONCATENATE
LOAD
*,
(10 + Risk_H*2) as Rating
RESIDENT Source_Data;
DROP TABLE Source_Data;
Вы также упомянули, что у вас есть около 10 индикаторов, которые вы хотите использовать, поэтому я согласен, case
Заявление, вероятно, не будет хорошей идеей. Вы также можете переместить эту часть в QlikView, если хотите использовать MAPPING
загрузить и ApplyMap
функционировать следующим образом:
Indicator_Map:
MAPPING
LOAD
*
INLINE [
Risk, Value
H, 1
I, 2
J, 3
];
Source_Data:
SQL SELECT *,
case when (Risk = 'H') then 1
else 0
end as Risk_H
FROM [Data];
Calculated_Data:
NOCONCATENATE
LOAD
*,
(10 + (ApplyMap('Indicator_Map',Risk, 0) * 2)) as Rating
RESIDENT Source_Data;
DROP TABLE Source_Data;
Я добавил пару дополнительных записей для ваших "индикаторов риска", чтобы дать вам представление. Конечно, таблица не обязательно должна быть встроенной, она может быть из другого оператора SQL, другого файла и т. Д.
В приведенном выше примере происходит то, что Risk
значение поля передается в качестве параметра в таблицу сопоставления Indicator_Map
который затем возвращает соответствующее значение. Если значение риска не найдено, возвращается 0 (третий параметр).