Вопрос или проблема
Я пытаюсь использовать запрос на получение данных для извлечения информации из другого запроса. Похоже, что есть несколько способов сделать это. Я вижу два способа сделать это из этого вопроса. Я также вижу это в своих собственных таблицах. В своей таблице, похоже, я имею:
Source = Excel.CurrentWorkbook(){[Name="Project_List"]}[Content],
В других запросах я имею:
Source = Project_List,
Есть ли преимущество у одного метода перед другим?
В конечном итоге, чего я надеюсь добиться, так это того, чтобы запросить данные один раз через сеть, поместить их в таблицу A, а затем в последующих запросах продолжать ссылаться на таблицу A и не извлекать данные по сети для последующих запросов.
Я заметил, что когда я создавал свой последний запрос, используя Source = Project_List,
, на каждом этапе последующего запроса он фактически перезагружал все файлы, которые загружает запрос Project_List.
Это просто часть процесса создания? Или если у меня есть один запрос A, который загружает данные по сети, и 5 последующих запросов, которые ссылаются на запрос A, будет ли Power Query / Excel читать данные по сети один раз или пять раз?
Каков правильный способ в Power Query ссылаться на существующий запрос и сократить извлечение данных через сеть?
Power Query всегда будет потоково получать данные из источника – смотрите здесь для более полного понимания.
https://www.youtube.com/watch?v=AIvneMAE50o
Единственный способ обойти это – использовать Table.Buffer или List.Buffer для временного кэширования данных.
Для этой строки, тогда, предположительно, у вас есть другой запрос с именем Project_List, который, в свою очередь, получает ваши данные из книги?
Source = Project_List,
Ответ или решение
Для использования Power Query в Excel или Power BI для ссылок на другие запросы существует несколько подходов. Рассмотрим различные методы обращения к запросам и их преимущества, а также способы оптимизации загрузки данных для уменьшения обращений к сети.
Способы обращения к другим запросам
-
Прямое обращение к запросу:
Source = Project_List
Этот способ предполагает, что вы обращаетесь к уже созданному запросу с именем
Project_List
, который будет возвращать данные. Это позволяет организовать код более ясно, поскольку вы можете использовать названия запросов напрямую, теоретически улучшая читаемость. -
Обращение к содержимому ячейки в таблице:
Source = Excel.CurrentWorkbook(){[Name="Project_List"]}[Content]
В этом случае вы обращаетесь к данным, которые находятся в определенной ячейке в Excel, используя названия таблиц. Это может быть полезно для получения данных, динамически изменяемых в вашей книге Excel, но добавляет больше сложности в код.
Преимущества и недостатки
-
Прямое обращение к запросу:
- Преимущества: Более простое и интуитивно понятное. Код легче читать и поддерживать.
- Недостатки: Если
Project_List
изменится или будет удален, могут возникнуть ошибки.
-
Обращение к содержимому ячейки:
- Преимущества: Можно динамически ссылаться на данные, что может быть полезно в некоторых случаях.
- Недостатки: Увеличивает следовые затраты и усложняет код.
Эффективное управление загрузкой данных
Чтобы эффективно управлять загрузкой данных и избежать повторных обращений к источнику:
-
Используйте
Table.Buffer
илиList.Buffer
:
Использование этих функций позволяет временно кэшировать данные. Это означает, что данные будут загружены из источника только один раз. Например:CachedProjectList = Table.Buffer(Project_List)
После этого вы можете ссылаться на
CachedProjectList
в своих последующих запросах, что значительно снижает количество обращений к сети. -
Разделите запросы:
Если вам нужно сделать несколько манипуляций с данными, рассмотрите возможность разбивания запросов на отдельные шаги. Создание промежуточных таблиц, которые вы сможете кэшировать, может помочь в облегчении последующих операций. -
Заблаговременная агрегация:
Если возможно, проводите агрегацию данных на уровне запроса, чтобы уменьшить объем передаваемых данных.
Заключение
Обращение к существующим запросам в Power Query может быть выполнено несколькими способами, и каждый из них имеет свои сильные и слабые стороны. Прямое обращение к другим запросам может оказаться более простым и понятным, однако для оптимизации загрузки данных рекомендуется использовать кэширование с помощью Table.Buffer
или List.Buffer
. Это окажет положительное влияние на производительность вашего решения, снижая нагрузку на сеть и улучшая общее время отклика.