# SubField Função de script e de gráfico

SubField() é usado para extrair componentes de substring a partir de um campo primário de string, em que os campos de registro originais consistem em duas ou mais partes separadas por um separador.

A função Subfield() pode ser usada, por exemplo, para extrair o primeiro nome e sobrenome de uma lista de registros que consiste em nomes completos, partes do componente de um nome de caminho ou para extrair dados de tabelas separadas por vírgulas.

Se você usar a função Subfield() em um comando de LOAD com o parâmetro field\_no opcional deixado de fora, um registro completo será gerado para cada substring. Se vários campos forem carregados usando Subfield(), os produtos cartesianos de todas as combinações serão criados.

Sintaxe:

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

Tipo de dados de retorno: caractere

Argumentos

| Argumento | Descrição |
| --- | --- |
| text | A string original. Isso pode ser um texto codificado, uma variável, uma expansão de sinal de dólar ou outra expressão. |
| delimiter | Um caractere dentro do text de entrada que divide a string em partes de componente. |
| field\_no | O terceiro argumento opcional é um inteiro que especifica qual substring do text da string primária será retornado. Use o valor 1 para retornar a primeira subcadeia, 2 para retornar a segunda subcadeia, e assim por diante.<br><br><ul> <li>Se <span>field_no</span> for um valor positivo, as subcadeias serão extraídas da esquerda para a direita.</li> <li>Se <span>field_no</span> for um valor negativo, as subcadeias serão extraídas da direita para a esquerda.</li> </ul> |

Nota de dica SubField() pode ser usado em vez de combinações complexas de funções, tais como Len(), Right(), Left(), Mid() e outras funções de caracteres.

Exemplos: expressões de gráfico

| Exemplo | Resultado |
| --- | --- |
| `SubField( 'abc;cde;efg',   ';' ,2 )` | Retorna `cde` |
| `SubField( Null,   ';' ,1 )` | Retorna uma string vazia |
| `SubField( ';',   ';' ,1 )` | Retorna uma string vazia |
| `SubField( '\Users\ext_jrb\Documents\Qlik\Sense\Apps;','\',-3 )` | Retorna `Qlik` |

## Exemplo - Fundamentos de SubField

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

#### Expressão de gráfico

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.

O script de carregamento contém:

* Um conjunto de dados que é carregado em uma tabela de dados denominada `Example`.

* Um campo na tabela de dados chamado `Name`.

Script de carregamento

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

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esse campo como uma dimensão:

* ` Name
                                   `

Crie as seguintes dimensões calculadas:

* `=SubField(Name, ' ',1)` para extrair a primeira substring que aparece antes do delimitador `' '` de espaço.

* `=SubField(Name, ' ',-1)` para extrair a primeira substring que aparece antes do delimitador `' '` de espaço, começando da direita da string.

Results table

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

A função `SubField()` extrai a primeira substring de `Name` definindo o argumento `field_no` como 1. Como o valor de `field_no` é positivo, uma ordem da esquerda para a direita é seguida para extrair a subtring. Uma segunda chamada de função extrai a segunda substring definindo o argumento `field_no` como -1, que extrai a substring seguindo uma ordem da direita para a esquerda.

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

#### Script de carregamento

Script de carregamento

Abra o Editor da carga de dados e adicione o script de carregamento a seguir a uma nova seção.

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

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

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

Results table

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

Explicação

A função `SubField` extrai a primeira substring, `Name`, definindo o argumento `field_no` como 1. Como o valor de `field_no` é positivo, uma ordem da esquerda para a direita é seguida para extrair a subtring. Uma segunda chamada de função extrai a segunda substring definindo o argumento `field_no` como -1, que extrai a substring seguindo uma ordem da direita para a esquerda.

## Exemplo - Cenário de SubField

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

#### Expressão de gráfico

Visão geral

Um conjunto de dados de produtos contém uma tabela de produtos. Cada produto da tabela tem um campo de tag que identifica a área do produto. Os produtos podem ter vários valores para o campo de tag. Por exemplo, o Widget A tem as seguintes tags: Eletrônicos, Gadgets, Casa. Os valores das tags são separados pelo caractere de barra vertical (|) como delimitador. Este exemplo mostra como extrair valores de tag específicos usando a função `SubField`.

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.

O script de carregamento contém:

* Um conjunto de dados que é carregado em uma tabela de dados denominada `Example`.

* Os campos a seguir na tabela de dados:

  * `ProductID`

  * `ProductName`

  * `Tags`

  * `Sales`

Script de carregamento

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

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* ` ProductID
                                   `

* `ProductName`

* `Tags`

Crie as seguintes dimensões calculadas:

* `=SubField(Tags, '|',1)` para extrair o primeiro item do campo `Tags`.

* `=SubField(Tags, '|',2)` para extrair o segundo item do campo `Tags`.

* `=SubField(Tags, '|',3)` para extrair o terceiro item do 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 | - |

A saída das funções `SubField` retornou com sucesso as tags das posições relevantes na string `Tags` original.

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

#### Script de carregamento

Script de carregamento

Abra o Editor da carga de dados e adicione o script de carregamento a seguir a uma nova seção.

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

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

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

Explicação

Esse exemplo mostra como usar várias instâncias da função Subfield(), cada uma com o parâmetro field\_no deixado de fora, a partir do mesmo comando LOAD, cria produtos Cartesianos de todas as combinações. A opção DISTINCT é usada para evitar a criação de registros duplicados.