Страницы: 1
RSS
Отбор последнего совпадающего значения при объединении данных в Power Query
 
Добрый день, уважаемые форумчане.
Пытался найти аналог ИНДЕКС+ПОИСПОЗ excel, в PQ.
Нашел способ это можно сделать, через объединить, но заметил странность (продемонстрирована на Листе 2 [строка 2-3], если в правой таблице повторяется значение, то он дублирует значение левой строки и добавляет 2 или последующее значение правой).
Использовал JoinKind.LeftOuter, для добавления данных к левой таблице из правой.
Как можно оставить оставить только последнее найденной значений правой таблицы?
На Листе 3, удалось достичь желаемого эффекта (на 100 тысяч строк у меня обновилось за 16,5 сек., при повторных обновлениях результат 9-10 сек.)
но может это можно сделать как-то более правильно.
-------
Можете подсказать отличия Table.NestedJoin и Table.Join?, по справочнику не совсем понятны их различия.

Заранее спасибо.
Изменено: ymal_qeb - 12.02.2019 15:09:20
 
Цитата
ymal_qeb написал:
Можете подсказать отличия Table.NestedJoin и Table.Join?, по справочнику не совсем понятны их различия.
Для примера объясню про вариант левый внешний (он же JoinKind.LeftOuter) как самый часто используемый.
Table.Join прилепляет к каждой строке таблицы все столбцы из второй табилцы по соответствию ключевых полей, если одной строке Таблицы1 соответствует несколько из таблицы2, то они размножаются по количеству совпадающих значений.
Table.NestedJoin - создает столбец в таблице 1, в каждую ячейку которого помещает те строки таблицы2, которые соответствуют по ключевым полям. Далее вы уже можете делать с этими таблицами что вам заблагорассудится - в том числе и оставить только какую то одну строку, если их там больше чем одна.
Правда есть нюанс, на больших массивах если вы будете использовать Table.NestedJoin, после чего пытаться что-то делать с полученными в столбцах таблицами, то скорее всего будет сильно тупить. Чтобы ускорить всякие умные дядьки рекомендуют использовать функцию Table.AddKey.
Цитата
ymal_qeb написал:
последнее найденной значений правой таблицы?
последнее это строка с максимальной датой?
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
последнее найденной значений правой таблицы?
Да.
Изменено: ymal_qeb - 12.02.2019 16:32:30
 
ymal_qeb, зачем обманываете? У вас данные берутся из таблицы где нет дат. Сделал вариант с выбором по максимальному индексу. Думаю разберетесь. Вставьте код в запрос "Таблица1"
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    #"Сгруппированные строки" = Table.Group(Источник, {"Документ"}, {{"Количество", each Table.Max(_,"№"), type record}}),
    #"Развернутый элемент Количество" = Table.ExpandRecordColumn(#"Сгруппированные строки", "Количество", {"№"}, {"№"}),
    source1= Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(source1,{{"Дата документа", type date}, {"Номер документа", Int64.Type}, {"Тип документа", type text}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Измененный тип", "Пользовательская", each Text.From([Тип документа])&" № "&Text.From([Номер документа])&" от "&Text.Start(Text.From([Дата документа]), 10)),
    #"Слияние таблицы" = Table.Join(#"Добавлен пользовательский объект", {"Пользовательская"}, #"Развернутый элемент Количество", {"Документ"}, JoinKind.LeftOuter),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Слияние таблицы",{"Пользовательская", "Документ"})
in
    #"Удаленные столбцы"
Вот горшок пустой, он предмет простой...
 
PooHkrd, простите (просто в исходнике есть дата и исходя из нее формируется номер), машинально ответил.
если как в примере но по максимальному значению второй таблицы колонки №
----
подскажите, а Table.Join, тоже начинает тупить на больших массивах?
Изменено: ymal_qeb - 12.02.2019 16:32:07
 
ymal_qeb, если код составлен грамотно, то нет. Тупит чаще всего пользователь. Когда не знает каких-то особенностей инструмента, которым пользуется.
Вот горшок пустой, он предмет простой...
 
PooHkrd, спасибо.
Ваш запрос обновляется гораздо быстрее - при первом 7,5 при повторном 4-5 сек.
Изменено: ymal_qeb - 12.02.2019 16:41:53
Страницы: 1
Наверх