Ложка чайника Пентахо - Как создать список из 31 столбца данных плавающего типа, чтобы проверить, что это NULL / NOT NULL - PullRequest
0 голосов
/ 08 июня 2018

Дело:

TestCompany Corporation ежемесячно отправляет нам данные о расходах в виде файла 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

Примечание:

  • a.Дата, соответствующая первому ненулевому значению, должна рассматриваться как начальная дата.
  • б.Дата, соответствующая последнему ненулевому значению, должна рассматриваться как дата закрытия.
  • с.Значение 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 - 2017-07-01, d2 из 201707 - 2017-07-02 и т. Д.).

4) Постановка задачи:

  • a.Для каждого идентификатора службы найдите даты, для которых отсутствуют данные о значении, и подготовьте '|'отдельный список дат, чтобы мы могли вернуться к получению данных из TestCompany Corporation.

  • b.Сохраните преобразованные данные, как указано в 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,,,,

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Для вопроса b.

enter image description here

Сделайте точно так же, за исключением последнего шага Group by ServiceId, где

  • StartDate - это first-non null value даты
  • EndDate - последнее ненулевое значение` даты
  • Total - сумма значений.

Не то, чтобы в этом случае Filter ненулевые значения были необязательными.

0 голосов
/ 11 июня 2018

Для вопроса а:

enter image description here

  1. Один из способов сделать это - normalize файл CSV, так чторезультирующий поток состоит из 4 столбцов: ServiceId, месяц, день и значение.Параметры, показанные на рисунке ниже, были бы довольно неприятными для записи, если бы вам не помогла кнопка "Get fields.

  2. Затем вам нужно вычислить дату из месяца иПоле d #. Я сделал бы это в шаге Javascript, который позволяет в то же время поставить дату в формате ISO. Javascript это

    var date = new Date (month.substr (0,4), month.substr (5,2) -1, substr (день, 1));

  3. Затем filter ServiceId и Dates с ненулевым значением.

  4. Если вам нужна отсортированная дата: Sort их по ServiceId, дата

  5. Group поток по ServiceId и Concatenate strings separated by "|", с subject = дата и name результат" пропущенные даты ".

enter image description here

...