# SubField — функция скриптa и диаграммы

SubField() используется для извлечения компонентов подстроки из поля родительской строки, где поля исходной записи состоят из двух или более частей, разделенных знаком разделителя.

Функцию Subfield() можно использовать, например для извлечения имени или фамилии из списка записей, состоящего из полных имен, отдельных частей имени пути или для извлечения данных из таблиц с данными, разделенными запятыми.

Если используется функция Subfield() в операторе LOAD и дополнительный параметр field\_no не указан, для каждой подстроки будет создана одна полная запись. Если с помощью функции Subfield() загружено несколько полей, будет создано декартово произведение всех возможных комбинаций.

Синтаксис:

SubField(text, delimiter[, field\_no ])

Возвращаемые типы данных: string

Аргументы:

Аргументы

| Аргумент | Описание |
| --- | --- |
| text | Исходная строка. Это может быть неизменяемый текст, переменная, расширение со знаком доллара или другое выражение. |
| delimiter | Символ во входной строке text, разделяющий строку на части. |
| field\_no | Дополнительный третий аргумент, являющийся целым числом, который указывает, какие подстроки родительской строки text необходимо вернуть. Используйте значение 1 для возврата первой подстроки, значение 2 для возврата второй подстроки и так далее.<br><br><ul> <li>Если <span>field_no</span> является положительным значением, подстроки извлекаются слева направо.</li> <li>Если <span>field_no</span> является отрицательным значением, подстроки извлекаются справа налево.</li> </ul> |

Примечание к подсказке Функцию SubField() можно использовать вместо сложных комбинаций таких функций, как Len(), Right(), Left(), Mid() и другие строковые функции.

Примеры. Выражения диаграммы

| Пример | Результат |
| --- | --- |
| `SubField(S,   ';' ,2)` | Возвращает 'cde', если S = 'abc;cde;efg'. |
| `SubField(S,   ';' ,1)` | Возвращает пустую строку, если элемент S — пустая строка. |
| `SubField(S,   ';' ,1)` | Возвращает пустую строку, если элемент S =';'. |
| Предполагается, что уже есть переменная, которая содержит имя пути vMyPath,<br><br>`Set vMyPath=\Users\ext_jrb\Documents\Qlik\Sense\Apps;`. | В диаграмме текста и изображения можно добавить меру, такую как:<br>`SubField(vMyPath, '\',-3``)`, что даст результат «Qlik», потому что это третья подстрока, если считать с правого конца переменной vMyPath. |

## Примеры. Выражения скрипта и диаграммы с использованием SubField

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/SubField.htm)

#### Примеры. Выражения скрипта и диаграммы

### Базовые примеры

| Пример | Результат |
| --- | --- |
| `SubField(S,   ';' ,2)` | Возвращает 'cde', если S = 'abc;cde;efg'. |
| `SubField(S,   ';' ,1)` | Возвращает пустую строку, если элемент S — пустая строка. |
| `SubField(S,   ';' ,1)` | Возвращает пустую строку, если элемент S =';'. |
| Предполагается, что уже есть переменная, которая содержит имя пути vMyPath,<br><br>`Set vMyPath=\Users\ext_jrb\Documents\Qlik\Sense\Apps;`. | В диаграмме текста и изображения можно добавить меру, такую как:<br>`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 используется, чтобы не допустить создания дубликатов записей.