Страницы: 1
RSS
Power Query: как округлить дату до ближайшей предыдущей пятницы (понедельника)
 
Ребята, кто может подсказать, как в Power Query реализовать округление любой даты до ближайшей предыдущей пятницы (понедельника)?
Привел пример, как сделать это через формулы, но как в PQ это реализовать - разобраться не могу.
Буду благодарен за помощь!
 
EvgeniyLFC, определитесь с правилами - у вас в примере если пятница, но не предыдущая, а текущая, воскресенья вообще превращены в субботы и т.д.
именно для
Цитата
EvgeniyLFC написал:
ближайшей предыдущей пятницы
Код
 let
    from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    to = Table.AddColumn(from, "ПредыдущаяПятница", each Date.StartOfWeek([Дата])-#duration(3,0,0,0), type datetime)
in
    to
Соблюдение правил форума не освобождает от модераторского произвола
 
Если переделать вашу формулу, то так
Код
= [Дата] - Duration.From( Number.Mod( Number.From([Дата]) - 1 - 5, 7 ) )

Но по-моему она не корректна.
buchlotnik,  ваша формула некорректно для субботы и воскресенья посчитает.
Изменено: PooHkrd - 18.10.2019 12:34:34
Вот горшок пустой, он предмет простой...
 
Кнопками с вашей логикой
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Дата", type date}, {"Округление до ближайшей предыдущей пятницы", type date}}),
    #"Вставлено: день недели" = Table.AddColumn(#"Измененный тип", "День недели", each Date.DayOfWeek([Дата])+1),
    #"Условный столбец добавлен" = Table.AddColumn(#"Вставлено: день недели", "Пользовательская", each if [День недели] = 5 then 0 else if [День недели] > 5 then 5-[День недели] else ([День недели]+2)*-1),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Условный столбец добавлен", "Пользовательская.1", each [Пользовательская]*-1),
    #"Измененный тип1" = Table.TransformColumnTypes(#"Добавлен пользовательский объект",{{"Пользовательская.1", type date}}),
    #"Вычитание вставленных дат" = Table.AddColumn(#"Измененный тип1", "Вычитание", each Duration.Days([Дата] - [Пользовательская.1]), Int64.Type),
    #"Измененный тип2" = Table.TransformColumnTypes(#"Вычитание вставленных дат",{{"Вычитание", type date}})
in
    #"Измененный тип2"


Можно всё уместить в одной строке, используя выражения PooHkrd, и buchlotnik,
 
Привет, нужен макрос, который вставляет пустую строку над строкой с значением каждый раз, когда значение ячейки в столбце меняется. То есть есть 20к строк в столбце, которые заполнены гдето двухстами уникальными значениями, и каждый раз когда это значение меняется, нужно вставить пустую строку, помогите пожалуйста!  
 
nikita49, не нарушайте правила. Одна тема - один вопрос. Создайте свою новую тему, предварительно ознакомившись с правилами форума.
Вот горшок пустой, он предмет простой...
 
уже создал, извините))
 
buchlotnik, в примере формула корректно работает, 24.10.19 она округляет вниз до ближайшей пятницы - 18.10.19. Если день недели попадает на пятницу, то дата вниз не идет, а остается на пятнице.
И Ваш метод, к сожалению, не работает.

PooHkrd, а вот эта формула считает вроде правильно. Спасибо огромное!
Изменено: EvgeniyLFC - 18.10.2019 13:29:18
 
Цитата
PooHkrd написал:
некорректно для субботы и воскресенья
угу, тогда так
Код
let
    from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    to = Table.AddColumn(from, "Пятниццо", each ( if     Date.DayOfWeek([Дата]) < 4 then
                                                         Date.StartOfWeek([Дата])
                                                 else    Date.EndOfWeek([Дата])) - #duration(3,0,0,0), type datetime)
in
    to
Соблюдение правил форума не освобождает от модераторского произвола
 
Можно попроще:
Код
= Table.AddColumn(Table, "Friday", each Date.StartOfWeek([Дата], 5))
 
Aleksei_Zhigulin,  8-0 это из разряда: Блин! А чо так тоже можно было?!
Вот горшок пустой, он предмет простой...
 
PooHkrd,  :D  
Страницы: 1
Наверх