Grafiekgegevens filteren en aggregeren in Microsoft Fabric

Note

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview wordt geleverd zonder een service level agreement en wordt niet aanbevolen voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews voor meer informatie.

Als u filtert, worden de resultaten beperkt tot de rijen die belangrijk zijn. Met aggregatie worden deze rijen samengevat in aantallen, totalen en gemiddelden. In dit artikel leest u hoe u beide technieken in GQL-query's toepast op grafiek in Microsoft Fabric.

Voorbeelden maken gebruik van de voorbeeldgegevensset voor sociale netwerken. Zie de GQL-taalhandleiding voor een volledig overzicht van GQL-instructies en -expressies.

Prerequisites

  • Een grafiekitem met gegevens geladen. Als u nog niet eerder met grafieken werkt, voltooit u eerst de zelfstudie .
  • Bekendheid met basis MATCH- en RETURN-queries. Zie de GQL-taalhandleiding.

Rijen filteren met FILTER

Gebruik FILTER deze functie om alleen de rijen te behouden die voldoen aan een voorwaarde. Plaats FILTER erna MATCH om de overeenkomende resultaten te beperken.

De volgende query retourneert alle vrouwen met hun naam en verjaardag:

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

Meerdere voorwaarden combineren met AND en OR. De volgende query retourneert bijvoorbeeld de namen van alle vrouwen die vóór 1990 zijn geboren:

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

Tip

Voor betere prestaties moet u tijdens het patroonmatchen filteren met een inline WHERE clausule in plaats van in een afzonderlijke FILTER instructie. Zie Filter tijdens patroonkoppeling.

Filteren tijdens het vergelijken van patronen

Inline-voorwaarden WHERE in het MATCH patroon beperken welke knooppunten en randen worden gematcht voordat er resultaten worden geproduceerd. Deze benadering is efficiënter dan een clausule na overeenstemming FILTER, omdat de query-engine eerder rijen verwijdert.

Als u bijvoorbeeld personen wilt vinden die vóór 1994 zijn geboren, samen met het bedrijf waar ze werken, beperkt u de resultaten tot bedrijven waarvan de naam begint met 'A':

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

Eigenschappen van de grafiekranden op dezelfde manier filteren. Als u bijvoorbeeld alleen personen wilt weergeven die in 2000 of later bij een bedrijf zijn begonnen te werken:

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

Zie GQL-queryprestaties optimaliseren voor meer informatie over het prestatieverschil tussen inline- en post-matchfiltering.

Omgaan met nulwaarden in filters

GQL maakt gebruik van driewaardelogica: predicaten evalueren naar TRUE, FALSE of UNKNOWN. Wanneer een eigenschapswaarde null is, worden vergelijkingen geretourneerd UNKNOWN. FILTER UNKNOWN wordt behandeld als niet-overeenkomend, dus de rij wordt uitgesloten.

Gebruik IS NULL en IS NOT NULL test expliciet op null-waarden:

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

Gebruik coalesce() dit om een standaardwaarde te vervangen wanneer een eigenschap null kan zijn:

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

Caution

NULL = NULL resulteert in UNKNOWN, niet TRUE. IS NULL Gebruik altijd om te testen op null-waarden, niet gelijkheid.

Resultaten aggregeren met RETURN

Gebruik samengevoegde functies in RETURN om uw resultaten samen te vatten. GQL ondersteunt count(), sum(), avg(), en min()max().

Als u bijvoorbeeld alle personen in de grafiek wilt tellen:

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

Als u afzonderlijke waarden wilt tellen, zoals het aantal afzonderlijke bedrijven dat mensen in dienst heeft:

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

Groepsresultaten met GROUP BY

Gebruik GROUP BY in RETURN om rijen te groeperen op basis van gedeelde waarden en rekenaggregaties binnen elke groep. Deze groepering is het GQL-equivalent van SQL GROUP BY.

Als u bijvoorbeeld werknemers per bedrijf wilt tellen:

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

Groeperen op meerdere kolommen en meerdere aggregaties tegelijk berekenen. U kunt bijvoorbeeld het aantal personen en het verjaardagsbereik op geslacht en browser opsplitsen en de tien meest voorkomende combinaties retourneren:

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 niet-geaggregeerde expressies in RETURN moeten voorkomen in GROUP BY. Expressies die niet in GROUP BY staan, moeten een aggregatiefunctie gebruiken.

Geaggregeerde resultaten sorteren en beperken

Gebruik ORDER BY en LIMIT samen met GROUP BY om top-N-resultaten te vinden.

Als u bijvoorbeeld de vijf belangrijkste steden wilt vinden op basis van het aantal inwoners:

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

Belangrijk

Plaats ORDER BY voor LIMIT. LIMIT is altijd van toepassing op de reeds gesorteerde resultatenset.

Use CASE voor voorwaardelijke waarden in resultaten

Gebruiken CASE/WHEN/THEN/ELSEvoor het berekenen van voorwaardelijke waarden in RETURN of .LET

Als u bijvoorbeeld personen wilt categoriseren in tijdperken op basis van hun geboortejaar:

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