Condividi tramite


Comprendere l'ottimizzazione con Diagnostica delle query

Uno dei motivi più comuni per usare Diagnostica query consiste nell'avere una migliore comprensione delle operazioni che Power Query ha delegato per l'esecuzione all'origine di dati di back-end, anche nota come "folding". Se si vuole vedere cosa è stato piegato, è possibile esaminare qual è la query "più specifica" o le query che vengono inviate all'origine dati back-end. È possibile esaminare questo aspetto sia per ODATA che per SQL.

L'operazione descritta nell'articolo sulla registrazione diagnostica esegue essenzialmente quattro operazioni:

  • Si connette alla fonte di dati
  • Recupera la tabella dei clienti
  • Filtra il ruolo ID cliente in "Rappresentante vendite"
  • Gruppi per paese

Poiché il connettore ODATA attualmente non supporta l'invio della funzione COUNT() all'endpoint e poiché questo endpoint è leggermente limitato nelle sue operazioni, non ci aspettiamo che il passaggio finale venga eseguito. D'altra parte, il filtraggio è relativamente semplice. Questo è esattamente ciò che viene visualizzato se si esamina la query più specifica generata in precedenza:

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

È possibile osservare che la tabella viene filtrata per ContactTitle che equivale a "Rappresentante commerciale" e vengono restituite solo due colonne: ID cliente e Paese. Il paese, naturalmente, è necessario per l'operazione di raggruppamento, che poiché non viene eseguito dall'endpoint ODATA deve essere eseguito localmente. Possiamo concludere ciò che si piega e ciò che non si piega qui.

Analogamente, se si esamina la query specifica e finale generata nella diagnostica SQL, viene visualizzato un aspetto leggermente diverso:

    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]

In questo caso, è possibile notare che Power Query crea una sottoselezione in cui ContactTitle viene filtrato in "Rappresentante vendite", quindi raggruppa per Paese in questa sottoselezione. Tutte le nostre operazioni sono cessate.

Usando Query Diagnostica, possiamo esaminare che tipo di operazioni vengono piegate; in futuro, speriamo di rendere più semplice l'uso di questa funzionalità.