Страницы: 1
RSS
PQ. Удаление дубликатов по условию, необходимо удалить дубли строк на основании значения в столбце
 
Здравствуйте!
Прошу помочь с решением задачки в Power Query.

Есть файл, в котором почти половина строк = дубли.
Дубли 100% совпадают между собой только по первым двум столбцам. Последний столбец 100% разный, необходимо оставить ту строку, у которой в последнем столбце значение больше. В файле примера: строка 3 и 4.

Столбец "Column2" = 02.01.2019  10:02:59
Столбец "Column3" = 9991112222
 
Код
let
    from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    typ = Table.TransformColumnTypes(from,{{"Column8", type datetime}}),
    group = Table.Group(typ, {"Column2", "Column3"}, {{"temp", each Table.Max(_,"Column8"), type table}}),
    to = Table.FromRecords(group[temp])
in
    to
Соблюдение правил форума не освобождает от модераторского произвола
 
Можно так:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    ChangedType = Table.TransformColumnTypes(Source,{{"Column2", type datetime}, {"Column3", Int64.Type}, {"Column5", Int64.Type}, {"Column6", type datetime}, {"Column7", type any}, {"Column8", type datetime}, {"Column9", type any}, {"Column10", type any}, {"Column12", Int64.Type}}),
    GroupedRows = Table.Group(ChangedType, {"Column2", "Column3"}, {{"таб", each Table.Max( _, "Column8" ), type record }}),
    Result = Table.FromRecords( GroupedRows[таб], type table [Column2=datetime, Column3=number, Column5=number, Column6=datetime, Column7=none, Column8=datetime, Column9=none, Column10=none, Column12=number] )
in
    Result
Вот горшок пустой, он предмет простой...
 
PooHkrd, buchlotnik, подскажите пожалуйста, это возможно реализовать при помощи команд в интерфейсе? Я понимаю, что нужно зайти в "Группировать по", там выбираю первые два столбца по которым будет сделана группировка и добавляю Column8 по максимальному значению.

После этого получается таблица только с 3-мя столбцами.
А нужно, чтобы были все.

Получился код:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Column2", type datetime}, {"Column3", Int64.Type}, {"Column5", Int64.Type}, {"Column6", type datetime}, {"Column7", type any}, {"Column8", type datetime}, {"Column9", type any}, {"Column10", type any}, {"Column12", Int64.Type}}),
    #"Сгруппированные строки" = Table.Group(#"Измененный тип", {"Column2", "Column3"}, {{"Column12", each List.Max([Column12]), type number}})
in
    #"Сгруппированные строки"
Изменено: ivanka - 06.12.2019 13:57:52
 
Цитата
ivanka написал:
подскажите пожалуйста, это возможно реализовать при помощи команд в интерфейсе
Частично, но самые главные преобразования прописываются только ручками.
Вот горшок пустой, он предмет простой...
 
Цитата
ivanka написал:
реализовать при помощи команд в интерфейсе
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Sorted Rows" = Table.Sort(Source,{{"Column12", Order.Descending}}),
    #"Grouped Rows" = Table.Group(#"Sorted Rows", {"Column2", "Column3"}, {{"a", each _, type table}}),
    #"Added Index" = Table.AddIndexColumn(#"Grouped Rows", "Индекс", 0, 1),
    #"Expanded {0}" = Table.ExpandTableColumn(#"Added Index", "a", {"Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column12"}, {"Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column12"}),
    #"Removed Duplicates" = Table.Distinct(#"Expanded {0}", {"Индекс"}),
    #"Removed Columns" = Table.RemoveColumns(#"Removed Duplicates",{"Индекс"})
in
    #"Removed Columns"
 
artyrH, buchlotnik, PooHkrd, господа, где вы так научились владеть "M"?
Я хочу разобраться! Но не получается даже найти описание и пример использования синтаксиса:
Код
Excel.Workbook (workbook, useHeaders, dalayTypes)
Что значит useHeaders и dalayTypes? Как использовать? Я трачу по часу, чтобы собрать крупицы.
Есть какой-то ресурс / курс на русском, где можно прямо поэтапно изучать?

Описание по типу:
Код
Excel.Workbook(workbook as binary, optional useHeaders as nullable logical, optional delayTypes as nullable logical) as table
или
https://docs.microsoft.com/ru-ru/powerquery-m/date-day

абсолютно непонятные!  
 
Цитата
ivanka написал:
где вы так научились владеть "M"?
В основном здесь.
Цитата
ivanka написал:
Excel.Workbook
Где хоть в одном из предложенных вам запросов используется данная функция?
Цитата
ivanka написал:
Есть какой-то ресурс / курс на русском, где можно прямо поэтапно изучать?
Вы находитесь на форуме этого самого ресурса. В Приемах в разделе Бизнес-анализ и не только целая куча примеров использования разных функций PQ. Николай сейчас добавляет в старые статьи варианты решения старых задач при помощи этого чудо инструмента. А еще у него есть книга для начинающих. Но там не очень много информации по языку М, в основном про методы решения тех или иных задач, и какими кнопками в PQ это решается. Есть еще ресурс с азами именно языка и синтаксиса, но к великому сожалению автор не стал развивать тему дальше.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Где хоть в одном из предложенных вам запросов используется данная функция?
У меня используется функция Excel.CurrentWorkbook(), я так понимаю, что она сестрица функции Excel.Workbook (), я их обе рассматривал подробнее.

