Страницы: 1
RSS
PQ Merge queries (Слияние запросов) проблема, при слиянии запросов происходит ошибка... данные в первой таблице меняются местами
 
Добрый день!
Есть две таблицы 1 и 2 в которых содержится наименование объектов, название, суммы.
Нужно сравнить эти две таблицы между собой, например, чтобы увидеть изменение цены...В связи с тем, что для одного объекта могут быть повторяющиеся элементы, сделано следующее: сортировка столбца Item Name, сортировка столбца Total amount (об большей суммы к меньшей); группировка по Location, PO Number и внутри группы добавлены индексы (замечательные ребята на этом форуме подсказали решение). Далее создаю новый запрос, где делаю Merge таблиц Full outer : Location, PO Number, Item Name, Index)
После разворачивания у одинакового элемента в Таблице 1 меняются между собой индексы, те. максимальная сумма становится с индексом 2, а должна была остаться с 1
Прошу подсказать, что я сделан не так... и как исправить данную ошибку.
Опыт и практика - великое дело! Век живи, Век учись!
 
Доброе время суток.
Похоже на глюк. Завернул в Table.Buffer - отработало как надо. Сам кнопочным связыванием не пользуюсь - Table.Join в этом случае работает без проблем.
P. S. Странно вы как-то данные объединяете - можно не только на этом глюк словить, но и на порядке данных.
 
Добрый день!

у меня вот так получилось
 
QUOTE]Андрей VG написал:
P. S. Странно вы как-то данные объединяете - можно не только на этом глюк словить, но и на порядке данных.[/QUOTE]
а почему странно? да, делаю по кнопочному варианту... так как не супер пользователь в PQ. а какой более верный алгоритм, посоветуйте.
Опыт и практика - великое дело! Век живи, Век учись!
 
Цитата
sanych09 написал:
так как не супер пользователь в PQ
Суть вопроса не в уровне вашей квалификации Power Query, а в соединении данных двух таблиц на порядке следования по убыванию сумм, при равных Location, PO Number, Item Name. Тут один совет - иметь уникальный первичный ключ для каждой записи. Вот по нему и соединять. Допустим во второй таблице не будет для cw vo services суммы 151870, тогда сумма из перовой таблицы 159463 соединится с 41536. Или в процессе времени при неравной скорости уменьшения у вас они местами поменяются. Фактически соединение по порядку величины сумм - не лучший вариант.
 
Anton555, спасибо за вариант. но он не работает... алгоритм не тот. я добавил еще один дубликат с другой ценой... и он не вывелся в результатах

Вариант, который привел Андрей VG, код слияния точно такой же как и у меня нет функции Table.Buffer. нужно с ней еще ознакомиться
Опыт и практика - великое дело! Век живи, Век учись!
 
Андрей VG, я Вас понял. у меня есть только одно уникальное значение Location, PO и Item Name... просто если бы не было одинаковых дублирующихся названий Item все было бы гораздо проще. Сортировку по суммам пришлось делать (необходимость появилась) так как оказалось, в некоторых позициях были суммы меньше нуля. Это позвонило хоть как-то приблизить сравнение. Первый раз когда сдала увидел что 151870 сопоставилось с -14568...
все делали я в посте не описывал, главное что я понял - это реально какой-то глюк
в предыдущем посте я рассматривал этот вопрос сравнения таблиц Power Query - Сравнение двух таблиц с дубликатами . но вот случайно только сегодня заметил, что есть проблема, поэтому и создал новый пост
Изменено: sanych09 - 02.11.2018 16:39:56
Опыт и практика - великое дело! Век живи, Век учись!
 
Цитата
sanych09 написал:
это реально какой-то глюк
Table.Buffer на боевых данных помог?
 
Андрей VG, спасибо! помогло. выгрузилось ~67k строк... и заняло около 7 минут . до этого занимало около 1 минуты или меньше
переустановлю офис... посмотрю еще раз
Опыт и практика - великое дело! Век живи, Век учись!
 
Вообще сортировку надо проводить после группировки, тогда всё отработает как надо. Как минимум левую таблицу есть смысл переделать так:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Location", type text}, {"PO Number", type text}, {"Item Name", type text}, {"Total Amount", type number}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Location", "PO Number", "Item Name"}, {{"Group", each Table.AddIndexColumn(Table.Sort(_,{{"Item Name", Order.Ascending}, {"Total Amount", Order.Descending}}),"Index",1,1), type table}}),
    #"Expanded Group" = Table.ExpandTableColumn(#"Grouped Rows", "Group", {"Total Amount", "Index"}, {"Total Amount", "Index"})
in
    #"Expanded Group"

Проблема в том, что Table.Group не гарантирует сохранность порядка строк при группировке, также как и Table.NestedJoin. Об этом написано во встроенной справке к функции (из онлайн-версии почему-то убрали):

В предварительном просмотре одной таблицы мы видим все ОК, но при расчете третьего запроса (Merge) включается стриминговая семантика, и последовательность  выполнения запросов может быть другой совсем.
F1 творит чудеса
 
Максим Зеленский, спасибо большое за подсказку. а я то думал это что-то не то с PQ
Сейчас попробую поставить сортировку после группировки в двух таблицах и проверить результат. я как-то про внутреннюю справку и забыл. и правда "F1 творит чудеса"
Опыт и практика - великое дело! Век живи, Век учись!
Страницы: 1
Наверх