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 (третий параметр).

Другие вопросы по тегам