Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Оптимизация работы запросов PowerQuery (ссылающиеся на внутренние таблицы и внешние файлы) в книге Excel
 
Здравствуйте!

Подскажите как лучше решить (оптимизировать) данную проблему:  
Как сделать так, чтобы при изменении информации во внутреннем запросе (ссылка на таблицу в этой же книге «Запрос Income») не перегружался внешний запрос (ссылка на папка, которая лежит рядом с книгой «Запрос Expense»)?

Имеется следующая структура сводного бюджета, построенная на запросах:
Запрос Expense - берет информацию из файлов в папке. Файлы объемом около 9 мб. Запрос настроен как "Только подключение".
Запрос Income - берет информацию из таблицы в книге со сводным бюджетом. Запрос настроен как "Только подключение".
Запрос TotalPlan - соединяет информацию из запроса Expense (внешнего) и Income (внутреннего). На основании него и строиться сводная таблица со сводным бюджетом.

При изменении в таблице на внутреннем запросе (Income) и обновлении запроса (TotalPlan), обновляться все запросы (не только внутренний (Income), но и внешний (Expense)). Обновление занимает определенное время, что не удобно.

Надеюсь, понятно описал суть проблемы
Запросы2.JPG (23.71 КБ)
Запросы.JPG (96.7 КБ)
 
интересный вопрос, получается если на основании запросов построена сводная таблица в файле "Текущая книга", то незначительное изменение в файле "Текущая книга", например в Income, приводит к необходимости обновить все внешние запросы к в внешним файлам.
Верно?
 
9 Мб?! И чего там обновлять? Это ж несколько секунд.
Вообще говоря в Экселе PQ не поддерживает итеративного обновления источника.
Но раз вы выгружаете результат запроса TotalPlan и на лист и в модель, то можно сам запрос Expence написать таким образом, чтобы производилась проверка не появилось ли новых файлов в папке, и если нет, то брать данные из предыдущей выгрузки с листа, а не собирать её из файлов в папке.
Возможно это даст вам желаемое ускорение.
Цитата
Kanev75 написал:
Верно?
Не верно.
Тут нужно разделять, если вы обновляете сводную, которая подключена к модели данных, то при обновлении будут обновлены все таблицы в ней. При этом можно не обновлять всю сводную, а открыть панель с запросами и обновить только нужный вам в данный момент запрос.
Если вы обновляете сводную, которая просто использует запрос PQ как подключение к внешнему источнику, то при обновлении сводной будут запрошены только те данные, которые относятся к этому конкретному запросу.
У ТС в модель данных при помощи PQ загружено 2 таблицы TotalPlan и Class, значит при обновлении сводной будет запрашиваться обновление только этих двух запросов.
Изменено: PooHkrd - 3 Июл 2020 13:19:09
Вот горшок пустой, он предмет простой...
 
Цитата
Kanev75 написал: ... незначительное изменение в файле "Текущая книга", например в Income, приводит к необходимости обновить все внешние запросы к в внешним файлам.Верно?
Да, верно.
При изменении одной цифры в таблице, на основании которой строиться Запрос Income. Обновляются ВСЕ запросы (внутренние и внешние), и это замедляет работу с файлом.
Одно обновление все запросов длиться около 20-30 секунд
 
Vorozhbeev, для 9 Мб это очень долго.
Для оптимизации нужно разбирать именно ваши запросы, они могут быть построены не оптимально. Тут картинкой не обойдешься.
Изменено: PooHkrd - 3 Июл 2020 13:22:11
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
сам запрос Expence написать таким образом, чтобы производилась проверка не появилось ли новых файлов в папке, и если нет, то брать данные из предыдущей выгрузки с листа,
Подскажите пожалуйста что последовательно мне нужно сделать, чтобы это реализовать?
 
Vorozhbeev, для начала можно покопаться в поиске форума по такому вот буквосочетанию self referencing tables. Из этого вы поймете, что оказывается запросом можно вытянуть данные из той же самой таблицы, которая является результатом его же работы. Далее самый простой способ это сохранить в модели и таблице, которая является результатом запроса имена файлов, из которых вытягиваются данные, потом обращаемся к таблице, и сравниваем список источников, с содержимым папки, если разницы не наблюдаем, то забираем уже готовые данные из таблицы и к ним прибавляем по известному вам алгоритму данные из таблицы Income. Если появилось что-то новое то забираем новые данные из папки, и уже их женим с данными из Income.
НО, вообще говоря такой способ выгрузки результатов из запроса: сразу и в модель и в таблицу - он не очень правильный. Такая организация чревата всякими глюками и непонятностями в самый неожиданный момент. Лучше выгружать в какое-то одно место.
Вот горшок пустой, он предмет простой...
 
И для того, чтобы поблагодарить, нужно было копировать целое предыдущее сообщение?
Цитата - не бездумная копия
[МОДЕРАТОР]

Спасибо
Страницы: 1
Читают тему (гостей: 1)
Наверх