Страницы: 1
RSS
Вычисление продолжительности по условию, Power Query. Работа с Date/Time
 
Добрый день, что-то я всю голову сломал над этим. Подскажите пжл. как вычислить продолжительность по условию.
То есть, на основе примера,  надо высчитать продолжительность между State ГРУШИ (АКТ) и State ГРУШИ (НЕАКТ). Если после НЕАКТ снова появляется в списке ГРУШИ (АКТ), то отсчет продолжительности начинается заново. State необязательно последователен - может быть ГРУШИ (АКТ), потом опять ГРУШИ (АКТ) и потом ГРУШИ (НЕАКТ). В таком случае отсчет должен идти от первого ГРУШИ (АКТ) до ГРУШИ (НЕАКТ).
 
creept, а там где отсутствует статус НЕ АКТ вообще, абрикосы, например, длительность считать нужно?
Вот горшок пустой, он предмет простой...
 
не, где статуса НЕАКТ нету ничего не считаем, только duration между условиями от АКТ до НЕАКТ. Соответственно абрикосы в итоговую таблицу не попадают
Изменено: creept - 15.06.2022 12:26:02
 
creept, Если пред статусом НЕАКТ нет других, то такие случаи тоже выбрасываем? У вас Груши с этого начинаются.
Изменено: PooHkrd - 15.06.2022 12:55:18
Вот горшок пустой, он предмет простой...
 
PooHkrd, да выбрасываем. В отчете рассматриваются значения, которые сначала были АКТ (от 1-го АКТ, если 2-й тоже АКТ), а потом стали НЕАКТ в течение отчетного периода.  
Изменено: creept - 15.06.2022 12:55:41
 
В общем самое интересное я вам накидал. дальше думаю сами разберетесь.
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    ChangedType = Table.TransformColumnTypes(Source,{{"Date/Time", type datetime}}),
    SortedRows = Table.Sort(ChangedType,{{"Имя", Order.Ascending}, {"Date/Time", Order.Ascending}}),
    AddedIndex = Table.AddIndexColumn(SortedRows, "Индекс", 0, 1),
    AddedCustom = Table.AddColumn(AddedIndex, "переход", each if [State] = "НЕАКТ" then [Индекс] else null),
    FilledUp = Table.FillUp(AddedCustom,{"переход"}),
    GroupedRows = Table.Group(
        FilledUp, 
        {"переход", "Имя"}, 
        {{"min_act", each List.Min(Table.SelectRows(_, each [State] = "АКТ")[#"Date/Time"]), type nullable datetime}, 
         {"non_act", each Table.SelectRows(_, each [State] = "НЕАКТ")[#"Date/Time"]{0}?, type nullable datetime }}
    )
in
    GroupedRows
Изменено: PooHkrd - 15.06.2022 12:55:53
Вот горшок пустой, он предмет простой...
 
PooHkrd, спасибо. Все работает. Как то я недопетрил Table.SelectRows использовать.
Страницы: 1
Наверх