# SubField Skript- och diagramfunktion

Subfield() används för att extrahera delsträngkomponenter från ett överordnat strängfält där de ursprungliga postfälten består av två eller fler delar, som separeras av en avgränsare.

Subfield()-funktionen kan användas till exempel för att extrahera förnamn och efternamn från en lista av poster som innehåller fullständiga namn, komponentdelarna i ett sökvägsnamn eller för att extrahera data från kommaavgränsade tabeller.

Om du använder funktionen Subfield() i en LOAD-sats med den valbara parametern field\_no utelämnad kommer en fullständig post genereras för varje delsträng. Om flera fält laddas med hjälp av Subfield() skapas de kartesiska produkterna för alla kombinationer.

Syntax:

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

Returnerad datatyp: sträng

Argument

| Argument | Beskrivning |
| --- | --- |
| text | Den ursprungliga strängen. Detta kan vara en hårdkodad text, en variabel, en dollarteckensexpansion eller ett annat uttryck. |
| delimiter | Ett tecken med indata-text som delar in strängen i dess komponentdelar. |
| field\_no | Det valbara tredje argumentet är ett heltal som vilka av delsträngarna i den överordnade strängen text som ska returneras. Använd värdet 1 om du vill returnera den första delsträngen, 2 om du vill returnera den delsträngen och så vidare.<br><br><ul> <li>Om <span>field_no</span> är ett positivt värde extraheras understrängar från vänster till höger.</li> <li>Om <span>field_no</span> är ett negativt värde extraheras understrängar från höger till vänster.</li> </ul> |

Anteckning om tips SubField() kan användas istället för att använda komplexa kombinationer av funktioner, som t.ex. Len(), Right(), Left(), Mid() och andra strängfunktioner.

Exempel: diagramuttryck

| Exempel | Resultat |
| --- | --- |
| `SubField( 'abc;cde;efg',   ';' ,2 )` | Returnerar `cde` |
| `SubField( Null,   ';' ,1 )` | Returnerar en tom sträng |
| `SubField( ';',   ';' ,1 )` | Returnerar en tom sträng |
| `SubField( '\Users\ext_jrb\Documents\Qlik\Sense\Apps;','\',-3 )` | Returnerar `Qlik` |

## Exempel – grunderna i SubField

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

#### Diagramuttryck

Översikt

Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.

Laddningsskriptet innehåller:

* En datauppsättning som läses in i en datatabell som heter `Example`.

* Ett fält i datatabellen heter `Name`.

Laddningsskript

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

Resultat

Ladda data och öppna ett ark. Skapa en ny tabell och lägg till det här fältet som en dimension:

* ` Name
                                   `

Skapa följande beräknade dimensioner:

* `=SubField(Name, ' ',1)` för att extrahera den första delsträngen som visas före mellanslagsavgränsaren `' '`.

* `=SubField(Name, ' ',-1)`, för att extrahera den första delsträngen som visas före mellanslagsavgränsaren `' '`, med början från höger om strängen.

Results table

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

`SubField()`-funktionen extraherar den första delsträngen i `Name` genom att ställa in `field_no` på 1. Eftersom värdet i `field_no` är positivt, används ordningen vänster till höger vid extrahering av delsträngen. Ett andra funktionsanrop extraherar den andra delsträngen genom att ställa in argumentet `field_no` på -1, vilket extraherar delsträngen i ordningen höger till vänster.

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

#### Laddningsskript

Laddningsskript

Öppna Skriptredigeraren och lägg till följande laddningsskript till ett nytt delavsnitt.

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

Resultat

Ladda data och öppna ett ark. Skapa en ny tabell och lägg till dessa fält som dimensioner:

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

Results table

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

Förklaring

`SubField`-funktionen extraherar den första delsträngen, `Name`, genom att ställa in `field_no` på 1. Eftersom värdet i `field_no` är positivt, används ordningen vänster till höger vid extrahering av delsträngen. Ett andra funktionsanrop extraherar den andra delsträngen genom att ställa in argumentet `field_no` på -1, vilket extraherar delsträngen i ordningen höger till vänster.

## Exempel – SubField-scenario

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

#### Diagramuttryck

Översikt

En dataupsättning med produkter innehåller en produkttabell. Varje produkt i tabellen har ett taggfält som identifierar produktområdet. Produkter kan ha flera värden för taggfältet. Widget A har till exempel följande taggar: elektronik, prylar, hem. Taggvärdena separeras av pipetecknet (|) som avgränsare. Det här exemplet visar hur du extraherar specifika taggvärden med hjälp av `SubField`-funktionen.

Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.

Laddningsskriptet innehåller:

* En datauppsättning som läses in i en datatabell som heter `Example`.

* Följande fält i datatabellen:

  * `ProductID`

  * `ProductName`

  * `Tags`

  * `Sales`

Laddningsskript

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

Resultat

Ladda data och öppna ett ark. Skapa en ny tabell och lägg till dessa fält som dimensioner:

* ` ProductID
                                   `

* `ProductName`

* `Tags`

Skapa följande beräknade dimensioner:

* `=SubField(Tags, '|',1)` för att ta ut den första posten i `Tags`-fältet.

* `=SubField(Tags, '|',2)`, för att ta ut den andra posten i `Tags`-fältet.

* `=SubField(Tags, '|',3)` för att ta ut den tredje posten i `Tags`-fältet.

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

Utdata från `SubField`-funktionerna har framgångsrikt returnerat taggarna från de relevanta positionerna i den ursprungliga `Tags`-strängen.

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

#### Laddningsskript

Laddningsskript

Öppna Skriptredigeraren och lägg till följande laddningsskript till ett nytt delavsnitt.

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

Resultat

Ladda data och öppna ett ark. Skapa en ny tabell och lägg till dessa fält som dimensioner:

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

Förklaring

Det här exemplet visar hur användning av flera förekomster av Subfield()-funktionen, där parametern field\_no har utelämnats, inom samma LOAD-sats skapar kartesiska produkter av alla kombinationerna. Alternativet DISTINCT används för att undvika att skapa dubbletter av poster.