Zelfstudie: aggregatiefuncties gebruiken

Met aggregatiefuncties kunt u gegevens uit meerdere rijen groepeert en combineren in een samenvattingswaarde. De samenvattingswaarde is afhankelijk van de gekozen functie, bijvoorbeeld een aantal, maximum of gemiddelde waarde.

In deze zelfstudie leert u het volgende:

In de voorbeelden in deze zelfstudie wordt de StormEvents tabel gebruikt, die openbaar beschikbaar is in het Help-cluster. Als u wilt verkennen met uw eigen gegevens, maakt u uw eigen gratis cluster.

Deze zelfstudie bouwt voort op de basis van de eerste zelfstudie, Algemene operators leren.

Vereisten

  • Een Microsoft-account of Microsoft Entra gebruikersidentiteit om u aan te melden bij het Help-cluster

De samenvattende operator gebruiken

De samenvattende operator is essentieel voor het uitvoeren van aggregaties voor uw gegevens. De summarize operator groepeert rijen op basis van de by component en gebruikt vervolgens de opgegeven aggregatiefunctie om elke groep in één rij te combineren.

Zoek het aantal gebeurtenissen op status met behulp van summarize de aggregatiefunctie count .

StormEvents
| summarize TotalStorms = count() by State

Uitvoer

Staat TotalStorms
TEXAS 4701
KANSAS 3166
IOWA 2337
ILLINOIS 2022
MISSOURI 2016
... ...

Queryresultaten visualiseren

Het visualiseren van queryresultaten in een grafiek of grafiek kan u helpen patronen, trends en uitbijters in uw gegevens te identificeren. U kunt dit doen met de operator renderen .

In de zelfstudie ziet u voorbeelden van hoe u kunt gebruiken render om uw resultaten weer te geven. Laten we nu gebruiken render om de resultaten van de vorige query in een staafdiagram te bekijken.

StormEvents
| summarize TotalStorms = count() by State
| render barchart

Schermopname van het totale aantal stormen per staafdiagram dat is gemaakt met de operator render.

Rijen voorwaardelijk tellen

Wanneer u uw gegevens analyseert, gebruikt u countif() om rijen te tellen op basis van een specifieke voorwaarde om te begrijpen hoeveel rijen voldoen aan de opgegeven criteria.

De volgende query gebruikt countif() om te tellen van stormen die schade hebben veroorzaakt. De query gebruikt vervolgens de top operator om de resultaten te filteren en de statussen weer te geven met de hoogste hoeveelheid gewasschade veroorzaakt door stormen.

StormEvents
| summarize StormsWithCropDamage = countif(DamageCrops > 0) by State
| top 5 by StormsWithCropDamage

Uitvoer

Staat StormsWithCropDamage
IOWA 359
NEBRASKA 201
MISSISSIPPI 105
NORTH CAROLINA 82
MISSOURI 78

Gegevens groepeer in opslaglocaties

Als u wilt aggregeren op numerieke of tijdwaarden, moet u de gegevens eerst groeperen in bins met behulp van de functie bin(). Met behulp bin() van kunt u begrijpen hoe waarden worden verdeeld binnen een bepaald bereik en vergelijkingen maken tussen verschillende perioden.

Met de volgende query wordt het aantal stormen geteld dat gewasschade heeft veroorzaakt voor elke week in 2007. Het 7d argument vertegenwoordigt een week, omdat voor de functie een geldige periodewaarde is vereist.

StormEvents
| where StartTime between (datetime(2007-01-01) .. datetime(2007-12-31)) 
    and DamageCrops > 0
| summarize EventCount = count() by bin(StartTime, 7d)

Uitvoer

StartTime EventCount
2007-01-01T00:00:00Z 16
2007-01-08T00:00:00Z 20
2007-01-29T00:00:00Z 8
2007-02-05T00:00:00Z 1
2007-02-12T00:00:00Z 3
... ...

Voeg | render timechart toe aan het einde van de query om de resultaten te visualiseren.

Schermopname van de grafiek met bijsnijdschade per week, weergegeven door de vorige query.

