QlikView - Как использовать «set» в «edit script» во время процесса загрузки - PullRequest
1 голос
/ 08 июля 2019

Я пытаюсь загрузить поле с номерами от 1 до 12. Но я хочу, чтобы в Qlik View загружалось эквивалентное название месяца.Например, вместо 1 я хочу, чтобы ячейка содержала Jan, а вместо 2 я хочу, чтобы это был февраль и т. Д., Везде, где люди предлагают использовать переменную set с именем MonthNames.Когда я загружаю таблицу в представление qlik, я вижу переменную MonthNames = "jan; feb; mar; apr; .. ', которую можно использовать для назначения соответствующего месяца полю. Но я не могу найти примеркак его использовать. Может кто-нибудь помочь, пожалуйста?

Мое имя поля "Mon". Я не уверен, как использовать это в моем операторе загрузки в сценарии редактирования.

1 Ответ

3 голосов
/ 08 июля 2019

Для таких случаев вы можете использовать функциональность Mappng Load .Вы можете думать о отображении нагрузки как о функции поиска.При вызове во время загрузки данных для каждого загруженного значения сопоставление будет пытаться найти совпадение в таблице сопоставления.Если совпадение не найдено, возвращается оригинальное значение.

Таблицы сопоставления не являются частью модели данных, и их не нужно отбрасывать

В приведенном ниже примере таблица сопоставления называется Months и содержит числа от 1 до 12 ипротив каждого числа есть строковое значение, которое должно быть возвращено.Сопоставление вызывается с помощью функции ApplyMap, которая принимает 2-3 параметра:

  • имя сопоставления - имя таблицы сопоставления (имя должно быть в кавычках) * поле 1012 *
  • name - поле, к которому должно применяться сопоставление
  • значение по умолчанию (необязательно) - если не указано, когда совпадение не найдено, возвращается исходное значение.Это может быть перезаписано с помощью этого параметра.Например: ApplyMap('MyMappingTable', MyField, 'No match found')

Скрипт:

Months:
Mapping
Load * Inline [
  Old, New
  1  , Jan
  2  , Feb
  3  , Mar
  4  , Apr
  5  , May
  6  , Jun
  7  , Jul
  8  , Aug
  9  , Sep
  10 , Oct
  11 , Nov
  12 , Dec
];


Data:
Load
  MyFeld, // this will contain the original values
  ApplyMap('Months', MyField) as MyField_Months // this will contain the month names values
From
  MyData.qvd (qvd)
;

Обновление:

Вы можете использовать переменную set MonthNames для генерации таблицы mapping,Способ сделать это состоит в том, чтобы разделить содержимое переменной на ; и создать строку для каждого элемента и связать для него идентификатор.В Qlik есть хорошая функция для разбиения строки на несколько строк - SubField ()

SubField() принимает два параметра (и один необязательный)

  • Имя поля -допустимое имя поля, содержащее строковое значение
  • Delimiter - строка, на которую должна быть разбита строка
  • Возможность (необязательно) - функция может разбивать строку и возвращать значение в позиции N. Указаниеэтот параметр будет возвращать только одно значение из исходной строки

В этом случае строка содержит названия месяцев, разделенные ; - 'Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec'

Когда вызывается SubField()с этой строкой таблица результатов будет:

Jan
Feb
Mar
Apr
...

Обновленный скрипт:

Months:
Mapping // comment this row to view the "real" table
// Use SubField function to create N number of rows
// by separating the variable on ';'
// Use RowNo() function to generate and Id (1 ... 12)
// For each row
Load
  RowNo()                        as Id,
  SubField(MonthNames_Temp, ';') as MonthNames
;
// Get the content of the MonthNames variable as a string
// and generate one-row table
Load
  '$(MonthNames)' as MonthNames_Temp
AutoGenerate(1)
;
...