# SubField Script- en diagramfunctie

Subfield() wordt gebruikt voor het extraheren van onderdelen van subtekenreeksen van een bovenliggend tekenreeksveld, waarbij de oorspronkelijke recordvelden bestaat uit twee of meer onderdelen met een scheidingsteken ertussen.

De functie Subfield() kan bijvoorbeeld worden gebruikt om voornaam en achternaam te extraheren vanuit een lijst met records die bestaat uit volledige namen, de samenstellende delen van een padnaam of voor het extraheren van gegevens uit tabellen met door komma's gescheiden waarden.

Als u de functie Subfield() gebruikt in een opdracht LOAD terwijl de optionele parameter field\_no wordt weggelaten, wordt één complete record gegenereerd voor elke subtekenreeks. Als meerdere velden worden geladen met Subfield(), worden de cartesische producten van alle combinaties gemaakt.

Syntaxis:

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

Retourgegevenstypen: tekenreeks

Argumenten

| Argument | Beschrijving |
| --- | --- |
| text | De oorspronkelijke tekenreeks. Dit kan een hard gecodeerde tekst, een variabele, een uitbreiding met dollarteken of een andere uitdrukking zijn. |
| delimiter | Een teken binnen de invoerreeks text die de tekenreeks opsplitst in samenstellende delen. |
| field\_no | Het optionele derde argument is een geheel getal waarmee wordt opgegeven welke van de subtekenreeksen van de bovenliggende tekenreeks text moeten worden geretourneerd. Gebruik de waarde 1 om terug te keren naar de eerste subtekenreeks, 2 om terug te keren naar de tweede subtekenreeks, enzovoorts.<br><br><ul> <li>Als <span>field_no</span> een positieve waarde is, worden subtekenreeksen van links naar rechts geëxtraheerd.</li> <li>Als <span>field_no</span> een negatieve waarde is, worden subtekenreeksen van rechts naar links geëxtraheerd.</li> </ul> |

Tip SubField() kan worden gebruikt in plaats van complexe combinaties van functies zoals Len(), Right(), Left(), Mid() en andere tekenreeksfuncties.

Voorbeelden: diagramuitdrukkingen

| Voorbeeld | Resultaat |
| --- | --- |
| `SubField( 'abc;cde;efg',   ';' ,2 )` | Retourneert `cde` |
| `SubField( Null,   ';' ,1 )` | Retourneert een lege tekenreeks |
| `SubField( ';',   ';' ,1 )` | Retourneert een lege tekenreeks |
| `SubField( '\Users\ext_jrb\Documents\Qlik\Sense\Apps;','\',-3 )` | Retourneert `Qlik` |

## Voorbeeld - Basisprincipes voor SubField

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

#### Diagramuitdrukking

Overzicht

Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.

Het load-script bevat:

* Een gegevensverzameling die wordt geladen in een tabel met de naam `Example`.

* Eén veld in de gegevenstabel met de naam `Name`.

Load-script

```
Example:
Load * inline [
Name
Dave Owen
Joe Tem
];
```

Resultaten

Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg dit veld toe als dimensie:

* ` Name
                                   `

Maak de volgende berekende dimensies:

* `=SubField(Name, ' ',1)`, om de eerste subtekenreeks te extraheren die vóór de spatie van het `' '` scheidingsteken verschijnt.

* `=SubField(Name, ' ',-1)` om de eerste subtekenreeks te extraheren die vóór de spatie van het `' '` scheidingsteken verschijnt, beginnend vanaf de rechterkant van de tekenreeks.

Results table

| Name | SubField(Name, ' ',1) | SubField(Name, ' ',-1) |
| --- | --- | --- |
| Dave Owen | Dave | Owen |
| Joe Tem | Joe | Tem |

De functie `SubField()` haalt de eerste subtekenreeks op uit `Name` door het argument `field_no` in te stellen op 1. Aangezien de waarde van `field_no` positief is, wordt de volgorde links naar rechts gevolgd voor het ophalen van de subtekenreeks. Een tweede functieaanroep haalt de tweede subtekenreeks op door het argument `field_no` in te stellen op -1, waardoor de subtekenreeks wordt opgehaald volgens de volgorde rechts naar links.

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

#### Load-script

Load-script

Open de Editor voor laden van gegevens en voeg het volgende load-script toe aan een nieuwe sectie.

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

Resultaten

Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:

* `Name`
* `FirstName`
* `SurName`

Results table

| Name | FirstName | SurName |
| --- | --- | --- |
| Dave Owen | Dave | Owen |
| Joe Tem | Joe | Tem |

Uitleg

De functie `SubField` haalt de eerste subtekenreeks op, `Name`, door het argument `field_no` in te stellen op 1. Aangezien de waarde van `field_no` positief is, wordt de volgorde links naar rechts gevolgd voor het ophalen van de subtekenreeks. Een tweede functieaanroep haalt de tweede subtekenreeks op door het argument `field_no` in te stellen op -1, waardoor de subtekenreeks wordt opgehaald volgens de volgorde rechts naar links.

## Voorbeeld 5 – Scenario met SubField

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

#### Diagramuitdrukking

Overzicht

Een gegevensverzameling van producten bevat een producttabel. Elk product in de tabel heeft een tagveld dat het productgebied identificeert. Producten kunnen meerdere waarden voor het tagveld hebben. Widget A heeft bijvoorbeeld de volgende tags: Electronics, Gadgets, Home. Tagwaarden worden gescheiden door het sluisteken (|) als scheidingsteken. Dit voorbeeld laat zien hoe u specifieke tagwaarden kunt extraheren met de functie `SubField`.

Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.

Het load-script bevat:

* Een gegevensverzameling die wordt geladen in een tabel met de naam `Example`.

* De volgende velden in de gegevenstabel:

  * `ProductID`

  * `ProductName`

  * `Tags`

  * `Sales`

Load-script

```
Example:
Load  *
INLINE [
ProductID, ProductName, Tags, Sales
1, Widget A, Electronics|Gadgets|Home, 150
2, Widget B, Electronics|Accessories, 200
3, Widget C, Furniture|Home, 100
4, Widget D, Gadgets|Accessories, 250
];
```

Resultaten

Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:

* ` ProductID
                                   `

* `ProductName`

* `Tags`

Maak de volgende berekende dimensies:

* `=SubField(Tags, '|',1)`, om het eerste item uit het veld `Tags` te extraheren.

* `=SubField(Tags, '|',2)` om het tweede item uit het veld `Tags` te extraheren.

* `=SubField(Tags, '|',3)`, om het derde item uit het veld `Tags` te extraheren.

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

De uitvoer van de `SubField` functies heeft met succes de tags van de relevante posities in de oorspronkelijke `Tags` tekenreeks geretourneerd.

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

#### Load-script

Load-script

Open de Editor voor laden van gegevens en voeg het volgende load-script toe aan een nieuwe sectie.

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

Resultaten

Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:

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

Uitleg

Dit voorbeeld laat zien dat als u meerdere exemplaren van de functie Subfield() gebruikt, elk met de parameter field\_no weggelaten, binnen in dezelfde LOAD-opdracht, Cartesiaanse producten worden gemaakt van alle combinaties. De optie DISTINCT wordt gebruikt om te voorkomen dat dubbele records worden gemaakt.