Разберитесь в свертывании запросов с помощью средства "Диагностика запросов"

Одна из наиболее распространённых причин использования диагностики запросов — лучше понять, какие операции Power Query передаёт базовому источнику данных для выполнения. Этот процесс также называется свёртыванием. Чтобы узнать, какие операции сворачиваются, просмотрите наиболее детализированный запрос или запросы, которые Power Query отправляет в серверный источник данных. Этот процесс можно проверить как для ODATA, так и для SQL.

Операция, описанная в Запись диагностики запросов в Power BI, выполняет четыре шага.

  • Подключается к источнику данных
  • Извлекает таблицу клиентов
  • Фильтрует роль идентификатора клиента в Sales Representative
  • Группировать по Country

Так как соединитель ODATA в настоящее время не поддерживает свертывание COUNT() в конечную точку, и так как эта конечная точка ограничена в своих операциях, мы не ожидаем, что окончательный шаг будет свернут. С другой стороны, фильтрация относительно тривиальная. Это именно то, что мы видим, если посмотрим на самый конкретный отправляемый запрос:

Request:
GET https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry HTTP/1.1

Response:
https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry
HTTP/1.1 200 OK

Мы видим, что фильтруем таблицу по ContactTitle, которое равно Sales Representative, и возвращаем только два столбца: Customer ID и Country. Country требуется для операции группировки, которая должна выполняться локально, так как она не выполняется конечной точкой ODATA. Мы можем заключить, что здесь складывается и что не складывается.

Аналогичным образом, если мы рассмотрим конкретный и окончательный запрос, создаваемый в диагностике SQL, мы видим что-то немного другое:

    count(1) as [Count]
from 
(
    select [_].[Country]
    from [dbo].[Customers] as [_]
    where [_].[ContactTitle] = 'Sales Representative' and [_].[ContactTitle] is not null
) as [rows]
group by [Country]

Вы можете видеть, что Power Query создаёт подвыборку, в которой ContactTitle отфильтровано до Sales Representative, а затем в этой подвыборке выполняется группировка по Country. Все наши операции закрыты.

С помощью диагностики запросов можно посмотреть, какие операции были свёрнуты. В будущем мы надеемся упростить использование этой возможности.