Självstudie: Använda sammansättningsfunktioner
Med sammansättningsfunktioner kan du gruppera och kombinera data från flera rader till ett sammanfattningsvärde. Sammanfattningsvärdet beror på den valda funktionen, till exempel ett antal, maximalt eller genomsnittligt värde.
I den här självstudien får du lära dig att:
Exemplen i den här självstudien StormEvents
använder tabellen, som är offentligt tillgänglig i hjälpklustret. Om du vill utforska med dina egna data skapar du ett eget kostnadsfritt kluster.
Den här självstudien bygger på grunden från den första självstudiekursen, Learn common operators.
Förutsättningar
- Ett Microsoft-konto eller en Microsoft Entra användaridentitet för att logga in på hjälpklustret
Använda sammanfattningsoperatorn
Sammanfattningsoperatorn är viktig för att utföra aggregeringar över dina data. Operatorn summarize
grupperar rader baserat på by
-satsen och använder sedan den angivna aggregeringsfunktionen för att kombinera varje grupp på en enda rad.
Hitta antalet händelser efter tillstånd med hjälp summarize
av funktionen count aggregation.
StormEvents
| summarize TotalStorms = count() by State
Resultat
Tillstånd | TotalStorms |
---|---|
TEXAS | 4701 |
KANSAS | 3166 |
IOWA | 2337 |
ILLINOIS | 2022 |
MISSOURI | 2016 |
... | ... |
Visualisera frågeresultat
Genom att visualisera frågeresultat i ett diagram eller diagram kan du identifiera mönster, trender och extremvärden i dina data. Du kan göra detta med återgivningsoperatorn .
I självstudien visas exempel på hur du använder render
för att visa dina resultat. För tillfället ska vi använda render
för att se resultatet från föregående fråga i ett stapeldiagram.
StormEvents
| summarize TotalStorms = count() by State
| render barchart
Räkna rader villkorsstyrt
När du analyserar dina data använder du countif() för att räkna rader baserat på ett visst villkor för att förstå hur många rader som uppfyller de angivna kriterierna.
Följande fråga använder countif()
för att räkna stormar som orsakat skador. Frågan använder sedan operatorn top
för att filtrera resultatet och visa tillstånden med den högsta mängden beskärningsskador som orsakas av stormar.
StormEvents
| summarize StormsWithCropDamage = countif(DamageCrops > 0) by State
| top 5 by StormsWithCropDamage
Resultat
Tillstånd | StormsWithCropDamage |
---|---|
IOWA | 359 |
NEBRASKA | 201 |
MISSISSIPPI | 105 |
NORTH CAROLINA | 82 |
MISSOURI | 78 |
Gruppera data i intervall
Om du vill aggregera efter numeriska värden eller tidsvärden vill du först gruppera data i intervall med hjälp av funktionen bin(). Med kan bin()
du förstå hur värden distribueras inom ett visst intervall och göra jämförelser mellan olika perioder.
Följande fråga räknar antalet stormar som orsakade skördeskador för varje vecka under 2007. Argumentet 7d
representerar en vecka eftersom funktionen kräver ett giltigt tidsintervallvärde .
StormEvents
| where StartTime between (datetime(2007-01-01) .. datetime(2007-12-31))
and DamageCrops > 0
| summarize EventCount = count() by bin(StartTime, 7d)
Resultat
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 |
... | ... |
Lägg till | render timechart
i slutet av frågan för att visualisera resultatet.
Anteckning
bin()
liknar funktionen floor()
i andra programmeringsspråk. Det minskar varje värde till närmaste multipel av modulus som du anger och gör det möjligt summarize
att tilldela raderna till grupper.
Beräkna min, max, genomsnitt och summa
Om du vill veta mer om typer av stormar som orsakar skördeskador beräknar du min(), max()och avg() beskärningsskador för varje händelsetyp och sorterar sedan resultatet efter den genomsnittliga skadan.
Observera att du kan använda flera aggregeringsfunktioner i en enda summarize
operator för att skapa flera beräknade kolumner.
StormEvents
| where DamageCrops > 0
| summarize
MaxCropDamage=max(DamageCrops),
MinCropDamage=min(DamageCrops),
AvgCropDamage=avg(DamageCrops)
by EventType
| sort by AvgCropDamage
Resultat
Eventtype | MaxCropDamage | MinCropDamage | AvgCropDamage |
---|---|---|---|
Frost/frysning | 568600000 | 3000 | 9106087.5954198465 |
Wildfire | 21000000 | 10000 | 7268333.333333333 |
Torka | 700000000 | 2000 | 6763977.8761061952 |
Översvämning | 500000000 | 1000 | 4844925.23364486 |
Åska vind | 22000000 | 100 | 920328.36538461538 |
... | ... | ... | ... |
Resultatet av den föregående frågan anger att Frost/Frys-händelser i genomsnitt orsakade flest beskärningsskador. Bin()-frågan visade dock att händelser med skördeskador till största delen ägde rum under sommarmånaderna.
Använd sum() för att kontrollera det totala antalet skadade grödor i stället för mängden händelser som orsakade viss skada, som i count()
föregående bin()-fråga.
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
Nu kan du se en topp i skördeskador i januari, som förmodligen berodde på Frost / Frys.
Tips
Använd minif(), maxif(), avgif()och sumif() för att utföra villkorsstyrda aggregeringar, som vi gjorde i avsnittet med villkorsstyrda rader .
Beräkna procentandelar
Genom att beräkna procentandelar kan du förstå fördelningen och andelen av olika värden i dina data. Det här avsnittet beskriver två vanliga metoder för att beräkna procentandelar med Kusto-frågespråk (KQL).
Beräkna procentandel baserat på två kolumner
Använd count() och countif för att hitta procentandelen stormhändelser som orsakade beskärningsskador i varje tillstånd. Räkna först det totala antalet stormar i varje tillstånd. Räkna sedan antalet stormar som orsakade skördeskador i varje tillstånd.
Använd sedan extend för att beräkna procentandelen mellan de två kolumnerna genom att dividera antalet stormar med beskärningsskador med det totala antalet stormar och multiplicera med 100.
För att säkerställa att du får ett decimalresultat använder du funktionen todouble() för att konvertera minst ett av heltalsvärdena till en dubbel innan du utför divisionen.
StormEvents
| summarize
TotalStormsInState = count(),
StormsWithCropDamage = countif(DamageCrops > 0)
by State
| extend PercentWithCropDamage =
round((todouble(StormsWithCropDamage) / TotalStormsInState * 100), 2)
| sort by StormsWithCropDamage
Resultat
Tillstånd | 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 |
... | ... | ... | ... |
Anteckning
Vid beräkning av procentandelar konverterar du minst ett av heltalsvärdena i divisionen med todouble() eller toreal(). Detta säkerställer att du inte får trunkerade resultat på grund av heltalsdelning. Mer information finns i Typregler för aritmetiska åtgärder.
Beräkna procent baserat på tabellstorlek
Om du vill jämföra antalet stormar efter händelsetyp med det totala antalet stormar i databasen sparar du först det totala antalet stormar i databasen som en variabel. Let-instruktioner används för att definiera variabler i en fråga.
Eftersom tabelluttrycksinstruktioner returnerar tabellresultat använder du funktionen toscalar() för att konvertera tabellresultatet för count()
funktionen till ett skalärt värde. Sedan kan det numeriska värdet användas i procentberäkningen.
let TotalStorms = toscalar(StormEvents | summarize count());
StormEvents
| summarize EventCount = count() by EventType
| project EventType, EventCount, Percentage = todouble(EventCount) / TotalStorms * 100.0
Resultat
Eventtype | EventCount | Procent |
---|---|---|
Åska vind | 13015 | 22.034673077574237 |
Hagel | 12711 | 21.519994582331627 |
Flash Flood | 3688 | 6.2438627975485055 |
Torka | 3616 | 6.1219652592015716 |
Vinterväder | 3349 | 5.669928554498358 |
... | ... | ... |
Extrahera unika värden
Använd make_set() för att omvandla ett urval av rader i en tabell till en matris med unika värden.
Följande fråga använder make_set()
för att skapa en matris med de händelsetyper som orsakar dödsfall i varje tillstånd. Den resulterande tabellen sorteras sedan efter antalet stormtyper i varje matris.
StormEvents
| where DeathsDirect > 0 or DeathsIndirect > 0
| summarize StormTypesWithDeaths = make_set(EventType) by State
| project State, StormTypesWithDeaths
| sort by array_length(StormTypesWithDeaths)
Resultat
Tillstånd | StormTypesWithDeaths |
---|---|
KALIFORNIEN | ["Thunderstorm Wind","High Surf","Cold/Wind Chill","Strong Wind","Rip Current","Heat","Excessive Heat","Wildfire","Dust Storm","Astronomical Low Tide","Dense Fog","Winter Weather"] |
TEXAS | ["Flash Flood","Thunderstorm Wind","Tornado","Lightning","Flood","Ice Storm","Winter Weather","Rip Current","Excessive Heat","Dense Fog","Hurricane (Typhoon)","Cold/Wind Chill"] |
OKLAHOMA | ["Flash Flood","Tornado","Cold/Wind Chill","Winter Storm","Heavy Snow","Excessive Heat","Heat","Ice Storm","Winter Weather","Dense Fog"] |
NEW YORK | ["Flood","Lightning","Thunderstorm Wind","Flash Flood","Winter Weather","Ice Storm","Extreme Cold/Wind Chill","Winter Storm","Heavy Snow"] |
KANSAS | ["Thunderstorm Wind","Heavy Rain","Tornado","Flood","Flash Flood","Lightning","Heavy Snow","Winter Weather","Blizzard"] |
... | ... |
Bucketdata efter villkor
Funktionen case() grupperar data i bucketar baserat på angivna villkor. Funktionen returnerar motsvarande resultatuttryck för det första uppfyllda predikatet, eller det sista andra uttrycket om inget av predikaten är uppfyllt.
Det här exemplet grupperar stater baserat på antalet stormrelaterade skador som deras medborgare lidit.
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
Resultat
Tillstånd | InjuriesCount | SkadorBucket |
---|---|---|
ALABAMA | 494 | Stor |
ALASKA | 0 | Inga skador |
AMERIKANSKA SAMOA | 0 | Inga skador |
ARIZONA | 6 | Liten |
ARKANSAS | 54 | Stor |
NORDATLANT | 15 | Medel |
... | ... | ... |
Skapa ett cirkeldiagram för att visualisera andelen tillstånd som drabbats av stormar som resulterar i ett stort, medelstort eller litet antal skador.
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
Utföra aggregeringar över ett skjutfönster
I följande exempel visas hur du sammanfattar kolumner med hjälp av ett skjutfönster.
Frågan beräknar minsta, högsta och genomsnittliga egendomsskador för tornados, översvämningar och skogsbränder med ett skjutfönster på sju dagar. Varje post i resultatuppsättningen aggregerar de föregående sju dagarna och resultaten innehåller en post per dag under analysperioden.
Här är en stegvis förklaring av frågan:
- Gruppera varje post till en enda dag i förhållande till
windowStart
. - Lägg till sju dagar i bin-värdet för att ange slutet på intervallet för varje post. Om värdet ligger inom intervallet
windowStart
för ochwindowEnd
justerar du värdet därefter. - Skapa en matris med sju dagar för varje post, med början från postens aktuella dag.
- Expandera matrisen från steg 3 med mv-expand för att duplicera varje post till sju poster med endagsintervall mellan dem.
- Utför aggregeringarna för varje dag. På grund av steg 4 sammanfattar det här steget faktiskt de föregående sju dagarna.
- Undanta de första sju dagarna från slutresultatet eftersom det inte finns någon sjudagarsperiod för dem.
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
Resultat
Följande resultattabell trunkeras. Kör frågan om du vill se fullständiga utdata.
Timestamp | Eventtype | min_DamageProperty | max_DamageProperty | avg_DamageProperty |
---|---|---|---|---|
2007-07-08T00:00:00Z | Tornado | 0 | 30000 | 6905 |
2007-07-08T00:00:00Z | Översvämning | 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 | Översvämning | 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 | Översvämning | 0 | 200000 | 12263 |
2007-07-10T00:00:00Z | Wildfire | 0 | 200000 | 11694 |
... | ... | ... |
Nästa steg
Nu när du är bekant med vanliga frågeoperatorer och aggregeringsfunktioner går du vidare till nästa självstudie och lär dig hur du kopplar data från flera tabeller.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för