Filtern und Aggregieren von Diagrammdaten in Microsoft Fabric

Note

Dieses Feature ist zurzeit als öffentliche Preview verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Supplementale Nutzungsbedingungen für Microsoft Azure Previews.

Durch das Filtern werden die Ergebnisse auf die Zeilen beschränkt, die wichtig sind. Aggregation fasst diese Zeilen in Zählungen, Summen und Mittelwerte zusammen. In diesem Artikel erfahren Sie, wie Sie beide Techniken in GQL-Abfragen auf Graph in Microsoft Fabric anwenden.

Beispiele verwenden das Beispiel-Dataset für soziale Netzwerke. Eine vollständige Referenz zu GQL-Anweisungen und -Ausdrücken finden Sie im GQL-Sprachhandbuch.

Voraussetzungen

  • Ein Diagrammelement mit geladenen Daten. Wenn Sie mit Graph noch nicht vertraut sind, führen Sie zuerst das Tutorial aus.
  • Vertrautheit mit grundlegenden MATCH und RETURN Abfragen. Siehe GQL-Sprachhandbuch.

Filtern von Zeilen mit FILTER

Wird verwendet FILTER , um nur die Zeilen beizubehalten, die eine Bedingung erfüllen. Platzieren Sie FILTER nach MATCH, um die übereinstimmenden Ergebnisse einzuschränken.

Die folgende Abfrage gibt alle Frauen mit ihrem Namen und Geburtstag zurück:

MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday

Kombinieren Sie mehrere Bedingungen mit AND und OR. Die folgende Abfrage gibt beispielsweise die Namen aller Frauen zurück, die vor 1990 geboren wurden:

MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName

Tip

Um eine bessere Leistung zu erzielen, filtern Sie während des Musterabgleichs mit einer Inlineklausel WHERE und nicht in einer separaten FILTER Anweisung. Siehe Filter während des Musterabgleichs.

Filtern während des Musterabgleichs

Inlineklauseln WHERE innerhalb eines MATCH Musters beschränken, welche Knoten und Kanten abgeglichen werden, bevor Ergebnisse erzeugt werden. Dieser Ansatz ist effizienter als eine FILTER Klausel nach dem Abgleich, da die Abfrage-Engine Zeilen früher aussondert.

Um beispielsweise Personen zu finden, die vor 1994 geboren wurden, zusammen mit dem Unternehmen, in dem sie arbeiten, die Ergebnisse auf Unternehmen beschränken, deren Name mit "A" beginnt:

MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name

Filtere die Kanten-Eigenschaften auf die gleiche Weise. Um beispielsweise nur Personen zurückzugeben, die 2000 oder später bei einem Unternehmen ihre Arbeit begonnen haben:

MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom

Weitere Informationen zum Leistungsunterschied zwischen Inline- und Nachabgleichsfilterung finden Sie unter Optimieren der GQL-Abfrageleistung.

Behandlung von Nullwerten in Filtern

GQL verwendet dreiwertige Logik: Prädikate werden als TRUE, FALSE oder UNKNOWN bewertet. Wenn ein Eigenschaftswert NULL ist, geben Vergleiche UNKNOWN zurück. FILTER wird als nicht übereinstimmend betrachtet, sodass die Zeile ausgeschlossen wird.

Verwenden Sie IS NULL und IS NOT NULL, um explizit auf Nullwerte zu testen.

-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname

Verwenden Sie coalesce(), um einen Standardwert heranzuziehen, wenn eine Eigenschaft möglicherweise null sein kann.

MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName

Vorsicht

NULL = NULL ergibt UNKNOWN, nicht TRUE. Verwenden Sie IS NULL immer, um auf Nullwerte zu testen, nicht auf Gleichheit.

Aggregieren von Ergebnissen mit RETURN

Verwenden Sie Aggregatfunktionen, RETURN um Ihre Ergebnisse zusammenzufassen. GQL unterstützt count(), sum(), , avg(), min()und max().

Um beispielsweise alle Personen im Diagramm zu zählen:

MATCH (p:Person)
RETURN count(*) AS totalPeople

Um unterschiedliche Werte zu zählen, z. B. wie viele unterschiedliche Unternehmen Mitarbeiter beschäftigen:

MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount

Gruppieren von Ergebnissen mit GROUP BY

Verwenden Sie GROUP BY in RETURN, um Zeilen nach gemeinsamen Werten zu gruppieren und Aggregate innerhalb jeder Gruppe zu berechnen. Diese Gruppierung ist die GQL-Entsprechung von SQL GROUP BY.

Beispielsweise, um Mitarbeiter pro Unternehmen zu zählen:

MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC

Gruppieren Sie nach mehreren Spalten, und berechnen Sie mehrere Aggregate gleichzeitig. Brechen Sie beispielsweise die Anzahl der Personen und die Geburtstagsspanne nach Geschlecht und Browser herunter und geben Sie die 10 häufigsten Kombinationen zurück:

MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
       browser,
       count(*) AS personCount,
       min(p.birthday) AS earliestBirthday,
       max(p.birthday) AS latestBirthday
GROUP BY gender, browser
ORDER BY personCount DESC
LIMIT 10

Note

Alle nicht aggregierten Ausdrücke in RETURN müssen in GROUP BYangezeigt werden. Ausdrücke, die nicht in GROUP BY sind, müssen eine Aggregatfunktion verwenden.

Sortieren und Einschränken aggregierter Ergebnisse

Verwenden Sie ORDER BY, LIMIT und GROUP BY zusammen, um die wichtigsten N-Ergebnisse zu finden.

So finden Sie beispielsweise die fünf wichtigsten Städte nach der Anzahl der Einwohner:

MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5

Von Bedeutung

ORDER BY vor LIMIT. ** LIMIT wird immer auf die bereits sortierte Ergebnismenge angewendet.

Verwenden von CASE für bedingte Werte in Ergebnissen

Verwenden Sie CASE/WHEN/THEN/ELSE, um bedingte Werte in RETURN oder LET zu berechnen.

Beispielsweise, um Personen basierend auf ihrem Geburtsjahr in Epochen zu kategorisieren:

MATCH (p:Person)
RETURN p.firstName,
       CASE WHEN p.birthday < 19800101 THEN 'Before 1980'
            WHEN p.birthday < 20000101 THEN '1980–1999'
            ELSE '2000 or later'
       END AS era