Для таких случаев вы можете использовать функциональность 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)
;