【发布时间】:2016-01-18 17:10:29
【问题描述】:
软件
我正在使用 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)。
我正在使用步骤Add sequence 生成一个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 步骤或任何其他有效方法来实现此目的,而不使用循环文件的整个内容直到没有空行?
【问题讨论】:
标签: javascript excel etl kettle pentaho-spoon