Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wechseln Sie Dienste mit der Dropdownliste "Version". Weitere Informationen zur Navigation.
Gilt für: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Aggregationsfunktionen gruppieren und kombinieren Daten aus mehreren Zeilen zu einem zusammengefassten Wert. Der Zusammenfassungswert hängt von der ausgewählten Funktion ab, z. B. einer Anzahl, einem Maximum oder einem Mittelwert.
In diesem Tutorial erfahren Sie, wie:
- Verwenden des Zusammenfassungsoperators
- Visualisieren von Abfrageergebnissen
- Zeilen bedingt zählen
- Gruppieren von Daten in Container
- Berechnen von Min., Max., Mittelwert und Summe
- Berechnen von Prozentsätzen
- Eindeutige Werte extrahieren
- Daten nach Bedingung gruppieren
- Durchführen der Aggregation über ein gleitendes Fenster
Die Beispiele in diesem Lernprogramm verwenden die StormEvents Tabelle, die im Hilfecluster öffentlich verfügbar ist. Wenn Sie mit Ihren eigenen Daten experimentieren möchten, erstellen Sie Ihren eigenen kostenlosen Cluster.
In den Beispielen in diesem Lernprogramm wird die StormEvents Tabelle verwendet, die in den Beispieldaten der Wetteranalyseöffentlich verfügbar ist.
Dieses Lernprogramm baut auf der Grundlage des ersten Lernprogramms auf, lernen Sie allgemeine Operatoren kennen.
Voraussetzungen
Zum Ausführen der folgenden Abfragen benötigen Sie eine Abfrageumgebung mit Zugriff auf die Beispieldaten. Verwenden Sie eine der folgenden Optionen:
- Ein Microsoft-Konto oder eine Microsoft Entra-Benutzeridentität, um sich beim Hilfecluster anzumelden
- Ein Microsoft-Konto oder eine Microsoft Entra-Benutzeridentität
- Ein Fabric-Arbeitsbereich mit einer Microsoft Fabric-fähigen Kapazität
Verwenden Sie den summarize-Operator
Der Zusammenfassungsoperator ist für die Durchführung von Aggregationen über Ihre Daten unerlässlich. Der summarize Operator gruppiert Zeilen basierend auf der by Klausel und verwendet dann die bereitgestellte Aggregationsfunktion, um jede Gruppe in einer einzelnen Zeile zu kombinieren.
Ermitteln Sie die Anzahl der Ereignisse nach Status mithilfe von summarize mit der Aggregationsfunktion Anzahl.
StormEvents
| summarize TotalStorms = count() by State
Ausgabe
| State | TotalStorms |
|---|---|
| TEXAS | 4701 |
| KANSAS | 3166 |
| IOWA | 2337 |
| ILLINOIS | 2022 |
| MISSOURI | 2016 |
| ... | ... |
Visualisieren von Abfrageergebnissen
Durch die Visualisierung von Abfrageergebnissen in einem Diagramm können Sie Muster, Trends und Ausreißer in Ihren Daten identifizieren. Sie können diese Visualisierungen mithilfe des Renderoperators erstellen.
Im gesamten Lernprogramm sehen Sie Beispiele für die Verwendung render zum Anzeigen Ihrer Ergebnisse. Einige verfügbare Diagrammtypen umfassen Balkendiagramme, Liniendiagramme, Kreisdiagramme und Punktdiagramme. Vorerst verwenden Sie render, um die Ergebnisse der vorherigen Abfrage in einem Balkendiagramm anzuzeigen.
StormEvents
| summarize TotalStorms = count() by State
| render barchart
Bedingte Anzahl von Zeilen
Wenn Sie Ihre Daten analysieren, verwenden Sie countif(), um Zeilen basierend auf einer bestimmten Bedingung zu zählen. Diese Funktion hilft Ihnen zu verstehen, wie viele Zeilen den angegebenen Kriterien entsprechen.
Die folgende Abfrage verwendet countif() , um Stürme zu zählen, die Schäden verursacht haben. Die Abfrage verwendet dann den Operator top, um die Ergebnisse zu filtern und die Bundesstaaten mit den größten durch Stürme verursachten Ernteschäden anzuzeigen.
StormEvents
| summarize StormsWithCropDamage = countif(DamageCrops > 0) by State
| top 5 by StormsWithCropDamage
Ausgabe
| State | Stürme mit Ernteschäden |
|---|---|
| IOWA | 359 |
| NEBRASKA | 201 |
| MISSISSIPPI | 105 |
| NORTH CAROLINA | 82 |
| MISSOURI | 78 |
Gruppieren von Daten in Container
Um Daten nach numerischen oder Zeitwerten zu aggregieren, gruppieren Sie die Daten zuerst mithilfe der Bin() -Funktion in Bins. Die Verwendung von bin() hilft Ihnen zu verstehen, wie sich Werte in einem bestimmten Bereich verteilen, und erleichtert den Vergleich verschiedener Zeiträume.
Die folgende Abfrage zählt die Anzahl der Stürme, die für jede Woche im Jahr 2007 Ernteschäden verursacht haben. Das 7d Argument stellt eine Woche dar, da für die Funktion ein gültiger Zeitbereichswert erforderlich ist.
StormEvents
| where StartTime between (datetime(2007-01-01) .. datetime(2007-12-31))
and DamageCrops > 0
| summarize EventCount = count() by bin(StartTime, 7d)
Ausgabe
| 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 |
| ... | ... |
Fügen Sie zum Ende der Abfrage hinzu | render timechart , um die Ergebnisse zu visualisieren.
Hinweis
bin() ähnelt der floor() Funktion in anderen Programmiersprachen. Er reduziert jeden Wert auf das nächste Vielfache des von Ihnen angegebenen Moduls und ermöglicht summarize das Zuweisen der Zeilen zu Gruppen.
Berechnen von Min., Max., Mittelwert und Summe
Um mehr über die Arten von Stürmen zu erfahren, die Ernteschäden verursachen, berechnen Sie die min()-, max()- und avg()-Ernteschäden für jeden Ereignistyp. Sortieren Sie dann das Ergebnis nach dem durchschnittlichen Schaden.
Sie können mehrere Aggregationsfunktionen in einem einzigen summarize Operator verwenden, um mehrere berechnete Spalten zu erzeugen.
StormEvents
| where DamageCrops > 0
| summarize
MaxCropDamage=max(DamageCrops),
MinCropDamage=min(DamageCrops),
AvgCropDamage=avg(DamageCrops)
by EventType
| sort by AvgCropDamage
Ausgabe
| Ereignistyp | MaxCropDamage | MinCropDamage | Durchschnittlicher Ernteschaden |
|---|---|---|---|
| Frost/Einfrieren | 568600000 | 3000 | 9106087.5954198465 |
| Waldbrand | 21000000 | 10000 | 7268333.333333333 |
| Dürre | 700000000 | 2.000 | 6763977.8761061952 |
| Hochwasser | 500000000 | 1.000 | 4844925.23364486 |
| Gewitterwind | 22000000 | 100 | 920328.36538461538 |
| ... | ... | ... | ... |
Die Ergebnisse der vorangegangenen Abfrage deuten darauf hin, dass Frost/Freeze-Ereignisse im Durchschnitt die größten Ernteschäden verursachen. Die bin()-Abfrage zeigt jedoch, dass Ereignisse mit Ernteschäden hauptsächlich in den Sommermonaten stattfinden.
Verwenden Sie Summe(), um die Gesamtanzahl der beschädigten Kulturen anstelle der Anzahl der Ereignisse zu überprüfen, die einen Schaden verursacht haben, wie in count() der vorherigen Bin()-Abfrage.
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
Jetzt können Sie im Januar einen Höhepunkt der Ernteschäden sehen, was wahrscheinlich auf Frost/Freeze zurückzuführen war.
Tipp
Verwenden Sie minif(), maxif(), avgif() und sumif(), um bedingte Aggregationen auszuführen, wie im Abschnitt mit bedingter Anzahl von Zeilen .
Berechnen von Prozentsätzen
Die Berechnung von Prozentsätzen kann Ihnen dabei helfen, die Verteilung und den Anteil verschiedener Werte in Ihren Daten zu verstehen. In diesem Abschnitt werden zwei gängige Methoden zum Berechnen von Prozentsätzen mithilfe der Kusto Query Language (KQL) behandelt.
Berechnen des Prozentsatzes basierend auf zwei Spalten
Verwenden Sie count() und countif, um den prozentualen Anteil der Sturmereignisse zu ermitteln, die in jedem Bundesstaat Ernteschäden verursacht haben. Zählen Sie zunächst die Gesamtzahl der Stürme in jedem Bundesland. Zählen Sie dann, wie viele Stürme in jedem Bundesstaat Ernteschäden verursacht haben.
Verwenden Sie dann extend, um den Prozentsatz aus den beiden Spalten zu berechnen, indem Sie die Anzahl der Stürme mit Ernteschäden durch die Gesamtzahl der Stürme dividieren und mit 100 multiplizieren.
Um sicherzustellen, dass Sie ein Dezimalergebnis erhalten, verwenden Sie die Todouble() -Funktion, um mindestens einen der Ganzzahlwerte in ein Double zu konvertieren, bevor Sie die Division ausführen.
StormEvents
| summarize
TotalStormsInState = count(),
StormsWithCropDamage = countif(DamageCrops > 0)
by State
| extend PercentWithCropDamage =
round((todouble(StormsWithCropDamage) / TotalStormsInState * 100), 2)
| sort by StormsWithCropDamage
Ausgabe
| State | TotalStormsInState | StürmeMitErnteschäden | Prozentsatz mit Ernteschäden |
|---|---|---|---|
| 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 |
| ... | ... | ... | ... |
Hinweis
Konvertieren Sie bei der Berechnung von Prozentsätzen mindestens einen der ganzzahligen Werte in der Division mit "todouble()" oder "toreal()". Diese Konvertierung stellt sicher, dass Sie aufgrund der ganzzahligen Division keine verkürzten Ergebnisse erhalten. Weitere Informationen finden Sie unter Typregeln für arithmetische Vorgänge.
Berechnen des Prozentsatzes basierend auf der Tabellengröße
Um die Anzahl der Stürme nach Ereignistyp mit der Gesamtzahl der Stürme in der Datenbank zu vergleichen, speichern Sie zuerst die Gesamtzahl der Stürme in der Datenbank als Variable. Verwenden Sie Let-Anweisungen , um Variablen innerhalb einer Abfrage zu definieren.
Da tabellarische Ausdrucksanweisungen tabellarische Ergebnisse zurückgeben, verwenden Sie die Toscalar() -Funktion, um das tabellarische Ergebnis der count() Funktion in einen skalaren Wert zu konvertieren. Verwenden Sie dann den numerischen Wert in der Prozentberechnung.
let TotalStorms = toscalar(StormEvents | summarize count());
StormEvents
| summarize EventCount = count() by EventType
| project EventType, EventCount, Percentage = todouble(EventCount) / TotalStorms * 100.0
Ausgabe
| Ereignistyp | EventCount | Prozentsatz |
|---|---|---|
| Gewitterwind | 13015 | 22.034673077574237 |
| Hagel | 12711 | 21.519994582331627 |
| Überschwemmung | 3688 | 6.2438627975485055 |
| Dürre | 3616 | 6.1219652592015716 |
| Winterwetter | 3349 | 5.669928554498358 |
| ... | ... | ... |
Eindeutige Werte extrahieren
Verwenden Sie make_set(), um eine Auswahl von Zeilen in einer Tabelle in ein Array eindeutiger Werte umzuwandeln.
Die folgende Abfrage verwendet make_set() , um ein Array der Ereignistypen zu erstellen, die zu Todesfällen in jedem Zustand führen. Die resultierende Tabelle wird dann nach der Anzahl der Sturmtypen in den einzelnen Arrays sortiert.
StormEvents
| where DeathsDirect > 0 or DeathsIndirect > 0
| summarize StormTypesWithDeaths = make_set(EventType) by State
| project State, StormTypesWithDeaths
| sort by array_length(StormTypesWithDeaths)
Ausgabe
| State | SturmtypenMitTodesfällen |
|---|---|
| CALIFORNIA | ["Gewitterwind","Hoher Wellengang","Kälte/Windkühle","Starker Wind","Brandungsrückstrom","Hitze","Extreme Hitze","Waldbrand","Staubsturm","Astronomische Niedrigwasserstände","Dichter Nebel","Winterwetter"] |
| TEXAS | ["Sturzflut", "Gewitterwind", "Tornado", "Blitz", "Überschwemmung", "Eissturm", "Winterwetter", "Brandungsrückströmung", "Extreme Hitze", "Dichter Nebel", "Hurrikan (Taifun)", "Kälte/Windkühle"] |
| OKLAHOMA | ["Sturzflut","Tornado","Kälte/Windkälte","Wintersturm","Starker Schneefall","Extreme Hitze","Hitze","Eissturm","Winterwetter","Dichter Nebel"] |
| NEW YORK | ["Flut","Blitz","Gewitterwind","Blitzflut","Winterwetter","Eissturm","Extremer Kälte/Windkühl","Wintersturm","Schwerer Schnee"] |
| KANSAS | ["Gewittersturm","Starker Regen","Tornado","Überschwemmung","Sturzflut","Blitz","Starker Schneefall","Winterwetter","Schneesturm"] |
| ... | ... |
Daten nach Bedingung gruppieren
Die Case()- Funktion gruppiert Daten basierend auf angegebenen Bedingungen in Buckets. Die Funktion gibt den entsprechenden Ergebnisausdruck für das erste erfüllte Prädikat oder den abschließenden Else-Ausdruck zurück, falls keines der Prädikate erfüllt ist.
In diesem Beispiel werden Staaten basierend auf der Anzahl der stürmischen Verletzungen gruppiert, die ihre Bürger erlitten haben.
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
Ausgabe
| State | VerletzungenAnzahl | Verletzungs-Bucket |
|---|---|---|
| ALABAMA | 494 | Groß |
| ALASKA | 0 | Keine Verletzungen |
| Amerikanisch-Samoa | 0 | Keine Verletzungen |
| ARIZONA | 6 | Klein |
| ARKANSAS | 54 | Groß |
| ATLANTIK NORD | 15 | Mittel |
| ... | ... | ... |
Erstellen Sie ein Kreisdiagramm, um den Anteil der Bundesstaaten zu visualisieren, in denen Stürme eine hohe, mittlere oder geringe Anzahl an Verletzungen verursachten.
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
Aggregationen in einem gleitenden Fenster durchführen
Das folgende Beispiel zeigt, wie Sie Spalten mithilfe eines gleitenden Fensters zusammenfassen.
Die Abfrage berechnet den minimalen, maximalen und durchschnittlichen Schaden von Tornados, Überschwemmungen und Waldbränden mithilfe eines Gleitfensters von sieben Tagen. Jeder Datensatz im Resultset aggregiert die vorangegangenen sieben Tage, und die Ergebnisse enthalten einen Datensatz pro Tag im Analysezeitraum.
Hier ist eine schrittweise Erläuterung der Abfrage:
- Ordnen Sie jeden Datensatz genau einem Tag bezogen auf
windowStartzu. - Fügen Sie dem Bin-Wert sieben Tage hinzu, um das Ende des Bereichs für jeden Datensatz festzulegen. Wenn sich der Wert außerhalb des Bereichs von
windowStartbiswindowEndbefindet, passen Sie den Wert entsprechend an. - Erstellen Sie ein Array von sieben Tagen für jeden Datensatz ab dem aktuellen Tag des Datensatzes.
- Erweitern Sie das Array aus Schritt 3, indem Sie mv-expand verwenden, um jeden Datensatz mit sieben Datensätzen mit eintägigen Intervallen zu duplizieren.
- Führen Sie die Aggregationen für jeden Tag aus. Aufgrund von Schritt 4 fasst dieser Schritt tatsächlich die vorherigen sieben Tage zusammen.
- Schließen Sie die ersten sieben Tage vom Endergebnis aus, da es keinen Sieben-Tage-Lookbackzeitraum für sie gibt.
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
Ausgabe
Die folgende Ergebnistabelle ist gekürzt. Führen Sie die Abfrage aus, um die vollständige Ausgabe anzuzeigen.
| Zeitstempel | Ereignistyp | min_DamageProperty | max_DamageProperty | avg_DamageProperty |
|---|---|---|---|---|
| 2007-07-08T00:00:00Z | Tornado | 0 | 30.000 | 6905 |
| 2007-07-08T00:00:00Z | Hochwasser | 0 | 200000 | 9261 |
| 2007-07-08T00:00:00Z | Waldbrand | 0 | 200000 | 14033 |
| 2007-07-09T00:00:00Z | Tornado | 0 | 100.000 | 14783 |
| 2007-07-09T00:00:00Z | Hochwasser | 0 | 200000 | 12529 |
| 2007-07-09T00:00:00Z | Lauffeuer | 0 | 200000 | 14033 |
| 2007-07-10T00:00:00Z | Tornado | 0 | 100.000 | 31400 |
| 2007-07-10T00:00:00Z | Hochwasser | 0 | 200000 | 12,263 |
| 2007-07-10T00:00:00Z | Flächenbrand | 0 | 200000 | 11694 |
| ... | ... | ... |
Nächster Schritt
Nachdem Sie nun mit allgemeinen Abfrageoperatoren und Aggregationsfunktionen vertraut sind, fahren Sie mit dem nächsten Lernprogramm fort, um zu erfahren, wie Sie Daten aus mehreren Tabellen verknüpfen.