Я выполняю сопоставление в Informatica IICS и пытаюсь заполнить пропущенные строки в моем наборе данных на основе нескольких полей.
Ниже приведен пример таблицы данных. Существует поле ID
, поле Week_Start
, являющееся начальной датой недели, за которую сообщаются данные, соответствующее поле Week_Number
и Year
, которое либо определяет данные как принадлежащие предыдущему году, либо текущий год Sales
- это количество продаж, сделанных по этому конкретному идентификатору, а Sales_Type
- это категория продаж.
Существуют даты, когда конкретный человек не совершал продажу, поэтому строка, соответствующая этим данным, отсутствует. Я хотел бы заполнить эти строки всей связанной информацией, а для поля Sales
установить значение 0.
Мои фактические данные имеют 6-недельное окно информации за предыдущий и текущий год для 7 различных типов продаж. Таким образом, я ожидаю, что 6x2x7 = 84 строки на ID. т.е. если у меня есть 100 уникальных идентификаторов, моя итоговая таблица должна содержать 8400 строк.
Таблица с пропущенными строками:
+----+------------+-------------+---------+-------+------------+
| ID | Week_Start | Week_Number | Year | Sales | Sales_Type |
+----+------------+-------------+---------+-------+------------+
| 1 | 01/01/2018 | 1 | Prior | 1 | A |
| 1 | 01/08/2018 | 2 | Prior | 3 | A |
| 1 | 01/15/2018 | 3 | Prior | 3 | A |
| 1 | 01/29/2018 | 5 | Prior | 4 | A |
| 1 | 01/01/2019 | 1 | Current | 2 | A |
| 1 | 01/08/2019 | 2 | Current | 4 | A |
| 1 | 01/15/2019 | 3 | Current | 1 | A |
| 1 | 01/22/2019 | 4 | Current | 1 | A |
| 1 | 01/01/2018 | 1 | Prior | 1 | B |
| 1 | 01/08/2018 | 2 | Prior | 3 | B |
| 1 | 01/15/2018 | 3 | Prior | 3 | B |
| 1 | 01/29/2018 | 5 | Prior | 4 | B |
| 1 | 01/01/2019 | 1 | Current | 2 | B |
| 1 | 01/08/2019 | 2 | Current | 4 | B |
| 1 | 01/15/2019 | 3 | Current | 1 | B |
| 1 | 01/22/2019 | 4 | Current | 1 | B |
+----+------------+-------------+---------+-------+------------+
Ожидаемый результат с заполнением пропущенных строк:
+----+------------+-------------+---------+-------+------------+
| ID | Week_Start | Week_Number | Year | Sales | Sales_Type |
+----+------------+-------------+---------+-------+------------+
| 1 | 01/01/2018 | 1 | Prior | 1 | A |
| 1 | 01/08/2018 | 2 | Prior | 3 | A |
| 1 | 01/15/2018 | 3 | Prior | 3 | A |
| 1 | 01/22/2018 | 4 | Prior | 0 | A |
| 1 | 01/29/2018 | 5 | Prior | 4 | A |
| 1 | 01/01/2019 | 1 | Current | 2 | A |
| 1 | 01/08/2019 | 2 | Current | 4 | A |
| 1 | 01/15/2019 | 3 | Current | 1 | A |
| 1 | 01/22/2019 | 4 | Current | 1 | A |
| 1 | 01/29/2019 | 5 | Current | 0 | A |
| 1 | 01/01/2018 | 1 | Prior | 1 | B |
| 1 | 01/08/2018 | 2 | Prior | 3 | B |
| 1 | 01/15/2018 | 3 | Prior | 3 | B |
| 1 | 01/22/2018 | 4 | Prior | 0 | B |
| 1 | 01/29/2018 | 5 | Prior | 4 | B |
| 1 | 01/01/2019 | 1 | Current | 2 | B |
| 1 | 01/08/2019 | 2 | Current | 4 | B |
| 1 | 01/15/2019 | 3 | Current | 1 | B |
| 1 | 01/22/2019 | 4 | Current | 1 | B |
| 1 | 01/29/2019 | 5 | Current | 0 | B |
+----+------------+-------------+---------+-------+------------+
Я пытался использовать преобразования в ICS, но ни один из них не достиг того, что я пытаюсь сделать. Мое лучшее предположение о том, как это сделать, заключается в использовании рекурсивного CTE в SQL и использовании сценария SQL для генерации этих пропущенных строк.
Мой вопрос: как мне сделать это на нескольких разделах? Меня интересуют не просто пропущенные даты, это пропущенные даты на два года и несколько разных видов продаж. Это усложняется еще и тем, что столбец Week_Start
содержит смешанные данные. Мои первые попытки сделать это закончились генерацией всех строк между датой в 2018 году и данными в 2019 году.