SubField() используется для извлечения компонентов подстроки из поля родительской строки, где поля исходной записи состоят из двух или более частей, разделенных знаком разделителя.
Функцию Subfield() можно использовать, например для извлечения имени или фамилии из списка записей, состоящего из полных имен, отдельных частей имени пути или для извлечения данных из таблиц с данными, разделенными запятыми.
Если используется функция Subfield() в операторе LOAD и дополнительный параметр field_no не указан, для каждой подстроки будет создана одна полная запись. Если с помощью функции Subfield() загружено несколько полей, будет создано декартово произведение всех возможных комбинаций.
Синтаксис:
SubField(text,
delimiter[, field_no ])
Возвращаемые типы данных: string
Аргументы
Аргумент
Описание
text
Оригинальная строка. Это может быть неизменяемый текст, переменная, расширение со знаком доллара или другое выражение.
delimiter
Символ во входной строке text, разделяющий строку на части.
field_no
Дополнительный третий аргумент, являющийся целым числом, который указывает, какие подстроки родительской строки text необходимо вернуть. Используйте значение 1 для возврата первой подстроки, значение 2 для возврата второй подстроки и так далее.
Если field_no является положительным значением, подстроки извлекаются слева направо.
Если field_no является отрицательным значением, подстроки извлекаются справа налево.
Примечание к подсказке Функцию SubField() можно использовать вместо сложных комбинаций таких функций, как Len(), Right(), Left(), Mid() и другие строковые функции.
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Набор данных, который загружается в таблицу данных под именем Example.
Одно поле в таблице данных под именем Name.
Скрипт загрузки
Example:
Load * inline [
Name
Dave Owen
Joe Tem
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение:
Name
Создайте следующие вычисляемые измерения:
=SubField(Name, ' ',1), чтобы извлечь первую подстроку, которая идет перед разделителем-пробелом ' '.
=SubField(Name, ' ',-1), чтобы извлечь первую подстроку, которая идет перед разделителем-пробелом ' ', начиная с правого кона строки.
Results table
Name
SubField(Name, ' ',1)
SubField(Name, ' ',-1)
Dave Owen
Dave
Owen
Joe Tem
Joe
Tem
Функция SubField() извлекает первую подстроку из Name, задавая аргументу field_no значение 1. Так как field_no имеет положительное значение, при извлечении подстроки соблюдается порядок «слева направо». Второй вызов функции извлекает вторую подстроку, задавая аргументу field_no значение -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
Results table
Name
FirstName
SurName
Dave Owen
Dave
Owen
Joe Tem
Joe
Tem
Объяснение
Функция SubField извлекает первую подстроку из Name, задавая аргументу field_no значение 1. Так как field_no имеет положительное значение, при извлечении подстроки соблюдается порядок «слева направо». Второй вызов функции извлекает вторую подстроку, задавая аргументу field_no значение -1, при этом соблюдается порядок «справа налево».
Пример. Сценарий использования SubField
Обзор
Набор данных о продуктах содержит таблицу продуктов. Каждый продукт в таблице имеет поле тега, которое идентифицирует область продукта. Продукты могут иметь несколько значений для поля тега. Например, для продукта Widget A указаны следующие теги: Electronics, Gadgets, Home. Значения тегов разделяются символом «прямая черта» (|). В этом примере показано, как извлечь конкретные значения тегов с помощью функции SubField.
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Набор данных, который загружается в таблицу данных под именем Example.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
ProductID
ProductName
Tags
Создайте следующие вычисляемые измерения:
=SubField(Tags, '|',1), чтобы извлечь первый элемент в поле Tags.
=SubField(Tags, '|',2), чтобы извлечь второй элемент в поле Tags.
=SubField(Tags, '|',3), чтобы извлечь второй элемент в поле Tags.
Results table
ProductID
ProductName
Tags
SubField(Tags, '|', 1)
SubField(Tags, '|', 2)
SubField(Tags, '|', 3)
1
Widget A
Electronics|Gadgets|Home
Electronics
Gadgets
Home
2
Widget B
Electronics|Accessories
Electronics
Accessories
-
3
Widget C
Furniture|Home
Furniture
Home
-
4
Widget D
Gadgets|Accessories
Gadgets
Accessories
-
Вывод функций SubField успешно возвращает теги из соответствующих позиций в исходной строке Tags.
Скрипт загрузки
Откройте Редактор загрузки данных и добавьте следующий скрипт загрузки на новую вкладку.
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
Results table
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 используется, чтобы не допустить создания дубликатов записей.
Помогла ли вам эта страница?
Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!