Aracılığıyla paylaş


Öğretici: Toplama işlevlerini kullanma

Şunlar için geçerlidir: ✅Microsoft Fabric✅Azure Veri Gezgini Azure İzleyiciMicrosoft Sentinel

Toplama işlevleri , birden çok satırdan gelen verileri bir özet değerde gruplandırmanıza ve birleştirmenize olanak sağlar. Özet değeri, seçilen işleve (örneğin, sayı, maksimum veya ortalama değer) bağlıdır.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

Bu öğreticideki örneklerde, yardım kümesinde genel kullanıma açık olan tablo kullanılırStormEvents. Kendi verilerinizle keşfetmek için kendi ücretsiz kümenizi oluşturun.

Bu öğreticideki örneklerde, Hava durumu analizi örnek verilerinde genel kullanıma açık olan tablo kullanılırStormEvents.

Bu öğretici, genel işleçleri öğrenme öğreticisi olan ilk öğreticinin temelini temel alır.

Önkoşullar

Aşağıdaki sorguları çalıştırmak için örnek verilere erişimi olan bir sorgu ortamına ihtiyacınız vardır. Aşağıdakilerden birini kullanabilirsiniz:

Summarize işlecini kullanma

Özetleme işleci, verileriniz üzerinde toplamalar gerçekleştirmek için gereklidir. summarize işleci, yan tümcesine by göre satırları bir araya getirir ve sağlanan toplama işlevini kullanarak her grubu tek bir satırda birleştirir.

Sayı toplama işleviyle kullanarak summarize duruma göre olay sayısını bulun.

StormEvents
| summarize TotalStorms = count() by State

Çıktı

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

Sorgu sonuçlarını görselleştirme

Bir grafikte veya grafikte sorgu sonuçlarını görselleştirmek, verilerinizdeki desenleri, eğilimleri ve aykırı değerleri belirlemenize yardımcı olabilir. Bunu işleme işleciyle yapabilirsiniz.

Öğretici boyunca, sonuçlarınızı görüntülemek için nasıl kullanacağınıza render ilişkin örnekler göreceksiniz. Şimdilik çubuk grafikte önceki sorgunun sonuçlarını görmek için kullanalım render .

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

İşleme işleciyle oluşturulan durum çubuğu grafiğine göre toplam fırtınaların ekran görüntüsü.

Satırları koşullu olarak sayma

Verilerinizi çözümlerken, verilen ölçütlere uyan satır sayısını anlamak için belirli bir koşula göre satırları saymak için countif() kullanın.

Aşağıdaki sorgu, hasara neden olan fırtınaları saymak için kullanır countif() . Sorgu daha sonra sonuçları filtrelemek ve fırtınaların neden olduğu en yüksek miktarda kırpma hasarına sahip durumları görüntülemek için işlecini kullanır top .

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

Çıktı

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

Verileri bölmeler halinde gruplandırma

Sayısal veya saat değerlerine göre toplamak için önce bin() işlevini kullanarak verileri bölmeler halinde gruplandırmak istersiniz. kullanmak bin() , değerlerin belirli bir aralık içinde nasıl dağıtıldığını anlamanıza ve farklı dönemler arasında karşılaştırmalar yapmanıza yardımcı olabilir.

Aşağıdaki sorgu, 2007'de her hafta için kırpma hasarına neden olan fırtına sayısını sayar. 7d İşlev geçerli bir zaman aralığı değeri gerektirdiğinden bağımsız değişken bir haftayı temsil eder.

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

Çıktı

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
... ...

Sonuçları görselleştirmek için sorgunun sonuna ekleyin | render timechart .

Önceki sorgu tarafından işlenen haftalık zamana göre kırpma hasarı grafiğinin ekran görüntüsü.

Not

bin() diğer programlama dillerindeki işleve floor() benzer. Her değeri sağladığınız modülün en yakın katına azaltır ve satırları gruplara atamaya izin verir summarize .

Min, max, avg ve sum değerini hesaplama

Kırpma hasarına neden olan fırtına türleri hakkında daha fazla bilgi edinmek için her olay türü için min(), max() ve avg() kırpma hasarını hesaplayın ve ardından sonucu ortalama hasara göre sıralayın.

