# SubField Función de script y de gráfico

SubField() se utiliza para extraer componentes de subcadenas de un campo de cadena principal, donde los campos de registro originales constan de dos o más partes separadas por un delimitador.

La función Subfield() debe utilizarse, por ejemplo, para extraer el nombre y apellido de una lista de registros que contienen nombres completos, las partes que componen el nombre de una ruta, o para extraer datos de tablas separadas por comas.

Si utiliza la función Subfield() en una sentencia LOAD con el parámetro opcional field\_no omitido, se generará un registro completo para cada subcadena. Si se cargan varios campos utilizando Subfield() se crean los productos cartesianos de todas las combinaciones.

Sintaxis:

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

Tipo de datos que devuelve: cadena

Argumentos

| Argumento | Descripción |
| --- | --- |
| text | La cadena original. Puede ser un texto escrito directamente en el código, una variable, una expansión de signo dólar u otra expresión. |
| delimiter | Un carácter dentro de los datos introducidos en text que divide la cadena en partes componentes. |
| field\_no | El tercer argumento opcional es un entero que especifica cuál de las subcadenas de la cadena principal text se devolverá. Utilice el valor 1 para volver a la primera subcadena, 2 para volver a la segunda subcadena, etc.<br><br><ul> <li>Si <span>field_no</span> es un valor positivo, las subcadenas se extraen de izquierda a derecha.</li> <li>Si <span>field_no</span> es un valor negativo, las subcadenas se extraen de derecha a izquierda.</li> </ul> |

Nota de sugerencia SubField() se puede usar en lugar de utilizar combinaciones complejas de funciones como Len(), Right(), Left(), Mid() y otras funciones de cadena.

Ejemplos: expresiones de gráfico

| Ejemplo | Resultado |
| --- | --- |
| `SubField( 'abc;cde;efg',   ';' ,2 )` | Devuelve `cde` |
| `SubField( Null,   ';' ,1 )` | Devuelve una cadena vacía |
| `SubField( ';',   ';' ,1 )` | Devuelve una cadena vacía |
| `SubField( '\Users\ext_jrb\Documents\Qlik\Sense\Apps;','\',-3 )` | Devuelve `Qlik` |

## Ejemplo: fundamentos de SubField

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

#### Expresión de gráfico

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Un conjunto de datos que se carga en una tabla de datos denominada `Example`.

* Un campo de la tabla de datos llamado `Name`.

Script de carga

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

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue este campo como dimensión:

* ` Name
                                   `

Cree las siguientes dimensiones calculadas:

* `=SubField(Name, ' ',1)`, para extraer la primera subcadena que aparezca antes del espacio `' '` delimitador.

* `=SubField(Name, ' ',-1)`, para extraer la primera subcadena que aparezca antes del espacio delimitador `' '`, empezando por la derecha de la cadena.

Results table

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

La función `SubField()` extrae la primera subcadena de `Name` poniendo el argumento `field_no` en 1. Como el valor de `field_no` es positivo, se sigue un orden de izquierda a derecha para extraer la subcadena. Una segunda llamada a la función extrae la segunda subcadena estableciendo el argumento `field_no` en -1, lo que extrae la subcadena siguiendo un orden de derecha a izquierda.

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

#### Script de carga

Script de carga

Abra la página Editor de carga de datos y añada el siguiente script de carga a una nueva sección.

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

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

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

Results table

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

Explicación

La función `SubField` extrae la primera subcadena, `Name`, poniendo el argumento `field_no` a 1. Como el valor de `field_no` es positivo, se sigue un orden de izquierda a derecha para extraer la subcadena. Una segunda llamada a la función extrae la segunda subcadena estableciendo el argumento `field_no` en -1, lo que extrae la subcadena siguiendo un orden de derecha a izquierda.

## Ejemplo: uso de SubField

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

#### Expresión de gráfico

Vista general

Un conjunto de datos de productos contiene una tabla de productos. Cada producto de la tabla tiene un campo de etiqueta que identifica el área del producto. Los productos pueden tener varios valores para el campo etiqueta. Por ejemplo, el widget A tiene las siguientes etiquetas: Electrónica, Gadgets, Hogar. Los valores de las etiquetas están separados por el carácter vertical (|) como delimitador. Este ejemplo muestra cómo extraer valores de etiqueta específicos utilizando la función `SubField`.

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Un conjunto de datos que se carga en una tabla de datos denominada `Example`.

* Los siguientes campos de la tabla de datos:

  * `ProductID`

  * `ProductName`

  * `Tags`

  * `Sales`

Script de carga

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

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

* ` ProductID
                                   `

* `ProductName`

* `Tags`

Cree las siguientes dimensiones calculadas:

* `=SubField(Tags, '|',1)`, para extraer el primer elemento del campo `Tags`.

* `=SubField(Tags, '|',2)`, para extraer el segundo elemento del campo `Tags`.

* `=SubField(Tags, '|',3)`, para extraer el tercer elemento del campo `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 | - |

El resultado de las funciones `SubField` ha devuelto con éxito las etiquetas de las posiciones relevantes en la cadena `Tags` original.

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

#### Script de carga

Script de carga

Abra la página Editor de carga de datos y añada el siguiente script de carga a una nueva sección.

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

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

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

Explicación

Este ejemplo muestra cómo el uso de múltiples instancias de la función Subfield(), cada una con el parámetro field\_no omitido, desde dentro de la misma sentencia LOAD crea productos cartesianos de todas las combinaciones. La opción DISTINCT se utiliza para evitar la creación de registros duplicados.