从多行生成 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
分钟(开始时间)
最大(结束时间)
按员工编号、姓名、原因、顺序分组。
这很有效!
感谢大家的帮助。
我在论坛上找到了我需要的逆逻辑,所以我不得不问:)
我有这样的字段
|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分钟(开始时间)
最大(结束时间)
按员工编号、姓名、原因、顺序分组。
这很有效!
感谢大家的帮助。