Oktatóanyag: Összesítő függvények használata

Szolgáltatások váltása a Verzió legördülő listával. További információ a navigációról.
A következőkre vonatkozik: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

Az aggregációs függvények csoportosítják és összevonják a több sorból származó adatokat egy összegző értékbe. Az összegző érték a kiválasztott függvénytől függ, például a darabszámtól, a maximumtól vagy az átlagtól.

Ebben az oktatóanyagban a következőket sajátíthatja el:

Az ebben az oktatóanyagban bemutatott példák a StormEvents klaszterben nyilvánosan elérhető táblát használják. Ha saját adataival szeretne megismerkedni, hozzon létre egy saját ingyenes fürtöt.

Az oktatóanyagban szereplő példák a StormEvents táblázatot használják, amely nyilvánosan elérhető a WeatherAnalytics-mintaadatokban.

Ez az oktatóanyag az "Ismerd meg a gyakori operátorokat" című első oktatóanyag alapjaira épül.

Előfeltételek

A következő lekérdezések futtatásához olyan lekérdezési környezetre van szükség, amely hozzáfér a mintaadatokhoz. Használja az alábbi lehetőségek egyikét:

  • Microsoft-fiók vagy Microsoft Entra azonosító használata a súgófürtbe történő bejelentkezéshez

Az összegző operátor használata

Az összegző operátor elengedhetetlen az adatokon végzett összesítésekhez. Az summarize operátor a záradék alapján csoportosítja a by sorokat, majd a megadott összesítési függvénnyel egyesíti az egyes csoportokat egyetlen sorba.

Keresse meg az események számát állapot summarize szerint a darabszám aggregációs függvénnyel.

StormEvents
| summarize TotalStorms = count() by State

Kimenet

Állam Összesstorms
TEXAS 4701
KANSAS 3166
IOWA 2337
ILLINOIS 2022
MISSOURI 2016
... ...

Lekérdezési eredmények vizualizációja

A lekérdezési eredmények diagramon vagy grafikonon való megjelenítése segíthet azonosítani az adatok mintáit, trendjeit és kiugró adatait. Ezeket a vizualizációkat a renderelő operátorral hozhatja létre.

Az oktatóanyag során példákat láthat arra, hogyan használhatja a(z) render elemet az eredmények megjelenítésére. Egyes elérhető diagramtípusok közé tartoznak a sávdiagramok, a vonaldiagramok, a kördiagramok és a pontdiagramok. Egyelőre a(z) render használatával tekintheti meg az előző lekérdezés eredményeit sávdiagramon.

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

Képernyőkép a renderelő operátorral létrehozott állapotsávdiagramok szerinti összes viharról.

Sorok feltételes megszámlálása

Az adatok elemzésekor a countif() használatával megszámlálhatja a sorokat egy adott feltétel alapján. Ez a függvény segít megérteni, hogy hány sor felel meg a megadott feltételeknek.

Az alábbi lekérdezés a kárt okozó viharok megszámlálására használja countif() . A lekérdezés ezután az top operátorral szűri az eredményeket, és megjeleníti azokat az állapotokat, amelyekben a legnagyobb a viharok által okozott terméskár.

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

Kimenet

Állam Viharkárok a termésben
IOWA 359
NEBRASKA 201
MISSISSIPPI 105
ÉSZAK-KAROLINA 82
MISSOURI 78

Adatok csoportosítása tárolókba

Ha szám- vagy időértékek szerint szeretné összesíteni az adatokat, először csoportosítsa az adatokat tárolókba a bin() függvény használatával. A használat bin() segít megérteni, hogy az értékek hogyan vannak elosztva egy adott tartományban, és megkönnyíti a különböző időszakok összehasonlítását.

Az alábbi lekérdezés a 2007-es év minden hetében megszámlálja azoknak a viharoknak a számát, amelyek terméskárokat okoztak. Az 7d argumentum egy hetet jelöl, mivel a függvény érvényes időbélyeget igényel.

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

Kimenet

StartTime Eseményszám
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
... ...

Adja hozzá | render timechart a lekérdezés végéhez az eredmények megjelenítéséhez.

Képernyőkép az előző lekérdezés által renderelt vágási kárról heti idődiagram alapján.

Megjegyzés:

bin() hasonló a floor() más programozási nyelvekben használt függvényhez. Minden értéket a megadott modulus legközelebbi többszörösére csökkenti, és lehetővé teszi summarize a sorok csoportokhoz rendelését.

A minimális, maximális, átlagos és összeg kiszámítása

Ha többet szeretne megtudni a terméskárt okozó vihartípusokról, számítsa ki az egyes eseménytípusok minimális(), max() és avg() terméskárait. Ezután rendezze az eredményt az átlagos károsodás alapján.