Notitie

bin() is vergelijkbaar met de floor() functie in andere programmeertalen. Het vermindert elke waarde tot het dichtstbijzijnde veelvoud van de modulus die u opgeeft en staat toe summarize om de rijen toe te wijzen aan groepen.

De min, max, gemiddelde en som berekenen

Voor meer informatie over typen stormen die gewasschade veroorzaken, berekent u de gewasschade min(), max() en avg() voor elk gebeurtenistype en sorteert u het resultaat op basis van de gemiddelde schade.

Houd er rekening mee dat u meerdere aggregatiefuncties in één summarize operator kunt gebruiken om meerdere berekende kolommen te produceren.

StormEvents
| where DamageCrops > 0
| summarize
    MaxCropDamage=max(DamageCrops), 
    MinCropDamage=min(DamageCrops), 
    AvgCropDamage=avg(DamageCrops)
    by EventType
| sort by AvgCropDamage

Uitvoer

EventType MaxCropDamage MinCropDamage AvgCropDamage
Vorst/vriezen 568600000 3000 9106087.5954198465
Wildfire 21000000 10.000 7268333.333333333
Droogte 700000000 2000 6763977.8761061952
Overstroming 500000000 1000 4844925.23364486
Onweerswind 22000000 100 920328.36538461538
... ... ... ...

De resultaten van de vorige query geven aan dat vorst/vorstgebeurtenissen gemiddeld de meeste gewasschade hebben opgeleverd. Uit de bin()-query bleek echter dat gebeurtenissen met gewasschade meestal in de zomermaanden plaatsvonden.

Gebruik sum() om het totale aantal beschadigde gewassen te controleren in plaats van het aantal gebeurtenissen dat schade heeft veroorzaakt, zoals in count() de vorige bin()-query.

StormEvents
| where StartTime between (datetime(2007-01-01) .. datetime(2007-12-31)) 
    and DamageCrops > 0
| summarize CropDamage = sum(DamageCrops) by bin(StartTime, 7d)
| render timechart

Schermopname van tijddiagram met bijsnijdschade per week.

Nu zie je een piek in de schade aan het gewas in januari, die waarschijnlijk te wijten is aan vorst/vorst.

Tip

Gebruik minif(), maxif(), avgif() en sumif() om voorwaardelijke aggregaties uit te voeren, zoals we hebben gedaan in de sectie voorwaardelijke telling van rijen .

Percentages berekenen

Door percentages te berekenen, krijgt u inzicht in de verdeling en het aandeel van verschillende waarden in uw gegevens. In deze sectie worden twee algemene methoden besproken voor het berekenen van percentages met de Kusto-querytaal (KQL).

Percentage berekenen op basis van twee kolommen

Gebruik count() en countif om het percentage stormgebeurtenissen te vinden dat in elke toestand gewasschade heeft veroorzaakt. Tel eerst het totale aantal stormen in elke staat. Tel vervolgens het aantal stormen dat in elke staat gewasschade heeft veroorzaakt.

Gebruik vervolgens uitbreiden om het percentage tussen de twee kolommen te berekenen door het aantal stormen met gewasschade te delen door het totale aantal stormen en te vermenigvuldigen met 100.

Om ervoor te zorgen dat u een decimaal resultaat krijgt, gebruikt u de functie todouble() om ten minste een van de waarden voor het aantal gehele getallen te converteren naar een dubbele waarde voordat u de deling uitvoert.

StormEvents
| summarize 
    TotalStormsInState = count(),
    StormsWithCropDamage = countif(DamageCrops > 0)
    by State
| extend PercentWithCropDamage = 
    round((todouble(StormsWithCropDamage) / TotalStormsInState * 100), 2)
| sort by StormsWithCropDamage

Uitvoer

Staat TotalStormsInState StormsWithCropDamage PercentWithCropDamage
IOWA 2337 359 15.36
NEBRASKA 1766 201 11.38
MISSISSIPPI 1218 105 8.62
NORTH CAROLINA 1721 82 4.76
MISSOURI 2016 78 3.87
... ... ... ...

Notitie

