软件
我正在使用 Pentaho 数据集成 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
using step 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
在没有空行之前,如何在不使用循环文件的整个内容的情况下使用步骤或任何其他有效方式来实现此目的?