Благодарю! Ознакомлюсь со всеми ссылками. Считаю, что кейсы с форума помогут обогатить вариации использования того, что уже знаешь. А если ничего не знаешь и смотришь код, то это всё равно, что на слух изучать иностранный язык, как фильме "13-й войн".

Книгу куплю 100%!
Изменено: ivanka - 10.12.2019 16:09:11
 
ivanka, научитесь для начала работать с кнопками интерфейса, поверьте, с их помощью можно решить 80% всех возникающих перед вами задач вообще не подозревая о том, что где-то под капотом есть какой-то код на языке М. Чтобы на PQ ездить совсем не обязательно знать язык. А вот если хочется чтобы работало побыстрее, или решить нестандартную задачу, или посоревноваться в "красоте кода" то придется лезть под капот и вникать в принципы работы.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
научитесь для начала работать с кнопками интерфейса,
Я уже сделал отчёт в Power BI. Умею считать меры, обрабатывать данные в PQ, соединять запросы в PP.
Но конкретно эта зада (выше) обострила понимание, что я не контролирую ситуацию и даже не понимаю что написано в решении.

artyrH, предложил решение при помощи кнопок в интерфейсе. Я смотрю код и не понимаю какие кнопки он нажимал. Хочу понимать код, пусть я не буду его писать руками, но нужно уметь его читать не вскипая.

Спасибо!
Изменено: ivanka - 10.12.2019 16:08:35
 
Цитата
где вы так научились владеть "M"? PooHkrd написал:
В основном здесь.
ага, потом меня много чему научил :)
Цитата
ivanka написал:
Я хочу разобраться!
а вы нажмите на ссылку, которую отметил на скрине, и просмотрите все посты PooHkrd, начиная с 2017 года и вникайте в решения.
Цитата
ivanka написал:
смотрю код и не понимаю какие кнопки он нажимал
1. получил таблицу
2. отсортировал от большего к меньшему
3. сгруппировал по двум столбцам с операцией все строки
4. добавил столбец с индексом
5. развернул таблицы. в столбце индекс видно в какой таблице было две строки, а в какой - одна
6. удалил в столбце индекс дубликаты и все.
Изменено: artyrH - 10.12.2019 16:27:49
 
Цитата
artyrH написал:
все посты  PooHkrd , начиная с 2017 года и вникайте в решения
Как закончите ;) , начинайте читать все посты Андрей VG, Максим Зеленский, Aleksei_Zhigulin. А когда совсем закабанеете и захочется чего-нибудь непонятного то приступайте к разбору кода от Андрей Лящук  :D
Вот горшок пустой, он предмет простой...
 
PooHkrd, благодарю!)
 
Всем привет!
Вопрос подобный, хочу удалить дубликаты в столбце, но при этом пустые значения не подлежат проверка на дубль и тут что то пошло не так)
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"рол", type text}, {"лор", type any}}),
    #"Замененное значение" = Table.ReplaceValue(#"Измененный тип",each [рол],each if [рол]<>null then Table.Distinct(#"Измененный тип",{"рол"}) else [рол],Replacer.ReplaceValue,{"рол"})
in
    #"Замененное значение"
 
adamm, вы показали бы в примере какой нужен итог. А то из описания ничего не понятно.
Вот горшок пустой, он предмет простой...
 
То есть функцию "Table.Distinct" нужно применить к тем ячейкам, которые не содержат null
 
Цитата
adamm написал:
к тем ячейкам, которые не содержат null
Ячейкам какого столбца? Рол? Всех кроме Лор?
Так надо?
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Grouped = Table.Group(Источник, {"рол"}, {{"таб", each _, type table }}),
    Added = Table.AddColumn(Grouped, "таб2", each if [рол] = null then [таб] else Table.Distinct( [таб] ) ),
    таб2 = Table.Combine( Added[таб2] )
in
    таб2
Изменено: PooHkrd - 23.11.2020 12:10:57
Вот горшок пустой, он предмет простой...
 
PooHkrd, спасибо все верно! Соединять не стоило, но я главное суть уловил!
Тут и сам нашёл решение, все не так сложно)
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Строки с примененным фильтром" = Table.SelectRows(Источник, each ([рол] <> null)),
    #"Удаленные дубликаты" = Table.Distinct(#"Строки с примененным фильтром", {"рол"}),
    вернулся=Источник,
    #"Строки с примененным фильтром1" = Table.SelectRows(вернулся, each ([рол] = null)),
    #"Добавленный запрос" = Table.Combine({#"Строки с примененным фильтром1", #"Удаленные дубликаты"})
in
    #"Добавленный запрос"
Изменено: adamm - 23.11.2020 12:50:03
 
можно через группировку, кому как удобнее
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Grouped = Table.Group(Источник, {"рол"}, {{"лор", each Table.SelectRows(_, each ([рол] = null))[[лор]] }}),
    #"Expanded {0}" = Table.ExpandTableColumn(Grouped, "лор", {"лор"}, {"лор.1"})
in
    #"Expanded {0}"
Страницы: 1
Наверх