Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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 handledningen använder StormEvents tabellen, som är offentligt tillgänglig i hjälpklustret. Om du vill utforska med dina egna data skapar du ett eget kostnadsfritt kluster.
Exemplen i den här självstudien använder StormEvents-tabellen, som är offentligt tillgänglig i väderanalysexempeldata.
Den här självstudien bygger på grunden från den första självstudiekursen, Learn common operators(Lär dig vanliga operatorer).
Förutsättningar
Om du vill köra följande frågor behöver du en frågemiljö med åtkomst till exempeldata. Du kan använda något av följande:
- Ett Microsoft-konto eller Entra-användaridentitet för att logga in på hjälpklustret
- Ett Microsoft-konto eller Entra-användaridentitet
- En Fabric-arbetsyta med en kapacitet som stöds av Microsoft Fabric
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 i 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
| Stat/län | TotalStorms | 
|---|---|
| TEXAS | 4701 | 
| KANSAS | 3166 | 
| IOWA | 2337 | 
| ILLINOIS | 2022 | 
| MISSOURI | 2016 | 
| ... | ... | 
Visualisera frågeresultat
Genom att visualisera sökfrågeresultat i ett diagram eller en graf kan du identifiera mönster, trender och extremvärden i din datauppsättning. Du kan göra detta med återgivningsoperatorn .
Under hela självstudien kommer du att se exempel på hur du använder render för att visa dina resultat. Nu 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
Villkorligt antal rader
När du analyserar dina data använder du countif() för att räkna rader baserat på ett specifikt 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 resultaten och visa de staterna med den största mängden skador på grödor som orsakas av stormar.
StormEvents
| summarize StormsWithCropDamage = countif(DamageCrops > 0) by State
| top 5 by StormsWithCropDamage
Resultat
| Stat/län | Stormar som skadar grödor | 
|---|---|
| IOWA | 359 | 
| NEBRASKA | 201 | 
| MISSISSIPPI | 105 | 
| NORTH CAROLINA | 82 | 
| MISSOURI | 78 | 
Gruppera data i lagerplatser
Om du vill aggregera efter numeriska värden eller tidsvärden ska du först gruppera data med hjälp av funktionen bin(). Med hjälp av bin() kan 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.
Anmärkning
              bin() är liknande funktionerna 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 skador på grödor, beräkna min(), max(), och avg() skador på grödor för varje händelsetyp och sortera 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
