Случай:
Корпорация TestCompany ежемесячно отправляет нам данные о расходах в виде CSV-файла. Данные представляют собой пару значений «дата-расход» для каждого serviceId
. Также возможно, что в месячном файле есть исправления для данных, присланных в предыдущие месяцы. Значение в более позднем файле является более достоверным. Мы должны разработать процесс приема с подробной моделью данных и диаграммой потока данных, чтобы узнать, как хранить дату и расходы для каждого serviceId
с учетом возможности отслеживания записей. Есть вероятность, что следующий файл может содержать обновления.
2) Вход: файл CSV со следующей структурой:
Sr No. Header
Column 1 serviceId
Column 2 month
Column 3 d1
Column 4 d2
Column 5 d3
Column 6 d4
Column 7 d5
Column 8 d6
Column 9 d7
Column 10 d8
Column 11 d9
Column 12 d10
Column 13 d11
Column 14 d12
Column 15 d13
Column 16 d14
Column 17 d15
Column 18 d16
Column 19 d17
Column 20 d18
Column 21 d19
Column 22 d20
Column 23 d21
Column 24 d22
Column 25 d23
Column 26 d24
Column 27 d25
Column 28 d26
Column 29 d27
Column 30 d28
Column 31 d29
Column 32 d30
Column 33 d31
Примечание:
- а. Дата, соответствующая первому ненулевому значению, должна рассматриваться как начальная дата.
- б. Дата, соответствующая последнему ненулевому значению, должна рассматриваться как дата закрытия.
- в. NULL в CSV между начальной и конечной датами должен рассматриваться как 0,00 только для целей расчета.
Пример ввода:
serviceId,month,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31 FEUSA0002V,200107,,,,,,,,,,,,,,,,,26.2866666667,,,,,,,25.5166666667,25.3333333333,25.7,25.8333333333,,,25.8333333333,26.1666666667
Столбец месяца представляет месяц, например, 201707 представляет 2017-07. Значение каждого дня представлено номером столбца (d1 из 201707 — 01.07.2017, d2 из 201707 — 02.07.2017 и т. д.).
4) Постановка задачи:
а. Для каждого serviceId найдите даты, для которых отсутствуют данные о значении, и подготовьте список дат, разделенных символом «|», чтобы мы могли вернуться к выборке данных из TestCompany Corporation.
б. Сохраните преобразованные данные, как указано в 5.b. Итого – это сумма всех доступных значений.
5) Желаемый выходной CSV:
a.
serviceId,missing_dates FEUSA0002V, 2001-07-18|2001-07-19|2001-07-20|2001-07-21|2001-07-22|2001-07-23
b.
serviceId,StartDate,EndDate,Total FEUSA0002V, 2017-07-01,2017-10-31,369.1458
Образец INPUT FEED (несколько строк с одинаковым идентификатором службы)
ServiceId,month,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31
F0CAN062AH,201706,,31.55,,,31.48,31.39,31.42,31.42,31.46,,,31.29,,31.12,31.13,,,,31.33,,31.31,,31.6,,,31.65,31.46,31.64,31.34,,
F0CAN062AH,201707,,,,31.31,,,,,,31.09,,,31.43,,,,31.23,,,31.39,,,,,31.29,31.1,31.0,30.88,,,30.87
FEUSA04ABQ,200304,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,26.98,
F0CAN05N3F,201612,,,,,,,,,,,,,,,,,,,,24.78,24.77,24.8,24.82,,,,,,,,
F0CAN05N3F,201701,,,24.75,,24.96,24.93,,,,24.9,24.96,,24.91,,,24.94,,,24.93,25.12,,,25.0,25.1,,,,,,,25.23
F0CAN05N3F,201702,25.29,25.22,25.27,,,25.29,25.35,,,25.8,,,25.87,,26.02,,,,,,,26.3,,25.93,,,25.77,,,,