Több összesítő függvényt is használhat egyetlen summarize operátorban több számított oszlop létrehozásához.

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

Kimenet

Eseménytípus MaxCropDamage Minimális Növénykár Átlagos növénykárosodás
Fagy/befagyás 568600000 3000 9106087.5954198465
Futótűz 21000000 10000 7268333.333333333
Aszály 700000000 2000 6763977.8761061952
Árvíz 500000000 1000 4844925.23364486
Zivatar szél 22000000 100 920328.36538461538
... ... ... ...

Az előző lekérdezés eredményei azt jelzik, hogy a Fagy/Fagyás események átlagosan a legtöbb terméskárt okoznak. A bin() lekérdezés azonban azt mutatja, hogy a növénykárosítással kapcsolatos események többnyire a nyári hónapokban történnek.

Használja a sum() függvényt a sérült növények teljes számának ellenőrzéséhez a kárt okozó események mennyisége helyett, az előző count() leírtak szerint.

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

Képernyőkép az időbeli diagramról, amely heti bontásban mutatja a növénnyel kapcsolatos károkat.

Most már látható egy csúcs a növényi károk januárban, ami valószínűleg a fagyásra / fagyra vezethető vissza.

Jótanács

Használja a minif(), maxif(), avgif() és sumif() függvényt a feltételes aggregációk elvégzéséhez, ahogyan azt a sorok feltételes számlálása szakaszban tette.

Százalékértékek kiszámítása

A százalékértékek kiszámítása segíthet megérteni a különböző értékek eloszlását és arányát az adatokban. Ez a szakasz két gyakori módszert ismertet a százalékok kusto lekérdezési nyelv (KQL) használatával történő kiszámításához.

Százalék kiszámítása két oszlop alapján

Használja a count() és a countif függvényt az egyes állapotokban terméskárt okozó viharesemények százalékos arányának megkereséséhez. Először számolja meg az egyes államokban lévő viharok teljes számát. Ezután számolja meg az egyes állapotokban a terméskárokat okozó viharok számát.

Ezután használja extend funkciót a százalék kiszámításához, amely úgy történik, hogy a vetéskárosítással rendelkező viharok számát elosztja a viharok teljes számával, majd megszorozza 100-zal.

Ha meg szeretné győződni arról, hogy decimális eredményt kap, a todouble() függvénnyel az osztás végrehajtása előtt az egész számok számának legalább egyikét dupla értékre konvertálhatja.

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

Kimenet

Állam TotalStormsInState Viharkárok a termésben Károsodott termények százaléka
IOWA 2337 359 15.36
NEBRASKA 1766 201 11.38
MISSISSIPPI 1218 105 8.62
ÉSZAK-KAROLINA 1721 82 4.76
MISSOURI 2016 78 3.87
... ... ... ...

Megjegyzés:

Százalékos értékek kiszámításakor konvertáljon legalább egy egész értéket a todouble() vagy toreal() függvényekkel. Ez az átalakítás biztosítja, hogy az egész számok osztása miatt ne kapjon csonkolt eredményeket. További információt az aritmetikai műveletek típusszabályai című témakörben talál.

Százalék kiszámítása a táblaméret alapján

Ha a viharok számát eseménytípus szerint szeretné összehasonlítani az adatbázisban található összes viharszámmal, először mentse az adatbázisban lévő viharok teljes számát változóként. A Let utasításokkal változókat definiálhat egy lekérdezésen belül.

Mivel a táblázatos kifejezési utasítások táblázatos eredményeket adnak vissza, a toscalar() függvénnyel skaláris értékké alakíthatja a count() függvény táblázatos eredményét. Ezután használja a numerikus értéket a százalékos számításban.

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

Kimenet

Eseménytípus Eseményszám Százalék
Zivatar szél 13015 22.034673077574237
Jégeső 12711 21.519994582331627
Villámárvíz 3688 6.2438627975485055
Aszály 3616 6.1219652592015716
Téli időjárás 3349 5,669928554498358
... ... ...

Egyedi értékek kinyerés

A make_set() használatával a táblázat sorainak kijelölése egyedi értékek tömbje lesz.

Az alábbi lekérdezés az egyes állapotokban halálokat okozó eseménytípusok tömbjének létrehozására használható make_set() . Az eredményként kapott táblázatot ezután az egyes tömbökben lévő vihartípusok száma alapján rendezi a rendszer.

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

Kimenet

