Вот другой подход.Он основан на работе во вложенных таблицах.
Я начал с ваших данных из вашей электронной таблицы, в таблице с именем Table1:
В Power Query, используя Table1в качестве источника я разделил столбец «Время бронирования», переименовал результирующие столбцы даты и времени, отфильтровал, - записи «Двери» и отсортировал по вашим указаниям:
Затем ясгруппированы по дате бронирования и пользователю:
Затем я добавил столбец индекса в каждой из вложенных таблиц в новый пользовательский столбец:
Затем я добавил новый столбец с предыдущим временем в каждой из вложенных таблиц в новый пользовательский столбец: (ошибка, которую вы видите здесь, из-за отсутствия предыдущего времени.)
Затем я добавил новый столбец сисправления ошибок, возникших после добавления предыдущей даты в каждой из вложенных таблиц в новый настраиваемый столбец. Я подумал, что "исправлю" вызванное отсутствие предыдущих времен, заменив ошибку "текущим" временем бронирования, что приведет к продолжительности нуля :
Затем я добавил новый столбец с продолжительностью, рассчитанной в каждой из вложенных таблиц, в новый пользовательский столбец:
Затем я удалил все столбцы, кроме последнего, который я добавил, который я назвал AddDuration:
Затем я расширил AddDurationстолбец:
Вот мой код М:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Split Column by Delimiter" = Table.SplitColumn(Table.TransformColumnTypes(Source, {{"Booking time", type text}}, "en-US"), "Booking time", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Booking time.1", "Booking time.2"}),
#"Renamed Columns" = Table.RenameColumns(#"Split Column by Delimiter",{{"Booking time.1", "Booking Date"}, {"Booking time.2", "Booking Time"}}),
#"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Booking Date", type date}, {"Booking Time", type time}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Doorside] <> "-")),
#"Sorted Rows" = Table.Sort(#"Filtered Rows",{{"Booking Date", Order.Ascending}, {"User", Order.Ascending}, {"Booking Time", Order.Ascending}}),
#"Grouped Rows" = Table.Group(#"Sorted Rows", {"Booking Date", "User"}, {{"AllData", each _, type table}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "AddIndex", each Table.AddIndexColumn([AllData],"Index",0,1)),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "AddPreviousTime", each let tblName = [AddIndex] in Table.AddColumn([AddIndex],"Previous Time",each tblName{[Index]-1}[Booking Time], type time)),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "CorrectErrors", each Table.ReplaceErrorValues([AddPreviousTime], {{"Previous Time", [AddPreviousTime][Booking Time]{0}}})),
#"Added Custom3" = Table.AddColumn(#"Added Custom2", "AddDuration", each Table.AddColumn([CorrectErrors],"Duration", each [Booking Time] - [Previous Time], type duration)),
#"Removed Other Columns" = Table.SelectColumns(#"Added Custom3",{"AddDuration"}),
#"Expanded AddDuration" = Table.ExpandTableColumn(#"Removed Other Columns", "AddDuration", {"Booking Date", "Booking Time", "User", "Doorside", "Index", "Previous Time", "Duration"}, {"Booking Date", "Booking Time", "User", "Doorside", "Index", "Previous Time", "Duration"})
in
#"Expanded AddDuration"