软件
我正在使用Pentaho Data Integration 5.4
输入数据及说明
来自文件的输入数据(简化后,有更多列):
number name
1009 ProductA
2150 ProductB
3235 ProductC
ProductD
ProductE
1234 ProductF
7765 ProductG
4566 ProductH
ProductI
9907 ProductJ
问题是我有一个
Excel
文件格式xlsx
,其中的数据带有合并的单元格,对于id
的一个值,有1..n
个值行。将文件转换为
csv
后,尽管没有合并一列,但缺少下一行(第一行除外)的值(请参见示例id=3
,id=6
)。我正在使用步骤
sequence
生成一个Add sequence
,输入按最初存储在文件中的方式进行排序。实现目标的步骤
基本上我需要做的是:
查找第一个非空值,其
sequence_number
小于current_row.sequence_number
将字段
name
中的值连接到该匹配行继续扫描
sequence_number
高于上次扫描的下一行如前所述,在这种情况下可以有
1..n
个值行。预期产量
number name
1009 ProductA
2150 ProductB
3235 ProductC; ProductD; ProductE
1234 ProductF
7765 ProductG
4566 ProductH; ProductI
9907 ProductJ
我的方法
我相信我可以在循环中执行此操作,方法是使用
Analytic Query
并计算LAG(1)
然后将具有空值的一行的name
列连接起来,并从空行中丢弃其他列的值-然后执行此操作在一个循环中(假设最大次数为20次),但我确实认为这是个坏主意。可能有更好的方法来实现此结果,例如,使用
Java Script
步骤,从当前行开始向后扫描行(基于sequence
编号),但是我不知道这些功能(如果存在)。在没有空行的情况下,如何使用
Modified Java Script Value
步骤或任何其他有效方法在不使用循环的情况下实现文件的整个内容的实现? 最佳答案
为了解决这个问题,我将使用Modified Java Script Value
保存最后看到的产品并将其用于所有行,然后使用Group By
对列进行分组。
关于javascript - 从当前行向后查找第一个非空值扫描行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34860322/