# SubField - Fonction de script et de graphique

SubField() permet d'extraire des composants de sous-chaîne d'un champ de chaîne parent, où les champs d'enregistrement d'origine se composent de plusieurs parties séparées par un délimiteur.

La fonction Subfield() peut s'utiliser, par exemple, pour extraire le prénom et le nom de famille d'une liste d'enregistrements constituée de noms complets, les parties de composant d'un nom de chemin ou encore les données de tables séparées par des virgules.

Si vous utilisez la fonction Subfield() dans une instruction LOAD en ignorant le paramètre field\_no facultatif, un enregistrement complet sera généré pour chaque sous-chaîne. Si plusieurs champs sont chargés à l'aide de la fonction Subfield(), les produits cartésiens de toutes les combinaisons sont créés.

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

chaîne

Arguments

| Argument | Description |
| --- | --- |
| text | Chaîne d'origine. Il peut s'agir d'un texte codé de manière irréversible, d'une variable, d'une expansion dollar ou d'une autre expression. |
| delimiter | Caractère inclus dans la chaîne d'entrée text qui divise la chaîne en plusieurs composants. |
| field\_no | Le troisième argument, facultatif, est un entier spécifiant laquelle des sous-chaînes de la chaîne parent text doit être renvoyée. Utilisez la valeur 1 pour renvoyer la première sous-chaîne, la valeur 2 pour renvoyer la deuxième sous-chaîne, et ainsi de suite.<br><br><ul> <li>Si <span>field_no</span> est une valeur positive, les sous-chaînes sont extraites de gauche à droite.</li> <li>Si <span>field_no</span> est une valeur négative, les sous-chaînes sont extraites de droite à gauche.</li> </ul> |

Note Conseil Il est possible d'utiliser SubField() à la place de combinaisons de fonctions complexes telles que Len(), Right(), Left(), Mid() et d'autres fonctions de chaîne.

Exemples : Expressions de graphique

| Exemple | Résultat |
| --- | --- |
| `SubField( 'abc;cde;efg',   ';' ,2 )` | Renvoie `cde`. |
| `SubField( Null,   ';' ,1 )` | Renvoie une chaîne vide. |
| `SubField( ';',   ';' ,1 )` | Renvoie une chaîne vide. |
| `SubField( '\Users\ext_jrb\Documents\Qlik\Sense\Apps;','\',-3 )` | Renvoie `Qlik`. |

## Exemple - Les bases de SubField

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

#### Expression de graphique

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Jeu de données chargé dans une table de données appelée `Example`.

* Champ dans la table de données portant le nom `Name`.

Script de chargement

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

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ce champ comme dimension :

* ` Name
                                   `

Créez les dimensions calculées suivantes :

* `=SubField(Name, ' ',1)` pour extraire la première sous-chaîne qui apparaît avant le délimiteur d'espace `' '`.

* `=SubField(Name, ' ',-1)` pour extraire la première sous-chaîne qui apparaît avant le délimiteur d'espace `' '`, en commençant par la droite de la chaîne.

Results table

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

La fonction `SubField()` extrait la première sous-chaîne de `Name` en définissant l'argument `field_no` sur 1. Étant donné que la valeur de `field_no` est positive, un ordre de gauche à droite est suivi pour l'extraction de la sous-chaîne. Un deuxième appel de fonction extrait la deuxième sous-chaîne en définissant l'argument `field_no` sur -1, ce qui extrait la sous-chaîne en suivant un ordre de droite à gauche.

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

#### Script de chargement

Script de chargement

Ouvrez l'Éditeur de chargement de données et ajoutez le script de chargement suivant à une nouvelle section.

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

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

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

Results table

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

Explication

La fonction `SubField` extrait la première sous-chaîne, `Name`, en définissant l'argument `field_no` sur 1. Étant donné que la valeur de `field_no` est positive, un ordre de gauche à droite est suivi pour l'extraction de la sous-chaîne. Un deuxième appel de fonction extrait la deuxième sous-chaîne en définissant l'argument `field_no` sur -1, ce qui extrait la sous-chaîne en suivant un ordre de droite à gauche.

## Exemple - Scénario SubField

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

#### Expression de graphique

Vue d'ensemble

Un jeu de données de produits contient une table de produits. Chaque produit de la table possède un champ de balise qui identifie la zone du produit. Les produits peuvent avoir plusieurs valeurs pour le champ tag (balise). Par exemple, le widget A a les balises suivantes : Electronics, Gadgets, Home (Maison). Les valeurs des balises sont séparées par le caractère pipe (|) comme délimiteur. Cet exemple vous montre comment extraire des valeurs de balises spécifiques à l'aide de la fonction `SubField`.

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Jeu de données chargé dans une table de données appelée `Example`.

* Champs suivants dans la table de données :

  * `ProductID`

  * `ProductName`

  * `Tags`

  * `Sales`

Script de chargement

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

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* ` ProductID
                                   `

* `ProductName`

* `Tags`

Créez les dimensions calculées suivantes :

* `=SubField(Tags, '|',1)` pour extraire le premier élément du champ `Tags`.

* `=SubField(Tags, '|',2)` pour extraire le deuxième élément du champ `Tags`.

* `=SubField(Tags, '|',3)` pour extraire le troisième élément du champ `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 | - |

La sortie des fonctions `SubField` a réussi à renvoyer les balises des positions correspondantes dans la chaîne `Tags` d'origine.

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

#### Script de chargement

Script de chargement

Ouvrez l'Éditeur de chargement de données et ajoutez le script de chargement suivant à une nouvelle section.

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

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

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

Explication

Cet exemple montre comment l'utilisation de plusieurs instances de la fonction Subfield(), chacune omettant le paramètre field\_no, à partir de la même instruction LOAD, crée des produits cartésiens de toutes les combinaisons. L'option DISTINCT est utilisée pour éviter de créer des enregistrements en double.