Freigeben über


Verstehen der Faltung mit Abfragediagnose

Einer der häufigsten Gründe für die Verwendung von Query Diagnostics besteht darin, dass man besser verstehen möchte, welche Operationen von Power Query zur Ausführung durch die Back-End-Datenquelle „heruntergeschoben“ wurden, was auch als „Folding“ bezeichnet wird. Wenn wir sehen wollen, was geklappt hat, können wir uns die „spezifischste“ Abfrage oder die Abfragen ansehen, die an die Back-End-Datenquelle gesendet werden. Wir können dies sowohl für ODATA als auch für SQL betrachten.

Der Vorgang, der im Artikel zur Aufzeichnungsdiagnose beschrieben wurde, erfüllt im Wesentlichen vier Aufgaben:

  • Verbindet sich mit der Datenquelle
  • Greift die Kundentabelle
  • Filtert die Kunden-ID-Rolle auf „Vertriebsmitarbeiter“
  • Gruppiert nach „Land“

Da der ODATA-Connector derzeit das Falten von COUNT() an den Endpunkt nicht unterstützt und dieser Endpunkt auch in seinen Operationen etwas eingeschränkt ist, erwarten wir nicht, dass dieser letzte Schritt gefaltet werden kann. Andererseits ist die Filterung relativ trivial. Dies ist genau das, was wir sehen, wenn wir uns die oben genannte spezifischste Abfrage ansehen:

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

Wir sehen, dass wir die Tabelle nach ContactTitle gleich „Sales Representative“ filtern und nur zwei Spalten zurückgeben - Kunden-ID und Land. Das Land wird natürlich für die Gruppierungsoperation benötigt, die, da sie nicht vom ODATA-Endpunkt ausgeführt wird, lokal durchgeführt werden muss. Hier können wir feststellen, was passt und was nicht passt.

Ähnlich verhält es sich mit der spezifischen und endgültigen Abfrage in der SQL-Diagnose, die etwas anders aussieht:

    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]

Hier können wir sehen, dass Power Query eine Unterauswahl erstellt, in der ContactTitle nach „Sales Representative“ gefiltert wird, und diese Unterauswahl dann nach Land gruppiert. Alle unsere Aktivitäten wurden eingestellt.

Mit Hilfe der Abfragediagnose können wir untersuchen, welche Art von Operationen gefaltet wurden - wir hoffen, dass wir diese Funktion in Zukunft noch einfacher nutzen können.