Чайник: как получить максимальную дату для каждой группы строк

Я читаю лист Excel с помощью Kettle, и этот лист имеет три поля: код, описание и дату.

Пример:

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 января 2013 г. (из-за строки 2). Группа строк с описанием B имеет самую позднюю дату 16 января 2013 г. (из-за строки 5).


person rafaelim    schedule 20.05.2013    source источник


Ответы (3)


Это идеальная работа для шага денормализатора строк:

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

person jacktrade    schedule 20.05.2013
comment
Согласен - этот шаг сбивает с толку, поэтому проверьте образцы, и все станет ясно! - person Codek; 21.05.2013
comment
Я попробую денормализатор строк! - person rafaelim; 22.05.2013
comment
Разве денормализатор не приведет к созданию только 1 записи для всех записей с одним и тем же ключом (поэтому в примере результатом будет только 2 записи вместо 6)? Должен ли денормализатор строк использоваться для получения максимального значения, а затем какое-то слияние, чтобы привязать это значение к каждой записи с одним и тем же ключом? - person Dolfa; 29.05.2013
comment
получение столбца описания в качестве ключа вернет объединенные значения, см. пример ссылки на документ - person jacktrade; 30.05.2013

На самом деле проще просто разделить ваши данные на два потока (скопировать в последовательные шаги), использовать поток 1 с помощью группового шага и создать группу на основе описания и установить как совокупное максимальное значение, чтобы найти максимальную дату для каждой группы (должно получиться два выходные строки на основе вашего примера).

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

Затем вы используете для потока 2 шаг поиска потока, чтобы найти агрегат max_date из шага группы — поток 1, поскольку поля описания используются в качестве ключевых полей, а агрегат max_date используется в качестве значения для извлечения.

Помните, что при использовании группового шага необходимо соответствующим образом сортировать данные.

person bsecker    schedule 16.07.2013

Вы можете сделать это, используя Max в качестве формулы массива.

Итак, предположим, что у вас есть исходные данные в столбцах от A до C на вашем листе, в ячейке D1 вы должны ввести:

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

А затем, чтобы сделать это формулой массива, вы нажимаете CTRL + SHIFT + ENTER.

Конечно, измените диапазон для столбцов B и C, чтобы они соответствовали вашему набору данных.

Надеюсь, это поможет и имеет смысл.

person John Bustos    schedule 20.05.2013
comment
Извините, если я не понял, но мне нужно решение с использованием Kettle, инструмента ETL. - person rafaelim; 22.05.2013
comment
Извините, я пропустил это. Удачи!! - person John Bustos; 22.05.2013