# SubField - 脚本和图表函数

SubField() 用于从父字符串字段提取子字符串组成部分，其中原始记录字段由两个或更多用分隔符分隔的部分构成。

Subfield() 函数可用于（例如）从由全名、路径名的组成部分构成的记录的列表中提取名字和姓氏，或用于从逗号分隔的表格中提取数据。

如果在忽略可选 field\_no 参数的 LOAD 语句中使用 Subfield() 函数，则会为每个子字符串生成一个完整记录。如果使用 Subfield() 加载多个字段，则会创建所有组合的 Cartesian 产品。

语法：

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

返回数据类型： 字符串

参数：

参数

| 参数 | 说明 |
| --- | --- |
| text | 原始字符串。可以是硬编码文本、变量、货币符号扩展或其他表达式。 |
| delimiter | 输入 text 中将字符串分成各组成部分的字符。 |
| field\_no | 可选的第三个参数是整数，用于指定返回父字符串 text 的哪些子字符串。使用值 1 可以返回第一个子字符串，使用值 2 可以返回第二个字符串，以此类推。<br><br><ul> <li>如果 <span>field_no</span> 为正值，子字符串是自左至右提取的。</li> <li>如果 <span>field_no</span> 为负值，子字符串是自右至左提取的。</li> </ul> |

提示注释 可以使用 SubField() 代替复杂的函数组合（例如 Len()、Right()、Left()、Mid()）和其他字符串函数。

示例：图表表达式

| 示例 | 结果 |
| --- | --- |
| `SubField(S,   ';' ,2)` | 如果 S 为 'abc;cde;efg'，则返回 'cde'。 |
| `SubField(S,   ';' ,1)` | 如果 S 为空字符串，则返回一个空字符串。 |
| `SubField(S,   ';' ,1)` | 如果 S 为 ';'，则返回一个空字符串。 |
| 假设您有一个变量，其值为路径名 vMyPath，<br><br>`Set vMyPath=\Users\ext_jrb\Documents\Qlik\Sense\Apps;`。 | 在文本和图像图表中，可添加度量，诸如：<br>`SubField(vMyPath, '\',-3``)`，结果返回 'Qlik'，因为它是从变量 vMyPath 右端开始的第三个子字符串。 |

## 示例：使用 SubField 的脚本和图表表达式

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

#### 示例 - 脚本和图表表达式

### 基本示例

| 示例 | 结果 |
| --- | --- |
| `SubField(S,   ';' ,2)` | 如果 S 为 'abc;cde;efg'，则返回 'cde'。 |
| `SubField(S,   ';' ,1)` | 如果 S 为空字符串，则返回一个空字符串。 |
| `SubField(S,   ';' ,1)` | 如果 S 为 ';'，则返回一个空字符串。 |
| 假设您有一个变量，其值为路径名 vMyPath，<br><br>`Set vMyPath=\Users\ext_jrb\Documents\Qlik\Sense\Apps;`。 | 在文本和图像图表中，可添加度量，诸如：<br>`SubField(vMyPath, '\',-3``)`，结果返回 'Qlik'，因为它是从变量 vMyPath 右端开始的第三个子字符串。 |

### 脚本示例 1

#### 加载脚本

在数据加载编辑器中加载以下脚本表达式和数据。

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

#### 创建可视化

在 Qlik Sense 工作表中创建以 Name、FirstName 和 SurName 为维度的表格可视化。

#### 结果

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

#### 解释

SubField() 函数的作用是将 field\_no 参数设置为 1，从而提取 Name 的第一个子字符串。由于 field\_no 的值为正值，因此从左到右的顺序用于提取子字符串。第二个函数调用通过将 field\_no 参数设置为 -1 来提取第二个子字符串，该字段按照从右到左的顺序提取子字符串。

### 脚本示例 2

#### 加载脚本

在数据加载编辑器中加载以下脚本表达式和数据。

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

#### 创建可视化

在 Qlik Sense 工作表中创建表格可视化，将 Instrument、Player 和 Project 作为维度。

#### 结果

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

#### 解释

此示例演示了如何使用 Subfield() 函数的多个实例，每个实例都不考虑 field\_no 参数，其中相同的 LOAD 语句会创建所有组合的 Cartesian 产品。DISTINCT 选项用于避免创建重复记录。