SubField - 脚本和图表函数
SubField() 用于从父字符串字段提取子字符串组成部分,其中原始记录字段由两个或更多用分隔符分隔的部分构成。
Subfield() 函数可用于(例如)从由全名、路径名的组成部分构成的记录的列表中提取名字和姓氏,或用于从逗号分隔的表格中提取数据。
如果在忽略可选 field_no 参数的 LOAD 语句中使用 Subfield() 函数,则会为每个子字符串生成一个完整记录。如果使用 Subfield() 加载多个字段,则会创建所有组合的 Cartesian 产品。
语法:
SubField(text,
delimiter[, field_no ])
返回数据类型: 字符串
参数
text
|
原始字符串。可以是硬编码文本、变量、货币符号扩展或其他表达式。 |
delimiter
|
输入 text 中将字符串分成各组成部分的字符。 |
field_no
|
可选的第三个参数是整数,用于指定返回父字符串 text 的哪些子字符串。使用值 1 可以返回第一个子字符串,使用值 2 可以返回第二个字符串,以此类推。
- 如果 field_no 为正值,子字符串是自左至右提取的。
- 如果 field_no 为负值,子字符串是自右至左提取的。
|
提示注释 可以使用 SubField() 代替复杂的函数组合(例如 Len()、Right()、Left()、Mid())和其他字符串函数。
示例:图表表达式
SubField( 'abc;cde;efg', ';' ,2 )
|
返回 cde |
SubField( Null, ';' ,1 )
|
返回一个空字符串 |
SubField( ';', ';' ,1 )
|
返回一个空字符串 |
SubField( '\Users\ext_jrb\Documents\Qlik\Sense\Apps;','\',-3 )
|
返回 Qlik |
示例 - SubField 基本原理
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
加载到名为 Example 的数据表中的数据集。
-
数据表中有一个名为 Name 的字段。
加载脚本
Example:
Load * inline [
Name
Dave Owen
Joe Tem
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度:
创建以下计算维度:
-
=SubField(Name, ' ',1),用于提取出现在空格 ' ' 分隔符之前的第一个子字符串。
-
=SubField(Name, ' ',-1),用于提取出现在空格 ' ' 分隔符之前的第一个子字符串,从字符串右侧开始。
Results table
Name |
SubField(Name, ' ',1) |
SubField(Name, ' ',-1) |
Dave Owen |
Dave |
Owen |
Joe Tem |
Joe |
Tem |
SubField() 函数的作用是将 field_no 参数设置为 1,从而提取 Name 的第一个子字符串。由于 field_no 的值为正值,因此以从左到右的顺序提取子字符串。第二个函数调用通过将 field_no 参数设置为 -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;
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
Results table
Name |
FirstName |
SurName |
Dave Owen |
Dave |
Owen |
Joe Tem |
Joe |
Tem |
解释
SubField 函数的作用是将 field_no 参数设置为 1,从而提取第一个子字符串 Name。由于 field_no 的值为正值,因此以从左到右的顺序提取子字符串。第二个函数调用通过将 field_no 参数设置为 -1 来提取第二个子字符串,该字段按照从右到左的顺序提取子字符串。
示例 – SubField 场景
概述
产品数据集包含产品表。表中的每个产品都有一个标记字段,用于标识产品区域。产品的标记字段可以有多个值。例如,小组件 A 有以下标记:电子产品、小工具、家用。标记值用管道字符 (|) 分隔。本例向您展示如何使用 SubField 函数提取特定的标记值。
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
加载到名为 Example 的数据表中的数据集。
-
数据表中有以下字段:
-
ProductID
-
ProductName
-
Tags
-
Sales
加载脚本
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
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
ProductID
-
ProductName
-
Tags
创建以下计算维度:
-
=SubField(Tags, '|',1),用于提取 Tags 字段中的第一个项目。
-
=SubField(Tags, '|',2),用于提取 Tags 字段中的第二个项目。
-
=SubField(Tags, '|',3),用于提取 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 |
- |
SubField 函数的输出已成功从原始 Tags 字符串中的相关位置返回标记。
加载脚本
打开 数据加载编辑器,并将以下加载脚本添加到新选项卡。
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 '|');
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
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 |
解释
此示例演示了如何使用 Subfield() 函数的多个实例,每个实例都不考虑 field_no 参数,其中相同的 LOAD 语句会创建所有组合的 Cartesian 产品。DISTINCT 选项用于避免创建重复记录。