水壶:如何获得每组行的最大日期

时间:2013-05-20 19:14:16

标签: etl kettle pentaho-data-integration

我正在使用Kettle阅读excel表,这张表有三个字段:代码,描述和日期。

示例

1 - description A - 01/JAN/2013
2 - description A - 15/JAN/2013
3 - description A - 04/JAN/2013
4 - description B - 02/JAN/2013
5 - description B - 16/JAN/2013
6 - description B - 11/JAN/2013

我想要的是为每一行添加一个额外的字段最大日期,其中最大日期是基于描述的组的最新日期,如下所示:

示例2

1 - description A - 01/JAN/2013 - 15/JAN/2013
2 - description A - 15/JAN/2013 - 15/JAN/2013
3 - description A - 04/JAN/2013 - 15/JAN/2013
4 - description B - 02/JAN/2013 - 16/JAN/2013
5 - description B - 16/JAN/2013 - 16/JAN/2013
6 - description B - 11/JAN/2013 - 16/JAN/2013

描述A 的行组最新日期为15 / JAN / 2013(因为第2行)。 描述B 的行组最新日期为16 / JAN / 2013(因为第5行)。

3 个答案:

答案 0 :(得分:1)

这是行反规范化步骤的完美工作:

http://wiki.pentaho.com/display/EAI/Row+denormaliser

答案 1 :(得分:1)

将数据拆分为两个流(复制到连续步骤)实际上更容易使用Group Step使用流1并将该组基于描述并设置为聚合最大值以查找每个组的最大日期(应该根据您的示例生成两个输出行。

description A - 15/JAN/2013
description B - 16/JAN/2013

接下来,您将使用流2查找流查找步骤以从组步骤 - 流1中查找max_date聚合,将描述字段用作关键字段,并使用max_date聚合作为要检索的值。

请记住,当您使用组步骤时,必须相应地对数据进行排序。

答案 2 :(得分:0)

您可以使用Max作为数组公式来完成此操作。

因此,假设您的工作表中的原始数据位于工作表中的A列到C中,请在单元格D1中输入:

=MAX(--($B$1:$B$4=B1)*($C$1:$C$4))

然后,为了使它成为一个数组公式,你点击 CTRL + SHIFT + ENTER

当然,改变B列和B列的范围。 C以匹配您的数据集。

希望这有帮助并且有意义。