Страницы: 1
RSS
Создание столбца по условию PQ
 
Добрый день!
Прошу помочь с написание формулы для PQ,
Идея заключается в том, что если день недели понедельник (0), то данные из исходного файла будут браться за пятницу (-3 дня), для всех остальных дней недели ( -1 день).

Я пытался реализовать это через создание столбика, проставления единиц и затем фильтрации, но вылезает ошибка -  имя не распознано.
Не могу понять, как задать условие без создания столбика, думаю что лучше бы начать было так =if Date.DayOfWeek(DateTime=FixedLocalNow())=0 then...и здесь прописывать создание столбца, но не выходит.
Еще чувствую что намудрил с создание условий и внутри одного запроса then/else - создавать дополнительные было неправильно.

Столбец Создан содержит время/дату

Файл приложить пока что возможности нет

Спасибо!
Код
let

   
Источник =
Excel.Workbook(File.Contents("xxxxx"),
null, true),

   
Orders_Sheet = Источник{[Item="Orders",Kind="Sheet"]}[Data],

   
#"Повышенные заголовки" = Table.PromoteHeaders(Orders_Sheet, [PromoteAllScalars=true]),

   
#"Вычисленный день недели" = Table.TransformColumns(#"Дублированный столбец",{{"Копия Создан", Date.DayOfWeek,
Int64.Type}}),

   
#"Переименованные столбцы" =
Table.RenameColumns(#"Вычисленный день недели",{{"Копия
Создан", "ДеньНедели"}}),

    #"Условный столбец добавлен" =
Table.AddColumn(#"Переименованные столбцы",
"Пользовательская", each if Date.DayOfWeek(DateTime.FixedLocalNow())
= 0 then

    #"Вчера заявок" =
Table.AddColumn(#"Извлеченная дата", "Вчера заявок", each
if [Создан]=DateTime.Date(Date.AddDays(DateTime.FixedLocalNow(), -1)) then 1
else 0)

    else

    #"Вчера заявок" =
Table.AddColumn(#"Извлеченная дата", "Вчера заявок", each
if [Создан]=DateTime.Date(Date.AddDays(DateTime.FixedLocalNow(), -1)) then 1
else 0)),

    #"Строки с примененным
фильтром" = Table.SelectRows(#"Вчера заявок", each ([Вчера
заявок] = 1)),

 
Вот это #"Вчера заявок" = вот лишнее.
Попробуйте так:
Код
    ...
#"Условный столбец добавлен" =
Table.AddColumn(#"Переименованные столбцы",
"Пользовательская", each if Date.DayOfWeek(DateTime.FixedLocalNow()) = 0 
    then
Table.AddColumn(#"Извлеченная дата", "Вчера заявок", each
if [Создан]=DateTime.Date(Date.AddDays(DateTime.FixedLocalNow(), -1)) then 1
else 0)
 
    else
Table.AddColumn(#"Извлеченная дата", "Вчера заявок", each
if [Создан]=DateTime.Date(Date.AddDays(DateTime.FixedLocalNow(), -1)) then 1
else 0)),
    ...

Но вообще говоря без данных сложно понять где именно у вас ошибка.
Изменено: PooHkrd - 11.11.2019 16:36:52
Вот горшок пустой, он предмет простой...
 
Цитата
Спасибо,
Тоже думал что ошибка в этом, но данные также не выводятся, пишет о том, что "Импорт Вчера заявок не соответствует ни одному из экспортов. Не пропущена ли ссылка на модуль?"
Изменено: Floydmayz - 12.11.2019 22:33:25
 
Приложите пример данных и результат, который хотите получить. Так будет проще решить вашу задачу.
З.Ы. и ознакомьтесь с правилами форума, не нарушайте.  ;)
Изменено: PooHkrd - 11.11.2019 17:17:10
Вот горшок пустой, он предмет простой...
 
Вкладываю файл-пример, не могу добавить код своего варианта PQ из-за другой ОС.
Я пытался написать в PQ формулу - которая выводила бы данные только одно дня из таблицы исходного, если день недели понедельник, то данные за пятницу(необязательно, в зависимости от сложности, можно было бы добавить то если сб/вс - то также брать данные пятницы), если любой другой, то -1 день (во вторник- понедельник).

На конкретном примере -
11/11 запрос должен был вывести данные 8/11,
12/11  запрос должен был вывести данные 11/11

Мои попытки выше, спасибо!

УсловныйСтолбецPQ.xlsx (9.33 КБ)  
 
Floydmayz, вернитесь в свой #3 и удалите то, что Вы ошибочно считаете цитатой.
И запомните: кнопка цитирования не для ответа!
 
Доброе время суток.
Цитата
Floydmayz написал:
Мои попытки
Вы настолько застенчивы, что не можете прочитать правила? И это настолько сложно представить результат по входным данным?
Вариант
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    aggregate = Table.Group(Source, {"Создан"}, {"Заявок", each List.Sum([Заявок]), Number.Type}),
    addDayOfWeekNumber = Table.AddColumn(aggregate,  "DayOfWeek", each Date.DayOfWeek([Создан], Day.Saturday), Int64.Type),
    addPrevJoinDate = Table.AddColumn(addDayOfWeekNumber, "prevJoinDate", each Date.AddDays([Создан], (if [DayOfWeek] < 3 then -[DayOfWeek] else 0) - 1)),
    renameColumnForJoin = Table.RenameColumns(aggregate, {{"Создан", "Ранее создан"}, {"Заявок", "Ранее заявок"}}),
    result = Table.Join(addPrevJoinDate, {"prevJoinDate"}, renameColumnForJoin, {"Ранее создан"}, JoinKind.LeftOuter),
    #"Sorted Rows" = Table.Sort(result,{{"Создан", Order.Ascending}}),
    #"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"DayOfWeek", "prevJoinDate"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Создан", type date}, {"Ранее создан", type date}})
in
    #"Changed Type"
Изменено: Андрей VG - 12.11.2019 22:26:47
 
Юрий М, поправил

Андрей VG, спасибо за предложенный вариант!  Я использовал конструкцию FixedLocalNow чтобы дни считались от текущего, читал код написанный Вами, не нашел подобной конструкции, не могли бы подсказать, какая часть определяет текущий день? протестировать сам запрос смогу только завтра
 
Цитата
Floydmayz написал:
Я использовал конструкцию FixedLocalNow чтобы дни считались от текущего,
Для того чтобы понять зачем FixedLocalNow - вы должны и в названии темы в посте постановки задачи описать из чего, что и как хотите получить, а не описывать как у вас не получается нечто неописанное.
Предложенное решение дополняет строки агрегированных данных по дням агрегированными данными за предыдущий день (предшествующий, если это вторник - суббота и предшествующая пятница для воскресенья и понедельника).
Если вы хотите фильтровать исходные данные за предыдущий день (с учётом определения выше), то зачем добавлять столбцы в исходную таблицу да ещё с условиями? Достаточно вычислить дату этого предшествующего дня и задать его как параметр в Table.SelectRows
Страницы: 1
Наверх