Comprendere la riduzione usando Diagnostica query

Uno dei motivi più comuni per usare Diagnostica delle query è capire meglio quali operazioni Power Query inoltra all'origine dati back-end per l'esecuzione. Questo processo è noto anche come riduzione. Per vedere quali operazioni vengono sottoposte a query folding, guarda la query o le query più specifiche che Power Query invia all'origine dati di back-end. È possibile esaminare questo processo sia per ODATA che per SQL.

L'operazione descritta in Registrazione della diagnostica delle query in Power BI esegue quattro passaggi:

  • Si connette alla fonte di dati
  • Recupera la tabella dei clienti
  • Filtra il ruolo ID cliente in base a Sales Representative
  • Raggruppa per Country

Poiché il connettore ODATA attualmente non supporta la delega di COUNT() all'endpoint e poiché anche questo endpoint è limitato nelle operazioni supportate, non prevediamo che il passaggio finale possa essere delegato all'endpoint. D'altra parte, il filtraggio è relativamente semplice. Questo è esattamente ciò che viene visualizzato se si esamina la query più specifica generata:

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

Possiamo vedere che stiamo filtrando la tabella in base a ContactTitle, che è uguale a Sales Representative, e che stiamo restituendo solo due colonne: Customer ID e Country. Country è necessario per l'operazione di raggruppamento, che deve essere eseguita localmente perché non viene eseguita dall'endpoint ODATA. 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]

È possibile notare che Power Query crea una sottoselezione in cui ContactTitle viene filtrata in Sales Representative, quindi raggruppa per Country in questa sottoselezione. Tutte le nostre operazioni sono cessate.

Con la diagnostica delle query, possiamo esaminare quali operazioni sono state sottoposte a folding. In futuro, speriamo di semplificare l'uso di questa funzionalità.