Создание расписания работы технологического процесса в разрезе дат и времени, используя List.Accumulate PowerQuery

У меня есть исходная таблица введите сюда описание изображения

Эта таблица отображает порядок выполнения технологических процессов(колонка тех.процесс) при механической обработке, а также взаимодействие этих процессов между собой(колонка связьТП), тоесть если связь = "SS" эти процессы должны начаться одновременно, если колонка связьТП = "FS", то следующая операция должна начаться с окончанием предыдущей, а если связь = "SF", то данная группа операция должна закончиться одновременно. Расчет должен проводиться с учетом дней и часов выполнения каждой операции, а также с учетом выходных дней. Для расчета времени выполнения технологических процессов я использовал функцию list.accumulate, но она выдавала непрерывный расчет продолжительности выполнения тех.процессов без учета того что некоторые процессы выполняются паралельно а также не учитывает выходные дни(суббота, воскресенье) и нерабочее время в рабочие дни(с 16:00 текущего дня до 8:00 утра следующего дня)

Код PowerQuery прилагаю:

let
Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
#"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Дата", type datetime}, {"ПлДатаНач", type datetime}}),
#"Замененное значение" = Table.ReplaceValue(#"Измененный тип",#datetime(2023, 4, 4, 0, 0, 0),null,Replacer.ReplaceValue,{"ПлДатаНач"}),
#"Условный столбец добавлен" = Table.AddColumn(#"Замененное значение", "НовоеНачало", each if [ПорядокТП] = 1 then [Дата] else null ),
#"Удаленные столбцы" = Table.RemoveColumns(#"Условный столбец добавлен",{"ПлДатаНач"}),
#"Переупорядоченные столбцы" = Table.ReorderColumns(#"Удаленные столбцы",{"Дата", "Изделие", "КодИзд", "ТехПроцесс", "ПорядокТП", "СвязьТП", "Ответственный", "РМ", "НовоеНачало", "ВремяВыполн", "ПлДатаОкнч"}),
#"Измененный тип1" = Table.TransformColumnTypes(#"Переупорядоченные столбцы",{{"НовоеНачало", type datetime}, {"ПлДатаОкнч", type datetime}}),
#"Удаленные столбцы1" = Table.RemoveColumns(#"Измененный тип1",{"ПлДатаОкнч"}),
#"Измененный тип4" = Table.TransformColumnTypes(#"Удаленные столбцы1",{{"НовоеНачало", type number}}),
#"Заполнение вниз" = Table.FillDown(#"Измененный тип4",{"НовоеНачало"}),
#"Добавлен индекс" = Table.AddIndexColumn(#"Заполнение вниз", "Индекс", 1, 1),
#"Измененный тип2" = Table.TransformColumnTypes(#"Добавлен индекс",{{"ВремяВыполн", type number}}),
#"Добавлен пользовательский объект" = Table.AddColumn(#"Измененный тип2", "Пользовательская", each List.Accumulate(                  
                    
  List.Range( #"Заполнение вниз"[ВремяВыполн],0,
   [Индекс]
),
[НовоеНачало],
( x, y ) => x + y 



)), #"Переупорядоченные столбцы1" = Table.ReorderColumns(#"Добавлен пользовательский объект",{"Дата", "Изделие", "КодИзд", "ТехПроцесс", "ПорядокТП", "СвязьТП", "Ответственный", "РМ", "НовоеНачало", "ВремяВыполн", "Пользовательская", "Индекс"}),
#"Измененный тип6" = Table.TransformColumnTypes(#"Переупорядоченные столбцы1",{{"Пользовательская", type datetime}}),
#"Переименованные столбцы" = Table.RenameColumns(#"Измененный тип6",{{"Пользовательская", "ОкнчРаботы"}}),
#"Добавлен пользовательский объект1" = Table.AddColumn(#"Переименованные столбцы", "Пользовательская", each [ОкнчРаботы]-#duration(0,[ВремяВыполн],0,0)),
#"Переупорядоченные столбцы2" = Table.ReorderColumns(#"Добавлен пользовательский объект1",{"Дата", "Изделие", "КодИзд", "ТехПроцесс", "ПорядокТП", "СвязьТП", "Ответственный", "РМ", "НовоеНачало", "Пользовательская", "ВремяВыполн", "ОкнчРаботы", "Индекс"}),
#"Измененный тип5" = Table.TransformColumnTypes(#"Переупорядоченные столбцы2",{{"Пользовательская", type datetime}})

#in #"Измененный тип5"

В результате я бы хотел получить график работы в котором отражается дата и время рабочих дней и рабочего времени с перерывом на выходные дни и без учета нерабочего времени(с 16:00 текущего дня по 8:00 следующего дня)


Ответы (0 шт):