Общие сведения о свертке с помощью диагностики запросов

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

Операция, описанная в статье о диагностике записи, делает по сути четыре действия.

  • Подключение в источник данных
  • Захват таблицы клиента
  • Фильтрует роль идентификатора клиента на "Представитель по продажам"
  • Группы по "Страна"

Так как соединитель 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 с равным "Представитель по продажам", и мы возвращаем только два столбца- идентификатор клиента и страну. Страна, конечно, необходима для операции группировки, которая, так как она не выполняется конечной точкой 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 фильтруется по разделу "Представитель по продажам", а затем группирует по стране в этом подселекторе. Все наши операции сложены.

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