SubField — скрипт и функция диаграммы
Subfield() используется для извлечения компонентов подстроки из поля родительской строки, где поля исходной записи состоят из двух или более частей, разделенных знаком разделителя.
Функцию Subfield() можно использовать, например для извлечения имени или фамилии из списка записей, состоящего из полных имен, отдельных частей имени пути или для извлечения данных из таблиц с данными, разделенными запятыми.
Если используется функция Subfield() в операторе LOAD и дополнительный параметр field_no не указан, для каждой подстроки будет создана одна полная запись. Если с помощью функции Subfield() загружено несколько полей, будет создано декартово произведение всех возможных комбинаций.
Синтаксис:
SubField(text, delimiter[, field_no ])
Возвращаемые типы данных: строка
Аргументы:
Аргумент | Описание |
---|---|
text | Оригинальная строка. Это может быть неизменяемый текст, переменная, расширение со знаком доллара или другое расширение. |
delimiter | Символ во входной строке text, разделяющий строку на части. |
field_no |
Дополнительный третий аргумент, являющийся целым числом, который указывает, какие подстроки родительской строки text необходимо вернуть.
|
Примеры и результаты:
Пример | Результат |
---|---|
SubField('abc;cde;efg', ';', 2) | Возвращает 'cde' |
SubField('', ';', 1) | Возвращает NULL |
SubField(';', ';', 1) | Возвращает пустую строку. |
Добавьте образец скрипта в свой документ и запустите. Затем добавьте на лист документа как минимум поля, указанные в столбце с результатами, чтобы увидеть результаты.
FullName:
LOAD * inline [
Name
'Dave Owen'
'Joe Tem'
];
SepNames:
Load Name,
SubField(Name, ' ',1) as FirstName,
SubField(Name, ' ',-1) as Surname
Resident FullName;
Drop Table FullName;
Name | FirstName | Surname |
---|---|---|
Dave Owen | Dave | Owen |
Joe Tem | Joe | Tem |
Предположим, имеется переменная, в которой хранится имя пути vMyPath,
Set vMyPath=\Users\ext_jrb\Documents\Qlik\Sense\Apps;.
В диаграмме текста и изображения можно добавить меру следующего вида:
SubField(vMyPath, '\',-3): она вернет «Qlik», так как это третья подстрока с правой стороны от переменной vMyPath.
В данном примере показано создание нескольких строк из одного экземпляра Subfield().
Добавьте образец скрипта в свой документ и запустите. Затем добавьте на лист документа как минимум поля, указанные в столбце с результатами, чтобы увидеть результаты.
LOAD DISTINCT
Player,
SubField(Project,',') as Project;
Load * inline [
Player|Project
Neil|Music,OST
Jo|Music
Mike|Music,OST,Video
] (delimiter is '|');
Player | Project |
---|---|
Neil | Music |
Neil | OST |
Jo | Music |
Mike | Music |
Mike | OST |
Mike | Video |
Этот пример показывает, как использование нескольких экземпляров функции Subfield(), каждый с опущенным параметром field_no, внутри одного оператора LOAD создает декартовы произведения всех комбинаций. Параметр DISTINCT используется для того, чтобы избежать создания дубликатов записей.
Добавьте образец скрипта в свой документ и запустите. Затем добавьте на лист документа как минимум поля, указанные в столбце с результатами, чтобы увидеть результаты.
LOAD DISTINCT
Instrument,
SubField(Player,',') as Player,
SubField(Project,',') as Project;
Load * inline [
Instrument|Player|Project
Guitar|Neil,Mike|Music,Video
Guitar|Neil|Music,OST
Synth|Neil,Jen|Music,Video,OST
Synth|Jo|Music
Guitar|Neil,Mike|Music,OST
] (delimiter is '|');
Instrument | Player | Project |
---|---|---|
Guitar | Mike | Music |
Guitar | Mike | Video |
Guitar | Mike | OST |
Guitar | Neil | Music |
Guitar | Neil | Video |
Guitar | Neil | OST |
Synth | Jen | Music |
Synth | Jen | Video |
Synth | Jen | OST |
Synth | Jo | Music |
Synth | Neil | Music |
Synth | Neil | Video |
Synth | Neil | OST |