Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Power Query: расчет тайминга согласно рабочему времени
 
BodkhiSatva, зачем мне это надо?)
Проверить я и в эксель смогла.
Power Query - долго загружает примененные шаги
 
voler83, шаг с сортировкой удалила, спасибо.

код функции "преобразовать файл" ( за пример берется 1 месяц - март)
Код
let
    Источник = Excel.Workbook(Параметр1, null, true),
    Report_Sheet = Источник{[Item="Report",Kind="Sheet"]}[Data],
    #"Повышенные заголовки" = Table.PromoteHeaders(Report_Sheet, [PromoteAllScalars=true]),
    #"Измененный тип" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"Дата и время поступления отклика(МСК)", type datetime}, {"Дата и время поступления отклика(Менеджер)", type datetime}, {"Дата и время взятия отклика в работу", type datetime}, {"Дата и время окончания работы с откликом", type datetime}}),
    #"Другие удаленные столбцы" = Table.SelectColumns(#"Измененный тип",{"Этап", "Дата и время поступления отклика(МСК)", "Дата и время поступления отклика(Менеджер)", "Статус", "ФИО МПП вакансии", "Департамент МПП вакансии", "Адрес вакансии", "Торговая точка", "Должность", "ФИО кандидата", "Источник отклика", "Менеджер который обрабатывал отклик", "Департамент менеджера, который обрабатывал отклик", "Дата и время взятия отклика в работу", "Дата и время окончания работы с откликом", "Статус кандидата после обработки отклика"})
in
    #"Другие удаленные столбцы"
Power Query: расчет тайминга согласно рабочему времени
 
AlienSx, Прошу прощение за длительное молчание.
Вопрос с расчетом удалось решить. Благодарю Вас за отклик)
Power Query - долго загружает примененные шаги
 
Цитата
написал:
на этом форуме нужно отписываться в своих темах,
Буду знать, спасибо за замечание.
Power Query - долго загружает примененные шаги
 
Цитата
написал:
тогда бы не пришлось создавать новую
Так вопрос уже другой, поэтому новую тему создала)
Сам тайминг просчитан)
Power Query - долго загружает примененные шаги
 
Исходники добавила в облако https://cloud.mail.ru/public/dUk6/KZEJ6DWcD

Необходимо посчитать тайминг:
1) скорость взятия отклика в работу
2) скорость обработки отклика

в рамках рабочего времени менеджера, исключив выходные, праздничные дни и нерабочие часы в будни
Цитата
написал:
Начать с прикрепления исходных материалов. Еще можно дополнить описанием алгоритма, что делает запрос (быстрее откроет путь к возможным другим решениям).
Power Query - долго загружает примененные шаги
 
Возможно, что-то с объединением запросов с Календарем.
Сам файл Календарь - 35КБ, но при применении изменении может загружать 500+ МБ из Календарь
Power Query - долго загружает примененные шаги
 
Всем привет.

Хелп ми, кто-нибудь!