Állam StormTypesWithDeaths
KALIFORNIA ["Zivataros szél","Magas hullámtörés","Hideg/szélhűtés","Erős szél","Húzó áramlat","Hőség","Extrém hőség","Erdőtűz","Porvihar","Csillagászati apály","Sűrű köd","Téli időjárás"]
TEXAS ["Villámárvíz","Zivatar szél","Tornádó","Villámlás","Árvíz","Jégvihar","Téli időjárás","Visszaáramlás","Túlzott hőség","Sűrű köd","Hurrikán (Tájfun)","Hideg/szélsérülés"]
OKLAHOMA ["Villámárvíz","Tornádó","Hideg/Szélhűtés","Téli vihar","Heves havazás","Túlzott hőség","Hőség","Jeges vihar","Téli időjárás","Sűrű köd"]
NEW YORK ["Árvíz","Villámlás","Zivataros szél","Villámárvíz","Téli időjárás","Jeges vihar","Extrém hideg/Szélhűtés","Téli vihar","Erős havazás"]
KANSAS ["Zivataros szél", "Heves esőzés", "Tornádó", "Árvíz", "Villámárvíz", "Villámlás", "Nagy hó", "Téli időjárás", "Hóvihar"]
... ...

Adatok csoportosítása feltétel szerint

A case() függvény megadott feltételek alapján gyűjtőkbe csoportosítja az adatokat. A függvény az első teljesült predikátum megfelelő eredménykifejezését adja vissza, vagy ha a predikátumok egyike sem teljesül, a végleges más kifejezést.

Ez a példa a polgárok által elszenvedett viharos sérülések száma alapján csoportosítja az államokat.

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

Kimenet

Állam Sérülések száma Sérülések Tároló
ALABAMA 494 Nagy
ALASZKA 0 Nincsenek sérülések
AMERIKAI SZAMOA 0 Nincsenek sérülések
ARIZONA 6 Kicsi
ARKANSAS 54 Nagy
ATLANTI-ÓCEÁN ÉSZAK 15 Közepes
... ... ...

Kördiagram létrehozása a nagy, közepes vagy kis számú sérülést eredményező viharokat okozó állapotok arányának megjelenítéséhez.

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 

Képernyőkép az előző lekérdezés által renderelt webes felhasználói felületi kördiagramról.

Összesítések végrehajtása egy csúszóablakon keresztül

Az alábbi példa bemutatja, hogyan összegezheti az oszlopokat egy tolóablak használatával.

A lekérdezés egy hét napos csúszóablak használatával kiszámítja a tornádók, árvizek és erdőtüzek által okozott anyagi kár minimumát, maximumát és átlagát. Az eredményhalmaz minden rekordja összesíti az előző hét napot, az eredmények pedig naponta egy rekordot tartalmaznak az elemzési időszakban.

A lekérdezés részletes magyarázata:

  1. Az egyes rekordokat egy adott napra kell csoportosítani, a windowStart időpontra vonatkozóan.
  2. Adjon hozzá hét napot a bin értékhez, hogy beállítsa az egyes rekordok tartományának végét. Ha az érték kívül esik a windowStart és windowEnd közötti tartományon, ennek megfelelően módosítsa az értéket.
  3. Hozzon létre egy hét napos tömböt minden rekordhoz a rekord aktuális napjától kezdve.
  4. Bontsa ki a tömböt a 3. lépésből az mv-expand paranccsal, hogy minden rekordot hét rekordra duplikáljon egy-egy napos intervallummal.
  5. Végezze el az összesítéseket minden naphoz. A 4. lépés miatt ez a lépés valójában az előző hét napot foglalja össze.
  6. Zárja ki az első hét napot a végeredményből, mert nincs hét napos visszatekintési időszak számukra.
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

Kimenet

A következő eredménytábla rövidítve van. A teljes kimenet megtekintéséhez futtassa a lekérdezést.

Időbélyeg Eseménytípus min_DamageProperty max_DamageProperty avg_DamageProperty
2007-07-08T00:00:00Z Tornádó 0 30000 6905
2007-07-08T00:00:00Z Árvíz 0 200000 9261
2007-07-08T00:00:00Z Futótűz 0 200000 14033
2007-07-09T00:00:00Z Tornádó 0 100 000 14783
2007-07-09T00:00:00Z Árvíz 0 200000 12529
2007-07-09T00:00:00Z Futótűz 0 200000 14033
2007-07-10T00:00:00Z Tornádó 0 100 000 31400
2007-07-10T00:00:00Z Árvíz 0 200000 12263
2007-07-10T00:00:00Z Futótűz 0 200000 11694
... ... ...

Következő lépés

Most, hogy már ismeri a gyakori lekérdezési operátorokat és aggregációs függvényeket, folytassa a következő oktatóanyaggal, amelyből megtudhatja, hogyan illeszthet össze adatokat több táblából.