0

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

我有这样的字段

|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|

我认为这应该类似于 Date、Reason 和 EmployeeNr 的聚合,但不知道如何处理这个问题。

请问有什么帮助吗?

4

3 回答 3

0

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

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

下面是截图,

在此处输入图像描述

于 2020-06-29T18:04:17.340 回答
0

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

分钟(开始时间)

最大值(结束时间)

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

那行得通!

感谢你的帮助。

于 2020-07-02T08:41:32.867 回答
0

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

于 2020-07-01T12:14:56.193 回答