Подскажите, пожалуйста, почему запрос очень, очень и очень долго загружает каждый шаг в запросе?
Что можно сделать, чтобы работало быстрее?
Код
let
    Источник = Folder.Files("\\tsclient\S\Рабочие группы\HR Аналитика_исходник\CRM РАБОТУТ"),
    #"Отфильтрованные скрытые файлы1" = Table.SelectRows(Источник, each [Attributes]?[Hidden]? <> true),
    #"Вызвать настраиваемую функцию1" = Table.AddColumn(#"Отфильтрованные скрытые файлы1", "Преобразовать файл", each #"Преобразовать файл"([Content])),
    #"Переименованные столбцы1" = Table.RenameColumns(#"Вызвать настраиваемую функцию1", {"Name", "Source.Name"}),
    #"Другие удаленные столбцы1" = Table.SelectColumns(#"Переименованные столбцы1", {"Source.Name", "Преобразовать файл"}),
    #"Столбец расширенной таблицы1" = Table.ExpandTableColumn(#"Другие удаленные столбцы1", "Преобразовать файл", Table.ColumnNames(#"Преобразовать файл"(#"Пример файла"))),
    #"Измененный тип" = Table.TransformColumnTypes(#"Столбец расширенной таблицы1",{{"Source.Name", type text}, {"Этап", Int64.Type}, {"Дата и время поступления отклика(МСК)", type datetime}, {"Дата и время поступления отклика(Менеджер)", type datetime}, {"ID вакансии в CRM RBT", Int64.Type}, {"Статус", type text}, {"ФИО МПП вакансии", type text}, {"Департамент МПП вакансии", type text}, {"Адрес вакансии", type text}, {"Торговая точка", type text}, {"Должность", type text}, {"ФИО кандидата", type text}, {"Источник отклика", type text}, {"Менеджер который обрабатывал отклик", type text}, {"Причина закрытия отклика", type text}, {"Департамент менеджера, который обрабатывал отклик", type text}, {"Дата и время взятия отклика в работу", type datetime}, {"Дата и время окончания работы с откликом", type datetime}, {"Статус кандидата после обработки отклика", type text}, {"ID вакансии в CRM RBT, на которую направлен кандидат", Int64.Type}, {"UTM", type text}, {"ID", type text}, {"Click ID", type text}, {"Телефон", type text}, {"ID родительского отклика", type text}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Измененный тип", "Сегодня", each DateTime.FromText(Text.From(DateTime.Date(DateTime.LocalNow())) & " 09:30:00")),
    #"Измененный тип1" = Table.TransformColumnTypes(#"Добавлен пользовательский объект",{{"Сегодня", type datetime}}),
    #"Замененное значение" = Table.ReplaceValue(#"Измененный тип1",null,"Не отработан отклик",Replacer.ReplaceValue,{"Статус кандидата после обработки отклика"}),
    #"Условный столбец добавлен" = Table.AddColumn(#"Замененное значение", "БН", each if [#"Департамент менеджера, который обрабатывал отклик"] = null then [Департамент МПП вакансии] else [#"Департамент менеджера, который обрабатывал отклик"]),
    #"Объединенные запросы" = Table.NestedJoin(#"Условный столбец добавлен", {"Статус кандидата после обработки отклика"}, Критерии, {"Статус кандидата выгрузка"}, "Критерии", JoinKind.LeftOuter),
    #"Развернутый элемент Критерии" = Table.ExpandTableColumn(#"Объединенные запросы", "Критерии", {"Критерий", "Фактор"}, {"Критерий", "Фактор"}),
    #"Сортированные строки" = Table.Sort(#"Развернутый элемент Критерии",{{"ID", Order.Ascending}}),
    #"Объединенные запросы1" = Table.NestedJoin(#"Сортированные строки", {"ID"}, Этап_итог, {"ID"}, "Этап_итог", JoinKind.LeftOuter),
    #"Развернутый элемент Этап_итог" = Table.ExpandTableColumn(#"Объединенные запросы1", "Этап_итог", {"Этап"}, {"Этап_итог"}),
    #"Добавлен пользовательский объект2" = Table.AddColumn(#"Развернутый элемент Этап_итог", "Разница t с Мск", each [#"Дата и время поступления отклика(Менеджер)"]-[#"Дата и время поступления отклика(МСК)"]),
    #"Условный столбец добавлен1" = Table.AddColumn(#"Добавлен пользовательский объект2", "Итог_Дата и время взятия отклика в работу", each if [Дата и время взятия отклика в работу] = null then [Сегодня] else [Дата и время взятия отклика в работу]),
    #"Условный столбец добавлен2" = Table.AddColumn(#"Условный столбец добавлен1", "Итог_Дата и время окончания работы с откликом", each if [Дата и время окончания работы с откликом] = null then [Сегодня] else [Дата и время окончания работы с откликом]),
    #"Добавлен пользовательский объект1" = Table.AddColumn(#"Условный столбец добавлен2", "Дата и время взятия отклика в работу(Менеджер)", each if [Дата и время взятия отклика в работу] = "null" then [Сегодня] else [Итог_Дата и время взятия отклика в работу]+[Разница t с Мск]),
    #"Добавлен пользовательский объект3" = Table.AddColumn(#"Добавлен пользовательский объект1", "Дата и время окончания работы с откликом(Менеджер)", each if [Дата и время окончания работы с откликом] = "null" then [Сегодня] else [Итог_Дата и время окончания работы с откликом]+[Разница t с Мск]),
    #"Дублированный столбец" = Table.DuplicateColumn(#"Добавлен пользовательский объект3", "Дата и время поступления отклика(Менеджер)", "Копия Дата и время поступления отклика(Менеджер)"),
    #"Разделить столбец по разделителю" = Table.SplitColumn(Table.TransformColumnTypes(#"Дублированный столбец", {{"Копия Дата и время поступления отклика(Менеджер)", type text}}, "ru-RU"), "Копия Дата и время поступления отклика(Менеджер)", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Дата поступления отклика(Менеджер)", "Время поступления отклика(Менеджер)"}),
    #"Измененный тип2" = Table.TransformColumnTypes(#"Разделить столбец по разделителю",{{"Дата поступления отклика(Менеджер)", type date}, {"Время поступления отклика(Менеджер)", type time}}),
    #"Объединенные запросы2" = Table.NestedJoin(#"Измененный тип2", {"Дата поступления отклика(Менеджер)"}, Календарь, {"Дата"}, "Календарь", JoinKind.LeftOuter),
    #"Развернутый элемент Календарь" = Table.ExpandTableColumn(#"Объединенные запросы2", "Календарь", {"День", "Время начала", "Время окончания (для отклика)", "Время окончания ", "Перенести"}, {"День", "Время начала", "Время окончания (для отклика)", "Время окончания ", "Перенести"}),
    #"Условный столбец добавлен3" = Table.AddColumn(#"Развернутый элемент Календарь", "Итог_Дата поступления отклика(Менеджер)", each if [День] = "Выходной" then [Перенести] else if [День] = "Праздничный" then [Перенести] else if [#"Время поступления отклика(Менеджер)"] >= [#"Время окончания (для отклика)"] then [Перенести] else [#"Дата поступления отклика(Менеджер)"]),
    #"Условный столбец добавлен4" = Table.AddColumn(#"Условный столбец добавлен3", "Итог_время поступления отклика(Менеджер)", each if [День] = "Выходной" then #time(9, 30, 0) else if [День] = "Праздничный" then #time(9, 30, 0) else if [#"Время поступления отклика(Менеджер)"] >= [#"Время окончания (для отклика)"] then #time(9, 30, 0) else if [#"Время поступления отклика(Менеджер)"] < #time(9, 30, 0) then #time(9, 30, 0) else [#"Время поступления отклика(Менеджер)"]),
    #"Объединенные столбцы" = Table.CombineColumns(Table.TransformColumnTypes(#"Условный столбец добавлен4", {{"Итог_Дата поступления отклика(Менеджер)", type text}, {"Итог_время поступления отклика(Менеджер)", type text}}, "ru-RU"),{"Итог_Дата поступления отклика(Менеджер)", "Итог_время поступления отклика(Менеджер)"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Итог_Дата и время поступления отклика(Менеджер)"),
    #"Измененный тип3" = Table.TransformColumnTypes(#"Объединенные столбцы",{{"Итог_Дата и время поступления отклика(Менеджер)", type datetime}, {"Итог_Дата и время окончания работы с откликом", type datetime}, {"Дата и время взятия отклика в работу(Менеджер)", type datetime}, {"Дата и время окончания работы с откликом(Менеджер)", type datetime}, {"Итог_Дата и время взятия отклика в работу", type datetime}}),
    #"Добавлен пользовательский объект4" = Table.AddColumn(#"Измененный тип3", "Скорость взятия отклика(МПП)", each let
    StartDateTime = [#"Итог_Дата и время поступления отклика(Менеджер)"],
    EndDateTime = [#"Дата и время взятия отклика в работу(Менеджер)"],
    WorkStartTime = Time.From([Время начала]),
    WorkEndTime = Time.From([#"Время окончания "]),
    HolidayList = Holidays[HolidayDate],
    StartDate = Date.From(StartDateTime),
    EndDate = Date.From(EndDateTime),
    
    // генерация списка всех дат между началом и концом
    AllDates = List.Dates(StartDate, Duration.Days(EndDate - StartDate) + 1, #duration(1, 0, 0, 0)),

    // отбор только рабочих дней
    WorkingDays = List.Select(AllDates, each IsWorkingDay(HolidayList, _)),

    // расчёт рабочего времени:
    WorkingDuration = List.Sum(List.Transform(WorkingDays, each
        let
            currentDay = _,
            startTime = if currentDay = StartDate then Time.From(StartDateTime) else WorkStartTime,
            endTime = if currentDay = EndDate then Time.From(EndDateTime) else WorkEndTime,
            duration = Duration.TotalMinutes(endTime - startTime)
        in
            if duration > 0 then duration else 0
    ))
in
    WorkingDuration),
    #"Добавлен пользовательский объект5" = Table.AddColumn(#"Добавлен пользовательский объект4", "Скорость обработки отклика(МПП)", each CalculateMinutes(
    [#"Дата и время взятия отклика в работу(Менеджер)"],
    [#"Дата и время окончания работы с откликом(Менеджер)"],
    Time.From([Время начала]),
    Time.From([#"Время окончания "]),
    Table.Column(Holidays, "HolidayDate")
)),
    #"Измененный тип4" = Table.TransformColumnTypes(#"Добавлен пользовательский объект5",{{"Скорость взятия отклика(МПП)", type number}, {"Скорость обработки отклика(МПП)", type number}}),
    #"Условный столбец добавлен5" = Table.AddColumn(#"Измененный тип4", "Превышение норматива", each if [#"Скорость взятия отклика(МПП)"] > 15 then 1 else 0),
    #"Замененные ошибки" = Table.ReplaceErrorValues(#"Условный столбец добавлен5", {{"Превышение норматива", 0}}),
    #"Добавлен пользовательский объект6" = Table.AddColumn(#"Замененные ошибки", "Фактор_итог", each if [Фактор] = "Скорость обработки" and [Превышение норматива] = 1 then "Другое" else [Фактор]),
    #"Объединенные запросы3" = Table.NestedJoin(#"Добавлен пользовательский объект6", {"Фактор_итог"}, Критерии, {"Фактор"}, "Критерии", JoinKind.LeftOuter),
    #"Развернутый элемент Критерии1" = Table.ExpandTableColumn(#"Объединенные запросы3", "Критерии", {"Критерий"}, {"Критерий_итог"})
in
    #"Развернутый элемент Критерии1"
Power Query: расчет тайминга согласно рабочему времени
 
Всем привет!

Эксперты эксель и PQ, молю о помощи!)

Подскажите, пожалуйста, как можно в PQ рассчитать скорость взятия отклика в работу после его поступления (учитывая рабочее время и не учитывая выходные, праздники, нерабочие часы в будни)?

Бывает, когда менеджер берет отклик в работу спустя 10 дней после его поступления, и просто вычесть дату-время взятия отклика в работу от даты-время поступления отклика некорректно.

Прилагаю исходник и календарь
Вывод максимального значения по условию в Power Query
 
Цитата
AlienSx написал:
а чойта группировка не подходит?
Получилось, это я туплю))
Спасибище!
Изменено: regina516 - 27.03.2025 20:34:54
Вывод максимального значения по условию в Power Query
 
Цитата
Изменено: regina516 - 27.03.2025 20:35:15
Вывод максимального значения по условию в Power Query
 
Добрый вечер.

Подскажите, пожалуйста, как в  Power Query вывести столбец с максимальным значением по условию?
Или удалить дубликаты оставив максимальное значение по критерию?

Т.е. имеем столбцы ID и Этап, необходимо оставить ту строку с ID, которая имеет максимальный этап.

Вариант с группировкой не подходит, т.к. важно не потерять оставшиеся столбцы

Надеюсь, тз внятное :)  
Страницы: 1
Наверх