Birkaç hesaplanan sütun oluşturmak için tek summarize bir işleçte birden çok toplama işlevi kullanabileceğinizi unutmayın.

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

Çıktı

EventType MaxCropDamage MinCropDamage AvgCropDamage
Donma/Donma 568600000 3000 9106087.5954198465
Wildfire 21000000 10000 7268333.333333333
Kuraklık 700000000 Kategori 2000 6763977.8761061952
Sel 500000000 1000 4844925.23364486
Gök Gürültülü Fırtına 22000000 100 920328.36538461538
... ... ... ...

Önceki sorgunun sonuçları Donma/Donma olaylarının ortalama olarak en fazla ürün hasarına neden olduğunu gösteriyor. Ancak bin() sorgusu, kırpma hasarı olan olayların çoğunlukla yaz aylarında gerçekleştiğini gösterdi.

Önceki bin() sorgusunda olduğu count() gibi, zarara neden olan olay miktarı yerine toplam zarar görmüş ürün sayısını denetlemek için sum() kullanın.

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

Haftaya göre kırpma hasarını gösteren zaman grafiğinin ekran görüntüsü.

Şimdi, Büyük olasılıkla Donma/Donma nedeniyle Ocak ayında mahsul hasarında bir tepe görebilirsiniz.

İpucu

Satırları koşullu olarak say bölümünde yaptığımız gibi koşullu toplamalar gerçekleştirmek için minif(), maxif(), avgif() ve sumif() kullanın.

Yüzdeleri hesaplama

Yüzdeleri hesaplamak, verilerinizdeki farklı değerlerin dağılımını ve oranını anlamanıza yardımcı olabilir. Bu bölüm, Kusto Sorgu Dili (KQL) ile yüzdeleri hesaplamak için iki yaygın yöntemi kapsar.

yüzdeyi iki sütuna göre hesaplama

Her durumda kırpma hasarına neden olan fırtına olaylarının yüzdesini bulmak için count() ve countif kullanın. İlk olarak, her durumdaki toplam fırtına sayısını sayın. Ardından, her durumda ekin hasarına neden olan fırtına sayısını sayın.

Ardından, ekin hasarı olan fırtına sayısını toplam fırtına sayısına bölerek ve 100 ile çarparak iki sütun arasındaki yüzdeyi hesaplamak için extend kullanın.

Ondalık sonuç aldığınızdan emin olmak için, bölme işlemini gerçekleştirmeden önce tamsayı sayısı değerlerinden en az birini çifte dönüştürmek için todouble() işlevini kullanın.

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

Çıktı

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

Not

Yüzdeleri hesaplarken, bölmedeki tamsayı değerlerinden en az birini todouble() veya toreal() ile dönüştürün. Bu, tamsayı bölme nedeniyle kesilmiş sonuçlar almamanızı sağlar. Daha fazla bilgi için bkz . Aritmetik işlemler için tür kuralları.

Tablo boyutuna göre yüzdeyi hesaplama

Olay türüne göre fırtına sayısını veritabanındaki toplam fırtına sayısıyla karşılaştırmak için önce veritabanındaki toplam fırtına sayısını değişken olarak kaydedin. Let deyimleri , sorgu içindeki değişkenleri tanımlamak için kullanılır.

Tablosal ifade deyimleri tablosal sonuçlar döndürdüğünden, işlevin tablosal sonucunu count() skaler bir değere dönüştürmek için toscalar() işlevini kullanın. Ardından, sayısal değer yüzde hesaplamasında kullanılabilir.

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

Çıktı

EventType EventCount Yüzde
Gök Gürültülü Fırtına 13015 22.034673077574237
Dolu 12711 21.519994582331627
Flash Flood 3688 6.2438627975485055
Kuraklık 3616 6.1219652592015716
Kış Hava Durumu 3349 5.669928554498358
... ... ...

Benzersiz değerleri ayıklama

Tablodaki satır seçimini benzersiz değerler dizisine dönüştürmek için make_set() kullanın.

