Однострочный в ECMA 6
const [list,chuckSize] = [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], 6]
new Array(Math.ceil(list.length / chuckSize)).fill().map(_ => list.splice(0,chuckSize))
Если я правильно выполнил вашу задачу, вам нужно время, когда произошло следующее событие, предполагая, что это время закрытой двери. В этом случае я настоятельно рекомендую вам избегать использования индекса. Вместо этого я предлагаю вам подумать, как применить процедуру выбора строк, чтобы получить то, что вам нужно для каждой строки.
Вот что я думаю должно сработать, если мое понимание вашей задачи было правильным:
let
Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
SplitDateTime = Table.SplitColumn(Table.TransformColumnTypes(Source, {{"Booking time", type text}}, "en-GB"), "Booking time", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Date", "Time"}),
FilteredDoorside = Table.SelectRows(SplitDateTime, each ([Doorside] <> "-")),
ChangedType = Table.Buffer(Table.TransformColumnTypes(FilteredDoorside,{{"Date", type date}, {"Time", type time}, {"User", type text}, {"Doorside", type text}})),
GetCloseTime = Table.AddColumn(ChangedType, "Duration", (row)=>List.Min(Table.SelectRows(ChangedType, each [Date]=row[Date] and [Time]>row[Time])[Time]) - row[Time]),
SetType = Table.TransformColumnTypes(GetCloseTime,{{"Duration", type duration}})
in
SetType
На шаге GetCloseTime
я добавляю столбец функции, который выбирает строки из таблицы self с той же датой. и позже во времени, а затем выбирает минимальное время. Это будет в следующий раз. Вы можете добавить дополнительные критерии, если вам нужно.
Другой способ - использовать List.Min
для создания отсортированной производной таблицы и взять ее 1-ую строку и значение в столбце Time: {0}[Time]
let
Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
SplitDateTime = Table.SplitColumn(Table.TransformColumnTypes(Source, {{"Booking time", type text}}, "en-GB"), "Booking time", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Date", "Time"}),
FilteredDoorside = Table.SelectRows(SplitDateTime, each ([Doorside] <> "-")),
ChangedType = Table.Buffer(Table.TransformColumnTypes(FilteredDoorside,{{"Date", type date}, {"Time", type time}, {"User", type text}, {"Doorside", type text}})),
GetCloseTime = Table.AddColumn(ChangedType, "Duration", (row)=>Table.FirstN(Table.Sort(Table.SelectRows(ChangedType, each [Date]=row[Date] and [Time]>row[Time]),{{"Time", Order.Ascending}}),1){0}[Time] - row[Time]),
SetType = Table.TransformColumnTypes(GetCloseTime,{{"Duration", type duration}})
in
SetType