Страницы: 1
RSS
PQ Удаление дубликатов с условием
 
Помогите удалить с помощью PQ дубликаты в столбцах "Город"-"Улица"-"Дом"-"Код объекта"  для разных сумм:
СуммаГородУлицаДомкод объекта
3400СПбЭнгельса11178-00060
4500СПбЭнгельса11178-00060
3400СПбЭнгельса11178-02090
4500СПбЭнгельса11178-02090
т.е. удалить 2 и 3 строчку таблицы.

Была похожая тема, понимаю что нужно делать через группировку, не понимаю как добавить условие.
Изменено: TankSpb - 02.10.2020 14:19:15
 
А почему именно 2 и 3, как определить, что удалены должны быть они?

Так-то просто выделить нужные столбцы и нажать "удалить дубликаты", PQ удалит чо попало.
 
Должны остаться уникальные значения, чтобы не потерялись данные. Это возможно при удалении или строк 2 и 3 или 1 и 4. Если удалить 1 и 2 потеряем код объекта, Если 1 и 3 то Сумму.
 
Ну тогда как я написала, выделить столбцы, в которых важны уникальные данные и удалить дубликаты, и даже без PQ тем же способом.
 
Как я понимаю нужно скрестить две группировки "Город"-"Улица"-"Дом"-"Код объекта" и "Город"-"Улица"-"Дом"-"Сумма"  
 
TankSpb, имею смутное сомнение что вам нужно не сколько удалить дубли, сколько правильно развернуть столбцы на предыдущих этапах запроса. Можно посмотреть каким таким образом вы получили такие дубликаты? Т.е. что вы к чему приджойнили, и что на самом деле нужно было получить на выходе?
Изменено: PooHkrd - 02.10.2020 17:28:49
Вот горшок пустой, он предмет простой...
 
PooHkrd, действительно есть 2 объекта по одному адресу с разными кодами и 2 суммы под эти объекты, но прямой связи между ними нет, я это понимаю и на выходе нужно на один код повесить одну сумму на другой - вторую.  
Изменено: TankSpb - 02.10.2020 17:42:46
 
Цитата
TankSpb написал:
один код повесить одну сумму на другой - вторую
Т.е. всегда будет соблюдаться что количество сумм совпадает с количеством кодов? И при этом нет разницы к какому коду прилипнет какая сумма?
Вот горшок пустой, он предмет простой...
 
PooHkrd, в данном случае - Да!  
 
TankSpb,так как вы определяете, что на объект с кодом 78-00060 надо повесить сумму 3400? И почему на второй объект сумма должна быть 4500? Почему именно так? или вообще без разницы, главное, чтобы разные были?
Цитата
TankSpb написал:
2 объекта по одному адресу с разными кодами и 2 суммы под эти объекты
в примере покажите это. Скорее всего там кроется решение
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
вообще без разницы, главное, чтобы разные были
Именно так.
 
TankSpb, как-то так:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Запрос1"]}[Content],
    GroupedRows = Table.Group(Source, {"Город", "Улица", "Дом", "код объекта"}, {{"Сумма", each List.Sort([Сумма]), type list}}),
    AddedIndex = Table.AddIndexColumn(GroupedRows, "Индекс", 0, 1),
    MergedColumns = Table.CombineColumns(AddedIndex,{"Сумма", "Индекс"},(x)=>x{0}{x{1}}?,"Сумма")
in
    MergedColumns

Но лучше бы все таки посмотреть на исходники и правильно их сразу соединить, чем сначала соединять, а потом уже распределять суммы.
Изменено: PooHkrd - 02.10.2020 18:03:21
Вот горшок пустой, он предмет простой...
 
PooHkrd, Если нет задвоений то теряется сумма (
 
TankSpb, не по этому, это из-за добавления нового адреса. Сначала группируетесь по адресу, а к сгруппированным таблицам уже применяйте мой алгоритм.
Сразу бы составили нормальный пример. Сейчас извините, переделать уже не успеваю.
Вот горшок пустой, он предмет простой...
 
PooHkrd, Понятно! Спасибо! Мне и такой пример страшно отправлять с работы, сижу - оглядываюсь)))
 