Aşağıdaki sorgu, her durumda ölümlere neden olan olay türlerinin bir dizisini oluşturmak için kullanır make_set() . Sonuçta elde edilen tablo, her dizideki storm türlerinin sayısına göre sıralanır.

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

Çıktı

State StormTypesWithDeaths
CALIFORNIA ["Thunderstorm Wind","High Surf","Cold/Wind Chill","Strong Wind","Rip Current","Heat","Excessive Heat","Wildfire","Dust Storm","Astronomik Düşük Gelgit","Yoğun Sis","Kış HavaSı"]
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"]
... ...

Koşula göre demet verileri

case() işlevi, verileri belirtilen koşullara göre demetler halinde gruplandırmaktadır. İşlev, ilk karşılanan koşul için karşılık gelen sonuç ifadesini veya koşullardan hiçbiri karşılanmamışsa son else ifadesini döndürür.

Bu örnek, eyaletleri vatandaşlarının devam ettirdikleri fırtınayla ilgili yaralanma sayısına göre gruplandırır.

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

Çıktı

State Yaralanma Sayısı YaralanmalarBucket
ALABAMA 494 Büyük
ALASKA 0 Yaralanma yok
AMERİKAN SAMOASI 0 Yaralanma yok
ARİZONA 6 Küçük
ARKANSAS 54 Büyük
ATLANTIK KUZEY 15 Orta
... ... ...

Büyük, orta veya az sayıda yaralanmayla sonuçlanan fırtınaların yaşandığı durumların oranını görselleştirmek için bir pasta grafik oluşturun.

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 

Önceki sorgu tarafından işlenen web kullanıcı arabirimi pasta grafiğinin ekran görüntüsü.

Kayan pencere üzerinde toplamalar gerçekleştirme

Aşağıdaki örnekte kayan pencere kullanarak sütunların nasıl özetlenebilir olduğu gösterilmektedir.

Sorgu yedi günlük kayan bir pencere kullanarak hortumların, sellerin ve orman yangınlarının en düşük, en yüksek ve ortalama özellik hasarını hesaplar. Sonuç kümesindeki her kayıt önceki yedi günü toplar ve sonuçlar analiz döneminde günlük bir kayıt içerir.

Sorgunun adım adım açıklaması aşağıdadır:

  1. Her kaydı ile ilgili olarak tek bir güne bölme windowStart.
  2. Her kaydın aralığının sonunu ayarlamak için bölme değerine yedi gün ekleyin. Değer ve windowEndaralığının windowStart dışındaysa, değeri buna göre ayarlayın.
  3. Kaydın geçerli gününden başlayarak her kayıt için yedi günlük bir dizi oluşturun.
  4. Her kaydı aralarında bir günlük aralıklarla yedi kayda çoğaltmak için mv-expand ile 3. adımdaki diziyi genişletin .
  5. Her gün için toplamaları gerçekleştirin. 4. adım nedeniyle, bu adım aslında önceki yedi günü özetler.
  6. Son sonucun ilk yedi gününü hariç tutun çünkü bunlar için yedi günlük bir geri arama süresi yoktur.
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

Çıktı

Aşağıdaki sonuç tablosu kesilir. Çıkışın tamamını görmek için sorguyu çalıştırın.

Zaman damgası EventType min_DamageProperty max_DamageProperty avg_DamageProperty
2007-07-08T00:00:00Z Hortum 0 30000 6905
2007-07-08T00:00:00Z Sel 0 200000 9261
2007-07-08T00:00:00Z Wildfire 0 200000 14033
2007-07-09T00:00:00Z Hortum 0 100000 14783
2007-07-09T00:00:00Z Sel 0 200000 12529
2007-07-09T00:00:00Z Wildfire 0 200000 14033
2007-07-10T00:00:00Z Hortum 0 100000 31400
2007-07-10T00:00:00Z Sel 0 200000 12263
2007-07-10T00:00:00Z Wildfire 0 200000 11694
... ... ...

Sonraki adım

Sık kullanılan sorgu işleçleri ve toplama işlevleri hakkında bilgi edindiğinize göre, birden çok tablodaki verileri birleştirmeyi öğrenmek için sonraki öğreticiye gidin.