Converteer bij het berekenen van percentages ten minste één van de gehele waarden in de deling met todouble() of toreal(). Dit zorgt ervoor dat u geen afgekapte resultaten krijgt vanwege de deling van gehele getallen. Zie Typeregels voor rekenkundige bewerkingen voor meer informatie.

Percentage berekenen op basis van tabelgrootte

Als u het aantal stormen per gebeurtenistype wilt vergelijken met het totale aantal stormen in de database, slaat u eerst het totale aantal stormen in de database op als een variabele. Let-instructies worden gebruikt om variabelen in een query te definiëren.

Omdat tabellaire expressie-instructies resultaten in tabelvorm retourneren, gebruikt u de functie toscalar() om het resultaat in tabelvorm van de count() functie te converteren naar een scalaire waarde. Vervolgens kan de numerieke waarde worden gebruikt in de percentageberekening.

let TotalStorms = toscalar(StormEvents | summarize count());
StormEvents
| summarize EventCount = count() by EventType
| project EventType, EventCount, Percentage = todouble(EventCount) / TotalStorms * 100.0

Uitvoer

EventType EventCount Percentage
Onweerswind 13015 22.034673077574237
Hagel 12711 21.519994582331627
Flash Flood 3688 6.2438627975485055
Droogte 3616 6.1219652592015716
Winterweer 3349 5.669928554498358
... ... ...

Unieke waarden extraheren

Gebruik make_set() om een selectie van rijen in een tabel om te zetten in een matrix met unieke waarden.

De volgende query gebruikt make_set() om een matrix te maken van de gebeurtenistypen die in elke status overlijden veroorzaken. De resulterende tabel wordt vervolgens gesorteerd op het aantal stormtypen in elke matrix.

StormEvents
| where DeathsDirect > 0 or DeathsIndirect > 0
| summarize StormTypesWithDeaths = make_set(EventType) by State
| project State, StormTypesWithDeaths
| sort by array_length(StormTypesWithDeaths)

Uitvoer

Staat StormTypesWithDeaths
CALIFORNIË ["Onweerswind","High Surf","Cold/Wind Chill","Strong Wind","Rip Current","Heat","Excessive Heat","Wildfire","Dust Storm","Astronomisch laagtij","Dichte mist","Winterweer"]
TEXAS ["Flash Flood","Onweerswind","Tornado","Bliksem","Overstroming","Ijsstorm","Winterweer","Rip current","Overmatige hitte","Dichte mist","Orkaan (tyfoon)","Koud/Wind chill"]
OKLAHOMA ["Flash Flood","Tornado","Cold/Wind Chill","Winter Storm","Heavy Snow","Excess Heat","Heat","Ice Storm","Winter Weather","Dense Fog"]
NEW YORK ["Overstroming","Bliksem","Onweerswind","Flash Flood","Winterweer","Ijsstorm","Extreme kou/Koude wind","Winterstorm","Zware sneeuw"]
KANSAS ["Onweerswind","Zware regen","Tornado","Overstroming","Flash Flood","Bliksem","Zware sneeuw","Winterweer","Blizzard"]
... ...

Bucketgegevens per voorwaarde

De functie case() groepeert gegevens in buckets op basis van opgegeven voorwaarden. De functie retourneert de bijbehorende resultaatexpressie voor het eerste tevreden stellende predicaat of de laatste expressie anders als aan geen van de predicaten wordt voldaan.

In dit voorbeeld worden staten gegroepeerd op basis van het aantal stormgerelateerde letsels dat hun burgers hebben opgelopen.

StormEvents
| summarize InjuriesCount = sum(InjuriesDirect) by State
| extend InjuriesBucket = case (
                              InjuriesCount > 50,
                              "Large",
                              InjuriesCount > 10,
                              "Medium",
                              InjuriesCount > 0,
                              "Small",
                              "No injuries"
                          )
| sort by State asc

Uitvoer

Staat BlessuresAantal BlessuresBucket
ALABAMA 494 Groot
ALASKA 0 Geen verwondingen
AMERIKAANS-SAMOA 0 Geen verwondingen
ARIZONA 6 Klein
ARKANSAS 54 Groot
ATLANTISCHE NOORD 15 Normaal
... ... ...

