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

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

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

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

Синтаксис:

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

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

Аргументы:

аргументы SubField

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

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

Примеры и результаты:

Примеры 1-3

| Пример | Результат |
| --- | --- |
| ` 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;`

Пример 4

| 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 '|');`

Пример 5

| 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 '|');`

Пример 6

| 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 |