Программное обеспечение
Я использую Pentaho Data Integration 5.4.
Входные данные и объяснение
Входные данные из файла (упрощенно, столбцов больше):
number name
1009 ProductA
2150 ProductB
3235 ProductC
ProductD
ProductE
1234 ProductF
7765 ProductG
4566 ProductH
ProductI
9907 ProductJ
Проблема в том, что у меня был формат файла Excel
xlsx
, в котором есть данные с объединенными ячейками, а для одного значения id
есть 1..n
строк значений.
После преобразования этого файла в csv
значения для следующих строк (кроме первой) отсутствуют, несмотря на то, что один столбец не был объединен (см. пример id=3
, id=6
).
Я создаю sequence
, используя шаг Add sequence
, ввод сортируется так, как он был первоначально сохранен в файле.
Шаги к достижению цели
В основном, что мне нужно сделать, это:
- Найдите первое ненулевое значение, у которого
sequence_number
меньшеcurrent_row.sequence_number
- Объединить значение из поля
name
с соответствующей строкой - Продолжайте сканировать следующие строки с
sequence_number
выше, чем в последний раз.
Как указывалось ранее, для такого случая может быть 1..n
рядов значений.
Ожидаемый результат
number name
1009 ProductA
2150 ProductB
3235 ProductC; ProductD; ProductE
1234 ProductF
7765 ProductG
4566 ProductH; ProductI
9907 ProductJ
Мой подход
Я считаю, что могу сделать это в цикле, используя Analytic Query
и вычисляя LAG(1)
, а затем объединяя столбец name
для одной строки с нулевыми значениями и отбрасывая другие значения столбца из нулевой строки, а затем делая это в цикле (например, 20 раз, если это максимум), но я считаю это плохой идеей.
Вероятно, есть лучшие способы добиться этого результата, используя, например, шаг Java Script
со сканированием строк в обратном направлении от текущего (на основе числа sequence
), но я не знаю об этих функциях, если они существуют.
Как я могу добиться этого, используя шаг Modified Java Script Value
или любой другой эффективный способ, не используя цикл для всего содержимого файла, пока не останется пустых строк?