вот так проще, имхо:
вся суть в 3 шаге, второе число (2) это количество объектов.
Код
// Запрос1
let
    Источник = Excel.CurrentWorkbook(){[Name="Запрос1"]}[Content],
    #"Sorted Rows" = Table.Sort(Источник,{{"код объекта", Order.Ascending}, {"Сумма", Order.Ascending}}),
    #"Removed Alternate Rows" = Table.AlternateRows(#"Sorted Rows",1,2,1)
in
    #"Removed Alternate Rows"

а, да, если нет задвоений, такое тоже не работает
Изменено: Максим Зеленский - 02.10.2020 18:34:10
F1 творит чудеса
 
С "без повторов": модифицировал код PooHkrd
Код
// Запрос1
let
    Source = Excel.CurrentWorkbook(){[Name="Запрос1"]}[Content],
    GroupedRows = Table.Group(Source, {"Город", "Улица", "Дом", "код объекта"}, {{"Сумма", each List.Sort([Сумма]), type list}, {"count", each Table.RowCount(_), Int64.Type}}),
    #"Grouped Rows" = Table.Group(GroupedRows, {"count"}, {{"t", each Table.CombineColumns(Table.AddIndexColumn(_,"Индекс"),{"Сумма", "Индекс"},(x)=>x{0}{x{1}},"Сумма"), type table [Город=text, Улица=text, Дом=number, код объекта=text, count=number,Сумма=number]}}),
    #"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"count"}),
    #"Expanded {0}" = Table.ExpandTableColumn(#"Removed Columns", "t", {"Город", "Улица", "Дом", "код объекта", "Сумма"}, {"Город", "Улица", "Дом", "код объекта", "Сумма"})
in
    #"Expanded {0}"
F1 творит чудеса
 
Максим Зеленский, большое Вам спасибо!
 
Цитата
Максим Зеленский написал:
С "без повторов": модифицировал код  PooHkrd
Прошу прощения, но последний код тоже не работает :( "без повторов" - правильно отображается только первая запись, для остальных в поле Сумма - генерится ошибка.


ГородУлицаДомкод объектаСумма
СПбЭнгельса11178-000603400
СПбЭнгельса11178-020904500
СПбЭнгельса1078-02080555
СПбЭнгельса1578-02070Error
 
Цитата
TankSpb написал:
для остальных в поле Сумма - генерится ошибка.
Вы не стесняйтесь, заносите примеры.
Вот горшок пустой, он предмет простой...
 
Сделайте наконец пример с реальной структурой данных. Кто там сколько раз повторяется. Иначе нет смысла в это играть
F1 творит чудеса
 
Максим Зеленский, PooHkrd, Прошу прощения! Добавил.
 
TankSpb, вот так работает без ошибок:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Запрос1"]}[Content],
    GroupedRows = Table.Group(Source, {"Город", "Улица", "Дом", "Полный адрес"}, {{"tab", each 
    let GroupedRows = Table.Group(_, {"код объекта"}, {{"Сумма", each List.Sort([Сумма]), type list}}),
        AddedIndex = Table.AddIndexColumn(GroupedRows, "Индекс", 0, 1),
        MergedColumns = Table.CombineColumns(AddedIndex,{"Сумма", "Индекс"},(x)=>x{0}{x{1}}?,"Сумма")
    in MergedColumns, type table}}),
    Expanded = Table.ExpandTableColumn(GroupedRows, "tab", {"код объекта", "Сумма"}, {"код объекта", "Сумма"})
in
    Expanded

НО, в вашем последнем примере нарушено ваше же условие:
Цитата
PooHkrd написал:
Т.е. всегда будет соблюдаться что количество сумм совпадает с количеством кодов?
Плюс появился полный адрес. Плюс появились дубли по кодам. Поэтому 4500 потерялось.
В общем как в анекдоте:
"Не Волгу, а Запорожец, не в преферанс, а в домино, и не выиграл, а проиграл".
Чо делать-то теперь будем?  :D
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
вот так работает без ошибок:
Все прекрасно работает! Большое спасибо! Полный адрес это с предыдущего шага, привязан к коду объекта, я его отдельно подтяну.
Страницы: 1
Наверх