Страницы: 1
RSS
Power Bi: посчитать разговоры сотрудников, между которыми была пауза более указанной
 
Всем доброго дня!

Потихоньку осваивая для себя Power Bi получил неожиданную задачу - создать визуальный отчет по телефонным разговорам каждого сотрудника. Исходник выглядит сложночитаемо, поэтому для иллюстрации вопроса упростил его до (смотри вложение).

И собственно сама задача - имея исходные данные посчитать и вывести (с частью вывести я конечно справлюсь) разговоры сотрудников (по каждому сотруднику индивидуально), между которыми была пауза более 10 (условно) минут.

Логика проста - берем начало разговора, прибавляем к нему время самого разговора и сравниваем со временем начала следующего разговора. Но (как всегда это "но") как это реализовать в Bi - ума не приложу.

(Пример ожидаемого результата в том же вложении)
Изменено: stanislove - 13.02.2020 12:59:02
 
У Иванова три разговора в итоговой таблице в столбце "Продолжительность пауз" это сумма пауз между всеми разговорами?
Ну и традиционно: вам решение тоже в картинках?
 
Цитата
StepanWolkoff написал:
У Иванова три разговора в итоговой таблице в столбце "Продолжительность пауз" это сумма пауз между всеми разговорами?
Именно. Продолжительность пауз - сумма всех пауз между разговорами.
Цитата
StepanWolkoff написал:
Ну и традиционно: вам решение тоже в картинках?
Не нашел способа прикрепить сюда проект bi, решил что визуализация лучше чем ничего.

UPD. Нашел способ, прикрепил файл примера. Результат, само собой, оставил картинкой :)
Изменено: stanislove - 13.02.2020 11:40:44
 
Итак, благодаря нехитрым вычислениям
Код
КонецРазговора = 'Лист1'[Время начала разговора] + FORMAT (TIME (0; 0; 'Лист1'[Продолжительность разговора (сек)]); "HH:mm:ss") 

Мы получили время окончания разговора. И наша таблица примера имеет следующий вид (картинка во вложении)

Вопрос к форуму - как теперь сравнить время конца разговора со временем начала следующего по критерию (можно просто носом ткнуть в функцию, попробую разобраться)

Вопрос два - такая логика работы (построчное сравнение) применима к bi или же я принципиально мыслю неправильно ?

за дабл пост извините, думал редактирую предыдущий.
Изменено: stanislove - 13.02.2020 13:01:56
 
Доброе время суток
Цитата
stanislove написал:
применима к bi
Почему же не применима? Но лучше это делать на этапе загрузки в Power Query
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Лист1"]}[Content],
    calc = Table.Group(Source, {"Источник (кто)"}, {"temp", (sub) =>
    let
        setOrder = Table.Sort(sub, {"Дата вызова", "Время начала разговора"}),
        addInfo = Table.AddColumn(setOrder, "temp", each 
            [start = [Дата вызова] + Duration.From([Время начала разговора]),
             finish = start + #duration(0, 0, 0, [#"Продолжительность разговора (сек)"])
        ]),
        baseData = Table.ExpandRecordColumn(addInfo[[temp]], "temp", {"start", "finish"}),
        before = Table.ToColumns(Table.RemoveLastN(baseData, 1)),
        after = Table.ToColumns(Table.RemoveFirstN(baseData, 1)),
        result = Table.FromColumns(before & after)
    in
        Table.AddColumn(result, "Column5", each Duration.TotalSeconds([Column3] - [Column2]))
    }),
    #"Expanded {0}" = Table.ExpandTableColumn(calc, "temp", {"Column1", "Column2", "Column3", "Column4", "Column5"}, {"Column1", "Column2", "Column3", "Column4", "Column5"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded {0}",{{"Column1", "Звонок1"}, {"Column2", "Завершён1"}, {"Column3", "Звонок2"}, {"Column4", "Завершён2"}, {"Column5", "Простой (сек)"}})
in
    #"Renamed Columns"
 