| Evenemangstyp | MaxCropDamage | MinCropDamage | AvgCropDamage | 
|---|---|---|---|
| Frost/frysning | 568600000 | 3000 | 9106087.5954198465 | 
| Löpeld | 21000000 | 10000 | 7268333.333333333 | 
| Torka | 700000000 | 2000 | 6763977.8761061952 | 
| Översvämning | 500000000 | 1 000 | 4844925.23364486 | 
| Åskvädersvind | 22000000 | 100 | 920 328,36538461538 | 
| ... | ... | ... | ... | 
Resultatet av föregående fråga visar att frost-/fryshändelser resulterade i de största grödeskadorna i genomsnitt. Frågan bin() visade dock att händelser med växtskador mestadels ä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 växtskadorna i januari, vilket förmodligen berodde på frost.
Tips/Råd
Använd minif(), maxif(), avgif()och sumif() för att utföra villkorsstyrda aggregeringar, som vi gjorde i avsnittet med villkorligt antal rader .
Beräkna procentsatser
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 Query Language (KQL).
Beräkna procent baserat på två kolumner
Använd count() och countif för att hitta procentandelen stormhändelser som orsakade skador på grödor i varje delstat. Först, räkna det sammanlagda antalet stormar i varje delstat. Räkna sedan antalet stormar som orsakade skördeskador i varje delstat.
Använd sedan extend för att beräkna procentandelen mellan de två kolumnerna genom att dividera antalet stormar med grödskador med det totala antalet stormar och sedan 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
| Stat/län | TotalStormsInState | Stormar som skadar grödor | ProcentMedSkadorPåGrödan | 
|---|---|---|---|
| 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 | 
| ... | ... | ... | ... | 
Anmärkning
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 funktionens tabellresultat count() 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
| Evenemangstyp | EventCount | Procent | 
|---|---|---|
| Åskvädersvind | 13015 | 22.034673077574237 | 
| Hagel | 12711 | 21.519994582331627 | 
| Plötslig översvämning | 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änds 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
| Stat/län | StormTyperMedDödsfall | 
|---|---|
| KALIFORNIEN | ["Åskvädervind","Hög sjö","Kyla/Vindkyla","Stark vind","Rivström","Värme","Extrem värme","Skogsbrand","Sandstorm","Astronomiskt lågvatten","Tät dimma","Vinterväder"] | 
| TEXAS | ["Plötslig Översvämning","Åskväder Vindar","Tornado","Blixtar","Översvämning","Isstorm","Vinterväder","Dragsström","Extrem Värme","Tät Dimma","Orkan (Tyfon)","Kyla/Vindavkylning"] | 
| OKLAHOMA | ["Snabb översvämning", "Tornado", "Kyla/vindkyla", "Vinterstorm", "Tung snö", "Överdriven värme", "Värme", "Isstorm", "Vinterväder", "Tät dimma"] | 
| NEW YORK | ["Översvämning", "Blixt", "Åskvind", "Snabb översvämning", "Vinterväder", "Isstorm", "Extrem kyla/köldfaktor", "Vinterstorm", "Ymnigt snöfall"] | 
| KANSAS | ["Åskvädervind", "Kraftigt regn", "Tornado", "Översvämning", "Plötslig översvämning", "Blixtnedslag", "Kraftigt snöfall", "Vinterväder", "Snöstorm"] | 
| ... | ... | 
Gruppera data 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 uttrycket annars om inget av predikaten är uppfyllt.
Det här exemplet grupperar tillstånd 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
| Stat/län | AntalSkador | Skadorhink | 
|---|---|---|
| ALABAMA | 494 | Stort | 
| ALASKA | 0 | Inga personskador | 
| AMERIKANSKA SAMOA | 0 | Inga personskador | 
| ARIZONA | 6 | Liten | 
| ARKANSAS | 54 | Stort | 
| 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ör aggregeringar över ett glidande fönster
I följande exempel visas hur du sammanfattar kolumner med hjälp av ett skjutfönster.
Frågan beräknar den lägsta, högsta och genomsnittliga egendomsskadan för tornados, översvämningar och skogsbränder genom att använda ett rullande tidsfö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 av intervallet för varje post. Om värdet ligger utom intervallet windowStartför ochwindowEndjusterar du värdet därefter.
- Skapa en array med sju dagar för varje postering, med början från den nuvarande dagen för posteringen.
- 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.
- Exkludera de första sju dagarna från slutresultatet eftersom det inte finns någon sjudagars lookback-period 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
Den följande resultattabellen är förkortad. Kör frågan för att se hela resultaten.
| Tidsstämpel | Evenemangstyp | min_DamageProperty | max_DamageProperty | avg_DamageProperty | 
|---|---|---|---|---|
| 2007-07-08T00:00:00Z | Tromb | 0 | 30000 | 6905 | 
| 2007-07-08T00:00:00Z | Översvämning | 0 | 200000 | 9261 | 
| 2007-07-08T00:00:00Z | Löpeld | 0 | 200000 | 14033 | 
| 2007-07-09T00:00:00Z | Tromb | 0 | 100000 | 14783 | 
| 2007-07-09T00:00:00Z | Översvämning | 0 | 200000 | 12529 | 
| 2007-07-09T00:00:00Z | Löpeld | 0 | 200000 | 14033 | 
| 2007-07-10T00:00:00Z | Tromb | 0 | 100000 | 31400 | 
| 2007-07-10T00:00:00Z | Översvämning | 0 | 200000 | 12263 | 
| 2007-07-10T00:00:00Z | Löpeld | 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 handledning för att lära dig hur du kombinerar data från flera tabeller.
 
              
               
              
               
              
              