我正在使用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
)。 / p>
我正在使用步骤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
,然后将列Java Script
连接为具有空值的一行并丢弃其他列来自null行的值 - 然后在循环中执行此操作(假设这是最大值的20次),但我确实认为这是一个坏主意。
使用例如sequence
步骤从当前向后扫描行(基于Modified Java Script Value
数字)可能有更好的方法来实现此结果,但我不知道这些函数,如果它们确实存在。
如何在没有空行的情况下使用string input = "my,string,separated,by,commas";
string[] groups = input.Split(',');
string[] output = groups
.Select((x, idx) => x + (idx < groups.Length - 1 ? "," : string.Empty))
.Where(x => x != "")
.ToArray();
步骤或任何其他有效方式实现此目的,而不使用循环来处理整个文件内容?
答案 0 :(得分:1)
答案 1 :(得分:1)
Excel文件中合并的相邻单元格如下图所示。
当作为纯文本文件打开时,它实际上为每一行创建了间隙(来自合并单元格的数据),但首先包含合并的单元格。
delegate = MapController()
虽然 @bolav 答案解决了这个问题,但在number name
1000/P um6p1
um1p2
um1p3
1500 um2p1
9823 um3p1
83424 um4p1
um4p2
um4p3
um4p4
21390 um5p1
中解决此问题的方法更为简单且可能更有效。
Kettle
步骤中,转到Microsoft Excel Input
标签,并将重复选项标记为 Y ,用于存储合并单元格中的值的列Fields
,因为Sort rows
步骤需要对输入进行排序Group by
字段号并汇总名称,其中Group by
为类型,Concatenate strings separated by
为值重复如果设置为Y,如果下一行中的字段为空,则会重复此值。