Страницы: 1
RSS
PQ долгое выполнение процедуры удаления дубликатов при консолидации
 
Приветствую всех. Прошу подсказать вот в каком вопросе.

Собираю несколько файлов в 1, чтобы построить общую модель. Каждый файл-  отдельный город с данными.
После того, как все собрано в 1 таблицу- хочу отдельно создать справочник по городам, для этого поступаю так:

Код
let
    Sourсe= qОбщаяТаблица,
    DelOtherCol = Table.SelectColumns(Source ,{"Город"}),
    Unique = Table.Distinct(DelOtherCol)
in
Unique


То есть, ссылаюсь в новом запросе на собранную общую таблицу, оставляю только столбец с городами и удаляю дубликаты.
Проблема в том, что если в исходной таблице под 500 тыс строк, то операция затягивается на десятки минут, так как ссылка на общую таблицу заставляет собирать данные из всех файлов заново.

Как можно ускорить эту процедуру?
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
а почему не
Код
qОбщаяТаблица=Table.Buffer(ваш_код) //забуферить, чтобы не было повторного пересчета

Unique =List.Distinct(qОбщаяТаблица[Город]) //на списках быстрее чем на таблицах
?
Изменено: buchlotnik - 21.09.2020 16:00:16
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik, Спасибо Вам, за предложение и комментарии. Попробовал сделать по Вашему способу  так:
Код
= List.Buffer(List.Distinct(qResult[Город]))


Но все равно начинает собирать по всем файлам... Но сработало быстрее чем раньше в 2 раза... Но минут 5 все равно заняло
Изменено: Dyroff - 21.09.2020 16:11:22
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, в каком формате исходники? Есть ли техническая возможность перейти на текстовый вариант?
Изменено: PooHkrd - 21.09.2020 16:16:44
Вот горшок пустой, он предмет простой...
 
PooHkrd, Приветствую. Исходники в XLSX Выгружаются их 1с. В теории можно попробовать сохранять в txt
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, настоятельно рекомендую. Мне такое мерпориятие ускорило обновление файла на 6 кк строк с 7-10 мин. до 3-5 мин. Как-то так.
Вот горшок пустой, он предмет простой...
 
PooHkrd, Спасибо. Конечно придется все переделать, но оно того стоит).
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, это еще не все. Я правильно понял что у вас есть запрос, который собирает данные в таблицу фактов, после чего еще один запрос обращается к нему же и из столбца город создается справочник для модели данных?
Если так, то лучше всего сделать такую схему:
1 Сбор данных - Последний шаг обернуть в Table.Buffer и результат никуда не выгружать
2. запрос факт - обращается к сбору данных и без изменений льет таблицу в модель данных
3. запрос справочник - обращается к сбору данных, потом дистинкт и результат льется в модель данных без изменений
В такой схеме результат 1 запроса сохраняется в оперативке и для расчета двух других не требуется 2 раза обращаться к исходникам.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Я правильно понял что у вас есть запрос, который собирает данные в таблицу фактов, после чего еще один запрос обращается к нему же и из столбца город создается справочник для модели данных?
Совершенно верно.
Спасибо, за ценные советы, пойду сейчас попробую.
Только вот не совсем понял первый пункт, а именно
Цитата
PooHkrd написал:
и результат никуда не выгружать

Это у меня таблица фактов, у меня она в модель данных выгружается потом

В общем построено так:

Запрос 1- написан для одной книги в которой обрабатываются данные. Потом на основании эта запроса сделана функция (сам запрос- только подключение)
Запрос 2- Результирующий запрос. В котором я получаю консолидацией все файлы и для каждого вызываю функцию созданную на основе первого запроса. Итог, таблица созданная сбором данных с разных файлов.(выгружаю в модель)
Запрос 3 - справочник, который обращается к таблице полученной в запросе 2, удаляю Все столбцы кроме города, а потом удаляю в нем дубликаты. Как итог уникальные города(также выгружаю в модель)
Изменено: Dyroff - 21.09.2020 16:59:54
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
Dyroff написал:
Это у меня таблица фактов
В модель в качестве таблицы фактов нужно выгружать запрос №2 из моего описания выше, который ссылается на запрос 1.
Если помещать в оперативку результат запроса, который выгружается в модель, то там кэширование как-то криво срабатывает и для справочника произойдет повторное считывание, если же сделать промежуточный запрос, а в модель выгружать другой, который ссылается на первый, то все сработает как надо. По крайней мере такая фигня у меня была раньше в 2016. Может сейчас и пофиксили чего, но я во избежание все равно делаю так.
Вот горшок пустой, он предмет простой...
 
PooHkrd,  Ага, понял. Спасибо!!
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
Страницы: 1
Наверх