Compartir a través de


Descripción del plegado con diagnósticos de consultas

Una de las razones más comunes para usar diagnósticos de consultas es comprender mejor qué operaciones son las que "delegó" Power Query para realizarse en el origen de datos backend, lo que también se conoce como "plegado". Si queremos consultar lo que se ha plegado, podemos ver cuál es la consulta (o consultas) "más específica" que se envía al origen de datos backend. Podemos examinar esto tanto para ODATA como para SQL.

La operación que se describió en el artículo sobre el Registro de diagnóstico hace esencialmente cuatro cosas:

  • Se conecta al origen de datos.
  • Toma la tabla de clientes.
  • Filtra el rol Id. de cliente a "Representante de ventas".
  • Agrupa por "País".

Dado que el conector ODATA no admite actualmente el plegado COUNT() al punto de conexión y dado que este punto de conexión también está limitado en sus operaciones, no esperamos que ese paso final se pliegue. Por otro lado, el filtrado es relativamente sencillo. Esto es exactamente lo que podemos observar de la consulta más específica emitida anteriormente:

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

Podemos ver que estamos filtrando la tabla para ContactTitle que es igual a "Representante de ventas", y solo se devuelven dos columnas: Id. de cliente y País. El país, por supuesto, es necesario para la operación de agrupación, que debe realizarse de forma local debido a que el punto de conexión de ODATA no realiza dicha operación de agrupación. Podemos concluir qué se pliega y qué no se pliega aquí.

De forma similar, si examinamos la consulta específica y final emitida en los diagnósticos de SQL, veremos algo ligeramente diferente:

    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]

Aquí podemos ver que Power Query crea una subselección en la que ContactTitle se filtra por "Representante de ventas", y luego agrupa por País en esta subselección. Todas nuestras operaciones se plegaron.

Con el diagnóstico de consultas, podemos examinar qué tipo de operaciones se plegaron; en el futuro, esperamos que esta funcionalidad sea más fácil de usar.