Страницы: 1
RSS
PQ: объединить интервалы дат
 
Добрый день!

Есть таблица данных следующего вида: Событие | Дата начала | Дата окончания.  У каждого события может быть несколько интервалов дат.
Если интервал дат одного события начинается на следующий день после окончания предыдущего интервала дат этого же события , как объединить (сгруппировать) эти интервалы в одну строку (дата начала - самая ранняя дата в последовательности, дата окончания - самая поздняя дата)? При этом строки, содержащие одиночные интервалы должны сохраниться.

Добавлю: количество строк по каждому событию может увеличиться до конца года.
Изменено: N P - 25.05.2022 22:36:22
 
N P,
Код
let
  data = Excel.CurrentWorkbook(){[ Name = "Данные" ]}[Content],
  typed = Table.TransformColumnTypes ( data, { { "Дата начала", type date }, { "Дата окончания", type date } } ),
  group = Table.Group (
    typed,
    { "Событие" },
    {
      {
        "tbl",
        ( t ) =>
          [
            sort = Table.Sort ( t, { { "Дата начала", Order.Ascending } } ),
            recs = List.Buffer ( Table.ToRecords ( sort ) ),
            generate = List.Generate (
              () => [ i = 0, k = 1, result = Record.AddField ( recs{i}, "group", k ) ],
              each [i] < List.Count ( recs ),
              each [
                i      = [i] + 1,
                k      = if recs{i}[Дата начала] = Date.AddDays ( recs{i - 1}[Дата окончания], 1 ) then [k] else [k] + 1,
                result = Record.AddField ( recs{i}, "group", k )
              ],
              each [result]
            ),
            toTable = Table.FromRecords ( generate ),
            group = Table.Group (
              toTable,
              { "Событие", "group" },
              { { "Дата начала", each List.Min ( [Дата начала] ), type date }, { "Дата окончания", each List.Max ( [Дата окончания] ), type date } }
            ),
            result = Table.RemoveColumns ( group, { "group" } )
          ][result],
        type table
      }
    }
  ),
  combine = Table.Combine ( group[tbl] )
in
  combine
 
surkenny, оочень помогли! Спасибо! буду разбираться
Страницы: 1
Наверх