Страницы: 1
RSS
PQ сделать таблицу из двух дат месяца и заменить праздничную дату на следующий или предыдущий рабочий день
 
добрый день. в таблице во втором столбце третьи пятницы месяцев, в первом - следующие понедельники после третьих пятниц месяцев. как в Power Query сделать такую таблицу и заменить праздничную дату на следующий или предыдущий рабочий день? если праздник пришелся на пятницу, то заменить на предыдущий четверг, если праздник выдался на понедельник, то заменить на следующий вторник. даты праздников есть в доптаблице(сокращенный день принимается за выходной).
Изменено: artyrH - 28.06.2019 15:10:20
 
Если вам нужно найти ближайший к нужной дате рабочий день из списка, то посмотрите вот эту тему. Для вас алгоритм будет тот же, только вместо циферок в таблицах будут даты.
В качестве таблицы , по которой искать рабочие дни - сформируйте список всех дней года, после чего удалите из него все выходные дни, а дальше уже сравнивайте, там Андрей дал прямо готовый код запроса. Скорость работы фантастическая.
Вот горшок пустой, он предмет простой...
 
Ну там все кнопочками делается жеж
Код
let
    Source = #table(type table [Date = date], List.Zip({List.Dates(#date(2018,1,1),730,#duration(1,0,0,0))})),
    #"Inserted Year" = Table.AddColumn(Source, "Год", each Date.Year([Date]), Int64.Type),
    #"Inserted Month" = Table.AddColumn(#"Inserted Year", "Месяц", each Date.Month([Date]), Int64.Type),
    #"Inserted Day of Week" = Table.AddColumn(#"Inserted Month", "День недели", each Date.DayOfWeek([Date], Day.Monday), Int64.Type),
// календарь сделали
    #"Filtered Rows" = Table.SelectRows(#"Inserted Day of Week", each ([День недели] = 4)),
    #"Grouped Rows" = Table.Group(#"Filtered Rows", {"Год", "Месяц", "День недели"}, {{"tab", each Table.SelectRows(Table.AddIndexColumn(_[[Date]],"i"), each [i]=2), type table [Date=date, i = number]}}),
    #"Expanded {0}" = Table.ExpandTableColumn(#"Grouped Rows", "tab", {"Date"}, {"Friday"}),
    #"Removed Other Columns" = Table.SelectColumns(#"Expanded {0}",{"Friday"}),
    #"Added Custom" = Table.AddColumn(#"Removed Other Columns", "Monday", each [Friday]+#duration(3,0,0,0), type date),
    #"Merged Queries" = Table.NestedJoin(#"Added Custom", {"Friday"}, Document, {"Дата"}, "Document", JoinKind.LeftOuter),
    #"Expanded {0}1" = Table.ExpandTableColumn(#"Merged Queries", "Document", {"Статус"}, {"Выходные пт"}),
    #"Merged Queries1" = Table.NestedJoin(#"Expanded {0}1", {"Monday"}, Document, {"Дата"}, "Document", JoinKind.LeftOuter),
    #"Expanded {0}2" = Table.ExpandTableColumn(#"Merged Queries1", "Document", {"Статус"}, {"Выходные пн"}),
    #"Added Custom1" = Table.AddColumn(#"Expanded {0}2", "3rd Friday", each if [Выходные пт]=null then [Friday] else [Friday]-#duration(1,0,0,0), type date),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Next Monday", each if [Выходные пн]=null then [Monday] else [Monday]+#duration(1,0,0,0), type date),
    #"Removed Other Columns1" = Table.SelectColumns(#"Added Custom2",{"3rd Friday", "Next Monday"}),
    #"Sorted Rows" = Table.Sort(#"Removed Other Columns1",{{"3rd Friday", Order.Ascending}})
in
    #"Sorted Rows"
F1 творит чудеса
 
PooHkrd, спасибо за совет, только я не знаю с какой стороны подходить к таким запросам. трудно пока понимаю пользовательские функции
Максим Зеленский, большое спасибо. просто идеально
мне это надо чтоб делать все расчеты в запросе и освободить лист от этих таблиц. лист удалю. и будет у меня только один лист и огроменный запрос. если в запросе 70-80 шагов - это не страшно же? раз работает - почему бы и нет. ограничений про количество шагов пока не слышал. меня все устраивает)
 
artyrH, нет, не страшно. Но дебажить такой запрос все таки сложнее. Я все таки стараюсь разбивать расчеты на куски, чтобы в случае косяков проще было вылавливать источник багов.
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх