Partager via


Comprendre le pliage avec Query Diagnostics

L’une des raisons les plus courantes d’utiliser les diagnostics de requête consiste à mieux comprendre les opérations qui ont été « propagées » par Power Query pour être effectuées par la source de données back-end, un phénomène également connu sous le nom de « pliage de requête ». Si nous voulons voir ce qui est plié, nous pouvons examiner la requête « la plus spécifique », ou les requêtes, qui sont envoyées à la source de données principale. Nous pouvons examiner cela pour ODATA et SQL.

L’opération décrite dans l’article sur l’enregistrement des diagnostics fait essentiellement quatre choses :

  • Se connecte à la source de données
  • Récupère la table client
  • Filtre le rôle ID du client sur « Représentant des ventes »
  • Groupes par 'pays'

Étant donné que le connecteur ODATA ne prend actuellement pas en charge le pliage COUNT() vers le point de terminaison, et étant donné que ce point de terminaison est quelque peu limité dans ses opérations, nous ne nous attendons pas à ce que cette dernière étape se plie. En revanche, le filtrage est relativement trivial. C’est exactement ce que nous voyons si nous examinons la requête la plus spécifique émise ci-dessus :

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

Nous pouvons voir que nous filtrons la table pour ContactTitle égal à « Sales Representative », et nous ne renvoyons que deux colonnes --Customer ID et Country. Le pays, bien entendu, est nécessaire pour l’opération de regroupement, qui, dans la mesure où elle n’est pas effectuée par le point de terminaison ODATA, doit être effectuée localement. Par conséquent, nous pouvons conclure ce qui se plie et ce qui ne se plie pas ici.

De même, si nous examinons la requête spécifique et finale émise dans les diagnostics SQL, nous voyons quelque chose de légèrement différent :

    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]

Ici, nous pouvons voir que Power Query crée une sous-sélection où ContactTitle est filtré sur « Représentant des ventes », puis regroupe par pays sur cette sous-sélection. Toutes nos opérations ont cessé.

À l’aide des diagnostics de requête, nous pouvons examiner le type d’opérations pliées à l’avenir, nous espérons rendre cette fonctionnalité plus facile à utiliser.