# SubField funkcja skryptu i funkcja wykresu

Funkcja Subfield() służy do wyodrębniania składników fragmentu tekstu z nadrzędnego pola ciągu znaków, gdy pierwotne pola rekordów składają się z co najmniej dwóch części rozdzielonych ogranicznikiem.

Funkcja Subfield() może być używana na przykład do wyodrębniania imienia i nazwiska z listy rekordów składających się z nazwisk, elementów nazwy ścieżki, lub wyodrębniania danych z tabel rozdzielanych przecinkami.

W przypadku korzystania z funkcji Subfield() w instrukcji LOAD z pozostawionym opcjonalnym parametrem field\_no, dla każdego ciągu podrzędnego zostanie wygenerowany jeden pełny rekord. Jeśli przy użyciu funkcji Subfield() załadowano kilka pól, wówczas zostanie wygenerowany iloczyn kartezjański wszystkich kombinacji.

Składnia:

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

Typ zwracanych danych: ciąg znaków

Argumenty

| Argument | Opis |
| --- | --- |
| text | Pierwotny ciąg znaków. Może to być tekst ustalony, zmienna, rozszerzenie przez znak dolara lub inne wyrażenie. |
| delimiter | Znak w tekście wejściowym text, który dzieli ciąg znaków na elementy. |
| field\_no | Opcjonalny trzeci argument jest liczbą całkowitą, określającą, które z ciągów podrzędnych tekstu nadrzędnego text ciągu znaków mają zostać zwrócone. Użycie wartości 1 spowoduje zwrócenie pierwszego fragmentu tekstu, a wartości 2 zwrócenie drugiego fragmentu tekstu, i tak dalej.<br><br><ul> <li>Jeśli <span>field_no</span> jest wartością dodatnią, wówczas podciągi są wyodrębniane od lewej do prawej.</li> <li>Jeśli <span>field_no</span> jest wartością ujemną, wówczas podciągi są wyodrębniane od prawej do lewej.</li> </ul> |

Wskazówka Funkcja SubField() może być stosowana zamiast złożonych kombinacji funkcji, takich jak Len(), Right(), Left(), Mid() i inne funkcje ciągów znaków.

Przykłady: wyrażenia wykresu

| Przykład | Wynik |
| --- | --- |
| `SubField( 'abc;cde;efg',   ';' ,2 )` | Zwraca wartość `cde` |
| `SubField( Null,   ';' ,1 )` | Zwraca pusty ciąg znaków |
| `SubField( ';',   ';' ,1 )` | Zwraca pusty ciąg znaków |
| `SubField( '\Users\ext_jrb\Documents\Qlik\Sense\Apps;','\',-3 )` | Zwraca wartość `Qlik` |

## Przykład — podstawy SubField

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

#### Wyrażenie wykresu

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Zestaw danych załadowany do tabeli o nazwie `Example`.

* Jedno pole w tabeli danych o nazwie `Name`.

Skrypt ładowania

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

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj to pole jako wymiar:

* ` Name
                                   `

Utwórz następujące wymiary wyliczane:

* `=SubField(Name, ' ',1)` do wyodrębnienia pierwszego podciągu, który pojawia się przed ogranicznikiem `' '` (spacja).

* `=SubField(Name, ' ',-1)` do wyodrębnienia pierwszego podciągu, który pojawia się przed ogranicznikiem `' '` (spacja) począwszy od prawej strony ciągu.

Results table

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

Funkcja `SubField()` wyodrębnia pierwszy podciąg z `Name`, ustawiając argument `field_no` na 1. Ponieważ wartość `field_no` jest dodatnia, w celu wyodrębnienia podciągu stosuje się kolejność od lewej do prawej. Drugie wywołanie funkcji wyodrębnia drugi podciąg, ustawiając argument `field_no` na –1, co powoduje wyodrębnienie podciągu w kolejności od prawej do lewej.

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

#### Skrypt ładowania

Skrypt ładowania

Otwórz Edytor ładowania danych i dodaj następujący skrypt ładowania do nowej sekcji.

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

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:

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

Results table

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

Objaśnienie

Funkcja `SubField` wyodrębnia pierwszy podciąg, `Name`, ustawiając argument `field_no` na 1. Ponieważ wartość `field_no` jest dodatnia, w celu wyodrębnienia podciągu stosuje się kolejność od lewej do prawej. Drugie wywołanie funkcji wyodrębnia drugi podciąg, ustawiając argument `field_no` na –1, co powoduje wyodrębnienie podciągu w kolejności od prawej do lewej.

## Przykład — zastosowanie SubField

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

#### Wyrażenie wykresu

Przegląd

Zbiór danych produktów zawiera tabelę produktów. Każdy produkt w tabeli ma pole znacznika, które identyfikuje obszar produktu. Produkty mogą mieć wiele wartości w polu znacznika. Na przykład Widget A ma następujące tagi: Electronics, Gadgets, Home. Wartości znaczników są oddzielone znakiem kreski pionowej (|) jako ogranicznikiem. Ten przykład pokazuje, jak wyodrębnić określone wartości znaczników za pomocą funkcji `SubField`.

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Zestaw danych załadowany do tabeli o nazwie `Example`.

* Tabela zawiera następujące pola:

  * `ProductID`

  * `ProductName`

  * `Tags`

  * `Sales`

Skrypt ładowania

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

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:

* ` ProductID
                                   `

* `ProductName`

* `Tags`

Utwórz następujące wymiary wyliczane:

* `=SubField(Tags, '|',1)` do wyodrębnienia pierwszego elementu w polu `Tags`.

* `=SubField(Tags, '|',2)` do wyodrębnienia drugiego elementu w polu `Tags`.

* `=SubField(Tags, '|',3)` do wyodrębnienia trzeciego elementu w polu `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 | - |

W danych wyjściowych funkcji `SubField` zostały zwrócone znaczniki z odpowiednich pozycji w pierwotnym ciągu `Tags`.

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

#### Skrypt ładowania

Skrypt ładowania

Otwórz Edytor ładowania danych i dodaj następujący skrypt ładowania do nowej sekcji.

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

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:

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

Objaśnienie

Ten przykład przedstawia, jak używając wielu instancji funkcji Subfield() (w każdej pomijając parametr field\_no) z tej samej instrukcji LOAD powoduje utworzenie iloczynów kartezjańskich wszystkich kombinacji. Opcja DISTINCT służy do unikania tworzenia zduplikowanych rekordów.