Страницы: 1
RSS
Power query, Удаление дубликатов (или группировка) с условием
 
Коллеги, добрый день!

В примере приведены две таблицы, левая исходные данные, правая что нужно получить. Преобразование обязательно нужно выполнить в Power Query.

1. Мы имеем Список групп.
2. И должности сотрудников в этих группах с некой информацией.
3. Должности сотрудников имеют иерархию (Самый главный, Главный, Обычный).

Необходимо получить список групп (без дубликатов), с условием того, что если в списке сотрудников для группы была должность "Самый главный", то мы выводим информацию по группе этой сроки. Если в списке сотрудников не было "Самый главный" выводим информацию по группу, с более низкой значимостью т.е. "Главный". Если и ее нет, то выводим "Обычный"

P.s. Если в группе сидит несколько сотрудников с одной должностью которая должна выводиться выбираем любую. Главное что бы была 1 строка

Пожалуйста помогите разобраться с такой задачкой.
 
Доброе время суток.
Создаёте либо отдельную таблицу, либо внутри запроса, где нумеруете иерархию - от лучшей 1 до N худшей.
Через Join соединяете с основной таблицей (пусть будет Таблица1).
Находите минимум в Таблица1 для каждой группы (Группа1)
Соединяете по навзванию группы и минимуму Группа1 и Таблица1 через Join - останутся только нужные строки.
Удаляете вспомогательные столбцы.

Успехов.
 
Андрей VG, Спасибо большое получилось! Но получилось не очень красиво, так как у меня висит 3 соединения(Один с таблицей данных, другой с группировкой по минимальной иерархии и третий результат соединения таблиц). Как сделать внутри запроса так и не понял, не хватает знаний =(
 
Я так сделал
Код
let
    general = #table( type table [Best = Int64.Type, Value = text],
        {
            {1, "Самый главный"},
            {2, "Главный"},
            {3, "Обычный"}
        }),
    source = Excel.CurrentWorkbook(){[Name="Исходные"]}[Content],
    typed = Table.TransformColumnTypes(source,{{"Название группы", type text}, {"Текстрове поле", type text}, {"Должность", type text}}),
    joined = Table.Join(typed, {"Должность"}, general, {"Value"}, JoinKind.Inner),
    grouped = Table.Group(Table.RemoveColumns(joined, {"Value"}), {"Название группы"}, { {"thisBest", each List.Min([Best]), Int64.Type} }),
    getBest = Table.Join(joined, {"Название группы", "Best"}, grouped, {"Название группы", "thisBest"}, JoinKind.Inner)[[Название группы], [Текстрове поле], [Должность]],
    getFirst = Table.Group(getBest, {"Название группы"}, { {"row", each _{0}, type record} })[[row]],
    result = Table.ExpandRecordColumn(getFirst, "row", Table.ColumnNames(typed))
in
    result

P. S. Исходную таблицу переименовал из Таблица1 в Исходные.
 
Андрей VG, Спасибо огромное! Учиться и учиться еще надо, не с первого раза понял какие вы манипуляции выполняли. Все работает, все супер!
 
Добрый вечер. Только начал изучать PQ..подскажите советом или кодом пожалуйста. Задача аналогичная, нужно добавить пользовательский столбец, с подсчетом кол-ва дубликатов в определенном столбце. В моем примере - вывести кол-во дубликатов по ID. Желаемый результат в столбце "C" (выделен желтым).
Пробовал применить коды описанные выше: в добавляемом столбце были пустые пустые значения типа "table". Хочу найти ошибку.
 
Web-Zahar,  можно так:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1_2"]}[Content],
    GroupedRows = Table.Group(Source, {"ID"}, {{"Таб", each [a = Table.RowCount(_), b = Table.AddColumn(_, "PQ - дубли ID 2", each a )][b], type table }}),
    Out = Table.Combine( GroupedRows[Таб] )
in
    Out
Вот горшок пустой, он предмет простой...
 
PooHkrd, Спасибо. Буду изучать))
Страницы: 1
Наверх