Приветствую, друзья, помогите посчитать в PQ вот какую вещь: Есть дата размещения заявки, срок исполнения 3 рабочих дня. То есть. если дата выполнения попадает на выходные или праздники то она должна переноситься на первый рабочий день следующий за ними. Как это можно реализовать?
Добрый день! Может найдете информацию в следующем запросе: Данные-Получить данные-Из других источников-Пустой запрос- в строке формул вводим "=List.Dates"
Примерно так. Оно на коленке, можно реализовать и как функцию, но сейчас времени нет.
Код
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
ИзмененныйТип = Table.TransformColumnTypes(Источник,{{"дата размещения", type date}, {"дата выполнения", type text}}),
ДругиеУдаленныеСтолбцы = Table.SelectColumns(ИзмененныйТип,{"дата размещения"}),
ДобСписокДат = Table.AddColumn(ДругиеУдаленныеСтолбцы, "Список", each List.Dates( Date.AddDays([дата размещения],1), Number.From( List.Max(ДругиеУдаленныеСтолбцы[дата размещения]) - List.Min(ДругиеУдаленныеСтолбцы[дата размещения]) ) + 100, #duration(1, 0, 0, 0) ), type list),
СписокТолькоРабДней = Table.TransformColumns(ДобСписокДат, {{"Список", each List.Difference( List.Select(_, (x) => Date.DayOfWeek(x) <> 5 and Date.DayOfWeek(x) <> 6), Праздники){0}, type date}})
in
СписокТолькоРабДней
И еще, список рабочих дней лучше формировать с официального сайта с производственным календарем, т.к. ваша логика не учитывает рабочих дней, которые перенесены на выходные, как было с субботой 29.12.2018. Как скачивать такой календарь я давал здесь.
Dyroff, если брать даты из календаря, то нужно просто формировать из него список рабочих дней, а дальше через List.Select формируете список дат, которые больше чем та, которая нужна, а от получившегося списка забираете первый его элемент либо через прямую ссылку {0}, либо через List.First().
PooHkrd написал: от получившегося списка забираете первый его элемент либо через прямую ссылку {0}, либо через List.First().
очень актуальная для меня тема. Как быть если во вновь образованном списке рабочих дней, начинающихся с определенной даты нужно выбрать не первый а заданный числом в отдельном столбце таблицы (см. пример)
Vitalee написал: заданный числом в отдельном столбце таблицы
Список дат формируется по той же схеме что я приводил выше, а дальше, чтобы выхватить из этого списка нужный элемент по индексу, например 20й, то пишем так list{19),, или list{20-1}, если так понятнее, т.к. нумерация элементов списка начинается с нуля.
PooHkrd, я бы хотел понять как во второй параметр функции Table.TransformColumns (table,transformOperations, ...) передать значение из самой таблицыtable, чью колонку данная функция преобразует
В итоге функция Table.TransformColumns для каждой записи таблицы table развернула бы свой элемент из списка дат
Спасибо, PooHkrd, да, это то что нужно. Очень выручили. перечитал 3 раза описание Table.ReplaceValue на MicrosoftDocs и так и не понял: как она сработала в данном случае. больше всего вопросов вызвала интерпретация четвертого аргумента (replacer function)
Шаманство, прям какое-то: без танцев с бубнами до истины не докопаться. Еще раз огромное спасибо! Остался маленький момент - на портале открытых данных с 2019 года не обновлялись справочники производственных календарей. может кто-то подскажет другой ресурс?
Добрый день. Строго не судите, начинающий пользователь PQ. Прошу помощи, как это реализовать. Пример во вложении. Есть столбец с начальной датой, есть столбец со списком только рабочих дней. Как получить столбец с датами например через 35 дней?
Сделал скрин. Есть столбец с датами к каждой дате список с рабочими днями в соседнем столбце. Далее в моем понимании для получения списка от даты больше, чем моя начальная,как то так :
Если это намек на то, что мой вопрос к теме не относится, то не соглашусь.
Цитата
написал: Приветствую, друзья, помогите посчитать в PQ вот какую вещь:Есть дата размещения заявки, срок исполнения 3 рабочих дня. То есть. если дата выполнения попадает на выходные или праздники то она должна переноситься на первый рабочий день следующий за ними.Как это можно реализовать?
Добрый день! Прошу помочь с задачей, требуется подсчитать количество выходных дней между двумя датами. Застрял на использовании условий сравнения в List.Select. Пишет что "Не удаётся применить оператор < к типам List и Date".
= Table.AddColumn(#"Измененный тип", "Пользовательская", each List.Count(List.Select(ВыходДни, (x) => x >= [Актуальный срок] and x <= [Дата факт])), type number)