Страницы: 1
RSS
Вычисление рабочих дней между датами, Разработка пользовательской функции в PowerQuery
 
Добрый день, есть следующая задача:
Дано:
1. на входе несколько тысяч строк с плановой датой начала (StartDay) и завершения процесса (EndDay).
2. Таблица с выходными днями.
Найти: количество РАБОЧИХ дней между двумя датами.

Предполагаемое решение:
1. Основной запрос с пользовательской функцией и формируемым вычисляемым столбцом c отклонениями в рабочих днях.
2. Пользовательская функция GetCalcWorkDay(StartDay,EndDay). В цикле for I=0 до EndDay-StartDay перебирать даты и по каждой проверить совпадение в списке -календаре выходных дней. Если не совпало счетчик count++.
3. Календарь выходных дней загрузить как List.Bufer.

Столкнулся с проблемой, что в синтаксисе M PowerQuery нет циклов типа For, While и т.д. Прошу подсказать с какой стороны подойти к этой задаче.? Может сам подход не верный и есть иное решение инструментами PowerQuery.
 
Цитата
RinatG написал:
Столкнулся с проблемой, что в синтаксисе M PowerQuery нет циклов типа For, While и т.д.
всё есть (List.Generate, List.Accumulate), пример давайте - примотаем  ;)
Изменено: buchlotnik - 22.02.2021 14:45:07
Соблюдение правил форума не освобождает от модераторского произвола
 
Есть еще такая мысль, может ее проще реализовать?!
для каждой пары StartDay EndDay сформировать список значений. Далее исключить совпадающие пересечения с календарем выходных. Оставшееся количество и будет представлять собой количество рабочих дней.
Можно ли этот подход реализовать функциями PQ?
 
RinatG, можно, приложили бы пример было бы быстрее. А так сам сочинял. Ну и тут не учитываются переносы рабочих дней на выходные. Но специально размазал по шагам, чтобы логика была понятна.
 
del
Изменено: buchlotnik - 23.08.2021 17:35:48
Соблюдение правил форума не освобождает от модераторского произвола
 
Спасибо, круто.
Вот еще один способ придумал в копилку.
List.Count(List.RemoveItems(List.Dates(Date.From(StartDay),Number.From(EndDay])-Number.From(StartDay),#duration(1,0,0,0)),WorkDays))
workDays - список выходных и праздничных дней (ручками создается).

у меня работает.
 
Цитата
RinatG написал:
список выходных и праздничных дней (ручками создается)
ну так-то да... только несколько трудоемко ИМХО
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
buchlotnik написал:
только несколько трудоемко
Для себя делал макрос для формирования списка нерабочих дней на год, если необходимо использовать функцию РАБДЕНЬ.МЕЖД (во вложении).
На нужный год необходимо заполнить из производственного календаря список перенесенных выходных и рабочие субботы, если есть. Праздничные дни, субботы и воскресенья заносить не нужно. С 2006 года по 2021 всё уже занесено в код функции. Запускается изменением значения года в ячейке E1, потом полученные значения можно копировать в свой проект.
Изменено: aequit - 27.02.2021 13:32:17
Страницы: 1
Наверх