Цитата
Андрей VG написал:
Почему же не применима? Но лучше это делать на этапе загрузки в Power Query
Спасибо за ответ.
Я провел добрый час в попытках осмыслить что Вы мне посоветовали. Осмыслить осмыслил, но на практике, с местом применения кода - беда. Никак не могу понять куда данный запрос встроить.  
 
Цитата
Цитата
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Лист1"]}[Content],
    calc = Table.Group(Source, {"Источник (кто)"}, {"temp", (sub) =>
    let
        setOrder = Table.Sort(sub, {"Дата вызова", "Время начала разговора"}),
        addInfo = Table.AddColumn(setOrder, "temp", each 
            [start = [Дата вызова] + Duration.From([Время начала разговора]),
             finish = start + #duration(0, 0, 0, [#"Продолжительность разговора (сек)"])
        ]),
        baseData = Table.ExpandRecordColumn(addInfo[[temp]], "temp", {"start", "finish"}),
        before = Table.ToColumns(Table.RemoveLastN(baseData, 1)),
        after = Table.ToColumns(Table.RemoveFirstN(baseData, 1)),
        result = Table.FromColumns(before & after)
    in
        Table.AddColumn(result, "Column5", each Duration.TotalSeconds([Column3] - [Column2]))
    }),
    #"Expanded {0}" = Table.ExpandTableColumn(calc, "temp", {"Column1", "Column2", "Column3", "Column4", "Column5"}, {"Column1", "Column2", "Column3", "Column4", "Column5"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded {0}",{{"Column1", "Звонок1"}, {"Column2", "Завершён1"}, {"Column3", "Звонок2"}, {"Column4", "Завершён2"}, {"Column5", "Простой (сек)"}})
in
    #"Renamed Columns"
Необходима небольшая консультация.

В коде более-менее разобрался, суть его понимаю, но с практическим пониманием по прежнему беда

При попытке применить его в момент загрузки данных ругается:
Код
Expression.Error: Не найдена таблица Excel с именем "Лист1".
Сведения:
    Лист1

Как победить ?
Изменено: stanislove - 14.02.2020 10:06:58
 
Цитата
stanislove написал:
Как победить ?
Ну, для начала разместить данные в книге Excel и создать на базе этих данных таблицу с именем Лист1.
Изменить указание к источнику данных с Excel.CurrentWorkbook(){[Name="Лист1"]}[Content] на
Код
Source = Excel.Workbook(File.Contents("C:\Path\bookname.xlsx"), null, true){[Item="Лист1",Kind="Table"]}[Data]
Ну, и не стесняться читать спецификацию языка - одним мышкоклацательным хардкодом не проживёшь :)
 
Андрей VG,

В коде имеется многострочная функция с несколькими операторами. Фрагмент:
Цитата
stanislove написал:
calc = Table.Group(Source, {"Источник (кто)"}, {"temp", (sub) =>    let        setOrder = Table.Sort(sub, {"Дата вызова", "Время начала разговора"}),

Есть ли способ пройти функцию по шагам, чтобы посмотреть, как отрабатывает каждый оператор, входящий в  функцию?

А то в окне "примененные шаги" это всё один большой шаг...
 
Уважаемые мэтры форума!

Вопрос:
Цитата
quasarrr написал:
Есть ли способ пройти функцию по шагам, чтобы посмотреть, как отрабатывает каждый оператор, входящий в  функцию?
совсем глупый?

Или наоборот? Все бы хотели знать, но никто не знает?
 
Вопрос переформулирую.

Как отлаживать пользовательские функции?
 
Цитата
quasarrr написал:
совсем глупый?
Вопрос не по теме топика, ну и плюс вы просто спешите, не все же и всегда бросаются отвечать, тут не все заголовки тем-то прочитываешь..
Цитата
Power Bi: посчитать разговоры сотрудников, между которыми была пауза более указанной
Просто создайте новую тему с предложенным вами вопросом
Цитата
quasarrr написал:
Как отлаживать пользовательские функции?
 
Андрей VG,

Ок, спасибо, создам новую тему
Страницы: 1
Наверх