SubField() используется для извлечения компонентов подстроки из поля родительской строки, где поля исходной записи состоят из двух или более частей, разделенных знаком разделителя.
Функцию Subfield() можно использовать, например для извлечения имени или фамилии из списка записей, состоящего из полных имен, отдельных частей имени пути или для извлечения данных из таблиц с данными, разделенными запятыми.
Если используется функция Subfield() в операторе LOAD и дополнительный параметр field_no не указан, для каждой подстроки будет создана одна полная запись. Если с помощью функции Subfield() загружено несколько полей, будет создано декартово произведение всех возможных комбинаций.
Синтаксис:
SubField(text,
delimiter[, field_no ])
Возвращаемые типы данных: строка
Аргументы:
Аргументы
Аргумент
Описание
text
Оригинальная строка. Это может быть неизменяемый текст, переменная, расширение со знаком доллара или другое выражение.
delimiter
Символ во входной строке text, разделяющий строку на части.
field_no
Дополнительный третий аргумент, являющийся целым числом, который указывает, какие подстроки родительской строки text необходимо вернуть. Используйте значение 1 для возврата первой подстроки, значение 2 для возврата второй подстроки и так далее.
Если field_no является положительным значением, подстроки извлекаются слева направо.
Если field_no является отрицательным значением, подстроки извлекаются справа налево.
Примечание к подсказке Функцию SubField() можно использовать вместо сложных комбинаций таких функций, как Len(), Right(), Left(), Mid() и другие строковые функции.
Примеры: Выражения скрипта и диаграммы с использованием SubField
Базовые примеры
Пример
Результат
SubField(S, ';' ,2)
Возвращает 'cde', если S = 'abc;cde;efg'.
SubField(S, ';' ,1)
Возвращает пустую строку, если элемент S — пустая строка.
SubField(S, ';' ,1)
Возвращает пустую строку, если элемент S =';'.
Предполагается, что уже есть переменная, которая содержит имя пути vMyPath,
Set vMyPath=\Users\ext_jrb\Documents\Qlik\Sense\Apps;.
В диаграмме текста и изображения можно добавить меру, такую как: SubField(vMyPath, '\',-3), что даст результат «Qlik», потому что это третья подстрока, если считать с правого конца переменной vMyPath.
Пример скрипта 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;
Создать визуализацию
Создайте на листе Qlik Sense визуализацию таблицы с измерениями Name, FirstName и SurName.
Результат
Name
FirstName
SurName
Dave Owen
Dave
Owen
Joe Tem
Joe
Tem
Объяснение
Функция SubField() извлекает первую подстроку из Name, задавая аргументу field_no значение 1. Так как field_no имеет положительное значение, при извлечении подстроки соблюдается порядок «слева направо». Второй вызов функции извлекает вторую подстроку, задавая аргументу field _no значение -1, при этом соблюдается порядок «справа налево».
Пример скрипта 2
Скрипт загрузки
Загрузите следующие выражения скрипта и данные в редакторе загрузки данных.
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 '|');
Создать визуализацию
Создайте на листе Qlik Sense визуализацию таблицы с измерениями Instrument, Player и Project.
Результат
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
Объяснение
В этом примере показано, как с помощью нескольких экземпляров функции Subfield(), в каждом из которых не указан параметр field_no, из одного оператора LOAD создать декартово произведение всех возможных комбинаций. Параметр DISTINCT используется, чтобы не допустить создания дубликатов записей.
Помогла ли вам эта страница?
Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!