全部展开/折叠
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 选项用于避免创建重复记录。