1

软件

我正在使用 Pentaho 数据集成 5.4

输入数据和解释

从文件输入数据(简化,有更多列):

number       name
1009       ProductA
2150       ProductB
3235       ProductC
           ProductD
           ProductE
1234       ProductF
7765       ProductG
4566       ProductH
           ProductI
9907       ProductJ

问题是我有一个Excel文件格式xlsx,其中包含合并单元格的数据,并且对于一个值,id1..n几行值。

将该文件转换csv为下一行(除了第一行)的值后,尽管有一列未合并(参见示例id=3id=6),但仍丢失。

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

4

2 回答 2

1

为了解决这个问题,我会使用Modified Java Script Value保存最后看到的产品并将其用于所有行,然后用于Group By对列进行分组。

转型

Javascript

逐步分组

输出

于 2016-01-18T19:21:43.853 回答
1

介绍

Excel 文件中合并的相邻单元格如下图所示。

包含合并单元格的 Excel 文件

当作为纯文本文件打开时,它实际上会为每一行创建间隙(来自合并单元格的数据丢失),但首先包含合并单元格。

number  name
1000/P  um6p1
        um1p2
        um1p3
1500    um2p1
9823    um3p1
83424   um4p1
        um4p2
        um4p3
        um4p4
21390   um5p1

虽然@bolav回答解决了这个问题,但在Kettle.


方法

  • Microsoft Excel Input步骤中,转到选项卡并将重复Fields选项标记为Y,用于将值存储在合并单元格中的列
  • Sort rows数字列上使用,因为Group by步骤需要对输入进行排序
  • Group by在字段编号和聚合名称上,Concatenate strings separated by作为类型和;作为值

来自Pentaho 用户指南

重复 如果设置为 Y,如果下一行中的字段为空,将重复此值。

转型

逐步分组

执行结果

于 2016-01-31T11:35:51.213 回答