запрос мощности вычитает строку ниже из строки выше, используя несколько условий

Однострочный в 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))
0
задан Andrea 6 March 2019 в 11:25
поделиться

1 ответ

Если я правильно выполнил вашу задачу, вам нужно время, когда произошло следующее событие, предполагая, что это время закрытой двери. В этом случае я настоятельно рекомендую вам избегать использования индекса. Вместо этого я предлагаю вам подумать, как применить процедуру выбора строк, чтобы получить то, что вам нужно для каждой строки.

Вот что я думаю должно сработать, если мое понимание вашей задачи было правильным:

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
0
ответ дан Eugene 6 March 2019 в 11:25
поделиться