从多行生成 1 行 Talend

Generate 1 row from multiple rows Talend

我在论坛上找到了我需要的逆逻辑,所以我不得不问:)

我有这样的字段

|sector|EmployeeNr|Name|Reason|startTime|EndTime|

有了这样的样本数据

|Marketing|1|Holydays|Henri|2019-10-03T07:00:00.000Z|2019-10-03T15:00:00.000Z|
|Marketing|1|Holydays|Henri|2019-10-04T07:00:00.000Z|2019-10-04T15:00:00.000Z|
|Marketing|1|Holydays|Henri|2019-10-05T07:00:00.000Z|2019-10-05T15:00:00.000Z|
|Marketing|1|Holydays|Henri|2019-10-06T07:00:00.000Z|2019-10-06T15:00:00.000Z|
|Marketing|1|sickness|Henri|2019-10-08T07:00:00.000Z|2019-10-08T15:00:00.000Z|
|Marketing|1|sickness|Henri|2019-10-09T07:00:00.000Z|2019-10-09T15:00:00.000Z|

|IT-Depart|2|Holydays|Paule|2019-11-08T07:00:00.000Z|2019-11-08T15:00:00.000Z|
|IT-Depart|2|Holydays|Paule|2019-11-09T07:00:00.000Z|2019-11-09T15:00:00.000Z|
|IT-Depart|2|Holydays|Paule|2019-11-10T07:00:00.000Z|2019-11-10T15:00:00.000Z|

|Marketing|1|Holydays|Henri|2019-10-17T07:00:00.000Z|2019-10-17T15:00:00.000Z|
|Marketing|1|Holydays|Henri|2019-10-18T07:00:00.000Z|2019-10-18T15:00:00.000Z|

我想要一个结果,因为同样的原因连续几天缺席的单行

像这样

|sector|EmployeeNr|Name|Reason|startTime|EndTime|

|Marketing|1|Holydays|Henri|2019-10-03T07:00:00.000Z|2019-10-06T15:00:00.000Z|

|Marketing|1|sickness|Henri|2019-10-08T07:00:00.000Z|2019-10-09T15:00:00.000Z|

|IT-Depart|2|Holydays|Paule|2019-11-08T07:00:00.000Z|2019-11-10T15:00:00.000Z|

|Marketing|1|Holydays|Henri|2019-10-17T07:00:00.000Z|2019-10-18T15:00:00.000Z|

我认为这应该类似于日期、原因和 EmployeeNr 的聚合,但真的不知道如何处理。

有什么帮助吗?

您必须使用 tAggregateRow 组件并使用以下条件,

min(startTime)
max(EndTime)
group by sector,EmployeeNr,Name,Reason

下面是截图,

鉴于顺序很重要,您应该查看 tAggregateSortedRow 组件:您必须先对键上的数据进行排序(扇区、#、原因、开始日期,然后使用该组件,您必须对键(扇区、#、原因、名称)进行分组并放置您的操作(最小/最大日期):当您的数据根据​​您的输入进行排序时,每次在键上检测到更改时,操作最小并且 max 将被执行。

伙计们,我通过创建一个名为 Sequence 的新列找到了解决方案,并在满足此条件时为该列赋予相同的值(天数是连续的,并且与同一名员工相关,并且出于相同的原因) 。我用 Numeric.sequence 函数和 if (condition)

在 tjavarow 中编写了代码

例如

 |sector|EmployeeNr|Name|Reason|startTime|EndTime|Sequence
|Marketing|1|Holydays|Henri|2019-10-03T07:00:00.000Z|2019-10-03T15:00:00.000Z|1
|Marketing|1|Holydays|Henri|2019-10-04T07:00:00.000Z|2019-10-04T15:00:00.000Z|1
|Marketing|1|Holydays|Henri|2019-10-05T07:00:00.000Z|2019-10-05T15:00:00.000Z|1
|Marketing|1|Holydays|Henri|2019-10-06T07:00:00.000Z|2019-10-06T15:00:00.000Z|1
|Marketing|1|sickness|Henri|2019-10-08T07:00:00.000Z|2019-10-08T15:00:00.000Z|2
|Marketing|1|sickness|Henri|2019-10-09T07:00:00.000Z|2019-10-09T15:00:00.000Z|2

|IT-Depart|2|Holydays|Paule|2019-11-08T07:00:00.000Z|2019-11-08T15:00:00.000Z|3
|IT-Depart|2|Holydays|Paule|2019-11-09T07:00:00.000Z|2019-11-09T15:00:00.000Z|3
|IT-Depart|2|Holydays|Paule|2019-11-10T07:00:00.000Z|2019-11-10T15:00:00.000Z|3

|Marketing|1|Holydays|Henri|2019-10-17T07:00:00.000Z|2019-10-17T15:00:00.000Z|4
|Marketing|1|Holydays|Henri|2019-10-18T07:00:00.000Z|2019-10-18T15:00:00.000Z|4

最后,按照 Jim Macaulay

的建议使用 tAggregateRow

分钟(开始时间)

最大(结束时间)

按员工编号、姓名、原因、顺序分组。

这很有效!

感谢大家的帮助。