QlikView/QlikSense:转换包含大量字符串的列

问题描述 投票:0回答:1

我在 Qlik 中输入以下结构,包括两列。第一列(索引)包含顺序递增的数字,而需要转换的第二列由一系列由字符(在我的例子中为空格)分隔的字符串组成。

我的目标是实现一个转换,其中对于每个索引,第二列中的每个字符串都会重复。

为了说明这一点,请考虑以下使用书籍章节和单词的示例。第二列包含一本书的所有单词:

输入:

输出:

我想强调的是,挑战在于在此转换过程中处理第二列中的多个字符串。创建一个包含与各个字符串对应的列的中间表是不可行的,因为可能有数百个字符串。

qlikview qliksense
1个回答
0
投票

您可以通过使用

SubField()
函数 来实现此目的,该函数可以让您通过分隔符分割字符串。通常,您还可以指定要返回哪个nth子字符串,但在数据加载编辑器中,您实际上可以忽略该参数,这将返回新记录中的每个子字符串。

这是您可以使用的脚本:

[data]:
Load
    [Index]
  , SubField([Col], ' ') as NewCol
Resident [data load];

按您需要的方式返回数据:

实现此目的的类似方法是使用 SubStringCount()

 子句添加 
IterNo() 函数
while
 函数
。组合使用这些元素允许您迭代给定行,为每次迭代创建一个新行。

给出这个例子:

[data]:
Load
    [Index]
  , SubField([Col], ' ', IterNo()) as NewCol
Resident [data load]
  While IterNo() <= SubStringCount([Col], ' ') + 1
;

...我们是说,我们想要迭代给定行的次数与该行的

' '
字段中出现的空格字符
[Col]
一样多。我们将
1
添加到该表达式中,因为我们假设总是比空格多一个子字符串。
IterNo()
函数返回当前迭代次数,因此我们将其用作 field_no 参数的参数。

因此,由于

We went tiptoeing
中有两个空格,我们对该行循环 2+1 次,每次迭代如下所示:

SubField( 'We went tiptoeing' , ' ', 1)
=
We

SubField( 'We went tiptoeing' , ' ', 2)
=
went

SubField( 'We went tiptoeing' , ' ', 3)
=
tiptoeing

© www.soinside.com 2019 - 2024. All rights reserved.