Maak een cirkeldiagram om het percentage staten te visualiseren dat stormen heeft ervaren, wat resulteert in een groot, gemiddeld of klein aantal verwondingen.

StormEvents
| summarize InjuriesCount = sum(InjuriesDirect) by State
| extend InjuriesBucket = case (
                              InjuriesCount > 50,
                              "Large",
                              InjuriesCount > 10,
                              "Medium",
                              InjuriesCount > 0,
                              "Small",
                              "No injuries"
                          )
| summarize InjuryBucketByState=count() by InjuriesBucket
| render piechart 

Schermopname van het cirkeldiagram van Azure Data Explorer webinterface dat door de vorige query is weergegeven.

Aggregaties uitvoeren over een schuifvenster

In het volgende voorbeeld ziet u hoe u kolommen samenvat met behulp van een schuifvenster.

De query berekent de minimale, maximale en gemiddelde materiële schade van tornado's, overstromingen en bosbranden met behulp van een schuifraam van zeven dagen. Elke record in de resultatenset voegt de voorgaande zeven dagen samen en de resultaten bevatten een record per dag in de analyseperiode.

Hier volgt een stapsgewijze uitleg van de query:

  1. Plaats elke record op één dag ten opzichte van windowStart.
  2. Voeg zeven dagen toe aan de bin-waarde om het einde van het bereik voor elke record in te stellen. Als de waarde buiten het bereik van windowStart en windowEndvalt, past u de waarde dienovereenkomstig aan.
  3. Maak een matrix van zeven dagen voor elke record, beginnend vanaf de huidige dag van de record.
  4. Vouw de matrix uit stap 3 uit met mv-expand om elke record te dupliceren naar zeven records met intervallen van één dag ertussen.
  5. Voer de aggregaties voor elke dag uit. Vanwege stap 4 wordt in deze stap de afgelopen zeven dagen samengevat.
  6. Sluit de eerste zeven dagen uit van het uiteindelijke resultaat, omdat er geen terugblikperiode van zeven dagen voor is.
let windowStart = datetime(2007-07-01);
let windowEnd = windowStart + 13d;
StormEvents
| where EventType in ("Tornado", "Flood", "Wildfire") 
| extend bin = bin_at(startofday(StartTime), 1d, windowStart) // 1
| extend endRange = iff(bin + 7d > windowEnd, windowEnd, 
                      iff(bin + 7d - 1d < windowStart, windowStart, 
                        iff(bin + 7d - 1d < bin, bin, bin + 7d - 1d))) // 2
| extend range = range(bin, endRange, 1d) // 3
| mv-expand range to typeof(datetime) // 4
| summarize min(DamageProperty), max(DamageProperty), round(avg(DamageProperty)) by Timestamp=bin_at(range, 1d, windowStart), EventType // 5
| where Timestamp >= windowStart + 7d; // 6

Uitvoer

De volgende resultatentabel is afgekapt. Voer de query uit om de volledige uitvoer te zien.

Tijdstempel EventType min_DamageProperty max_DamageProperty avg_DamageProperty
2007-07-08T00:00:00Z Tornado 0 30.000 6905
2007-07-08T00:00:00Z Overstroming 0 200000 9261
2007-07-08T00:00:00Z Wildfire 0 200000 14033
2007-07-09T00:00:00Z Tornado 0 100000 14783
2007-07-09T00:00:00Z Overstroming 0 200000 12529
2007-07-09T00:00:00Z Wildfire 0 200000 14033
2007-07-10T00:00:00Z Tornado 0 100000 31400
2007-07-10T00:00:00Z Overstroming 0 200000 12263
2007-07-10T00:00:00Z Wildfire 0 200000 11694
... ... ...

Volgende stap

Nu u bekend bent met veelvoorkomende queryoperators en aggregatiefuncties, gaat u verder met de volgende zelfstudie voor meer informatie over het samenvoegen van gegevens uit meerdere tabellen.