# SubField - 脚本和图表函数

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

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

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

语法：

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

返回数据类型： 字符串

参数：

SubField 参数

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

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

示例和结果：

示例 1-3

| 示例 | 结果 |
| --- | --- |
| ` SubField('abc;cde;efg', ';', 2)  ` | 返回 'cde' |
| ` SubField('', ';', 1)  ` | 返回 NULL |
| ` SubField(';', ';', 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;`

示例 4

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

假设您有一个保存路径名 vMyPath 的变量，

`Set vMyPath=\Users\ext_jrb\Documents\Qlik\Sense\Apps;`.

在文本和图像图表中，您可以添加度量，例如：  
`SubField(vMyPath, '\',-3``)`，这将生成“Qlik”，因为它是变量 vMyPath 从右起的第三个字符串。

该示例显示多个行如何通过 Subfield() 的单个实例创建。

将示例脚本添加到文档并运行。然后，至少要将结果列中列出的字段添加到文档中的表格才能查看结果。

`LOAD DISTINCT` `Player,` `SubField(Project,',') as Project;` ` ` `Load * inline [` `Player|Project` `Neil|Music,OST` `Jo|Music` `Mike|Music,OST,Video` `] (delimiter is '|');`

示例 5

| Player | Project |
| --- | --- |
| Neil | Music |
| Neil | OST |
| Jo | Music |
| Mike | Music |
| Mike | OST |
| Mike | Video |

此示例演示如何在同一 LOAD 语句中使用 Subfield() 函数的多个实例（每个实例都省略了 field\_no 参数）创建所有组合的笛卡尔积。DISTINCT 选项用于避免创建重复记录。

将示例脚本添加到文档并运行。然后，至少要将结果列中列出的字段添加到文档中的表格才能查看结果。

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

示例 6

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