Öğretici: Toplama işlevlerini kullanma

Toplama işlevleri , birden çok satırdan verileri gruplandırmanıza ve özet değerde birleştirmenize olanak sağlar. Özet değeri, seçilen işleve (örneğin, bir 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 herkese açık olan tablo kullanılırStormEvents. Kendi verilerinizle keşfetmek için kendi ücretsiz kümenizi oluşturun.

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

Önkoşullar

  • Yardım kümesinde oturum açmak için bir Microsoft hesabı veya Microsoft Entra kullanıcı kimliği

Summarize işlecini kullanma

Özetleme işleci, verileriniz üzerinde toplamalar gerçekleştirmek için önemlidir. summarize işleci, yan tümcesine by göre satırları bir araya getirir ve ardından 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

Çıkış

Durum TotalStorms
TEXAS 4701
KANSAS 3166
IOWA 2337
ILLİNOİS 2022
MİSSOURİ 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 bir çubuk grafikte önceki sorgunun sonuçlarını görmek için komutunu 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

Çıkış

Durum StormsWithCropDamage
IOWA 359
NEBRASKA 201
MİSSİSSİPPİ 105
KUZEY CAROLINA 82
MİSSOURİ 78

Verileri bölmeler halinde gruplandırma

Sayısal değerlere 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ığı ve farklı dönemler arasında nasıl karşılaştırmalar yapıldığını anlamanıza yardımcı olabilir.

Aşağıdaki sorgu, 2007'de her hafta için ekin hasarına neden olan fırtına sayısını sayar. 7d işlevi geçerli bir zaman aralığı değeri gerektirdiğinden bağımsız değişkeni 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)

Çıkış

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 kırpma zamanı grafiğinin ekran görüntüsü.

Not

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

Min, max, avg ve toplamını 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 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

Çıkış

Olay türü MaxCropDamage MinCropDamage AvgCropDamage
Donma/Donma 568600000 3000 9106087.5954198465
Wildfire 21000000 10000 7268333.333333333
Kurak -lık 700000000 2000 6763977.8761061952
Sel 500000000 1000 4844925.23364486
Fırtına Rüzgarı 22000000 100 920328.36538461538
... ... ... ...

Önceki sorgunun sonuçları Frost/Freeze olaylarının ortalama olarak en fazla ürün hasarına neden olduğunu gösteriyor. Ancak bin() sorgusu , ekin 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üş ekin 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ü.

Artık Ocak ayında, büyük olasılıkla Donma/Donma nedeniyle oluşan ekin hasarında bir zirve görebilirsiniz.

İpucu

Satırları koşullu 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 ürün 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ıyla 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

Çıkış

Durum TotalStormsInState StormsWithCropDamage PercentWithCropDamage
IOWA 2337 359 15.36
NEBRASKA 1766 201 11.38
MİSSİSSİPPİ 1218 105 8.62
KUZEY CAROLINA 1721 82 4.76
MİSSOURİ 2016 78 3.87
... ... ... ...

Not

Yüzdeleri hesaplarken, todouble() veya toreal() ile bölmedeki tamsayı değerlerinden en az birini 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 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

Çıkış

Olay türü EventCount Yüzde
Fırtına Rüzgarı 13015 22.034673077574237
Dolu 12711 21.519994582331627
Ani Sel 3688 6.2438627975485055
Kurak -lı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ürlerinden oluşan bir dizi 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)

Çıkış

Durum StormTypesWithDeaths
CALİFORNİA ["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"]
... ...

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şılanmazsa 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

Çıkış

Durum Yaralanma Sayısı YaralanmalarBucket
ALABAMA 494 Büyük
ALASKA 0 Yaralanma yok
AMERİkA SAMOA 0 Yaralanma yok
ARİZONA 6 Küçük
ARKANSAS 54 Büyük
ATLANTIC NORTH 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 Azure Veri Gezgini web kullanıcı arabirimi pasta grafiğinin ekran görüntüsü.

Kayan pencere üzerinde toplamalar gerçekleştirme

Aşağıdaki örnek, kayan pencere kullanarak sütunların nasıl özetlenebilir olduğunu gösterir.

Sorgu yedi günlük kayan bir pencere kullanarak hortumların, sellerin ve yangınları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ı öğesine göre tek bir güne bölme windowStart.
  2. Her kaydın aralığının sonunu ayarlamak için depo gözü değerine yedi gün ekleyin. Değer ve windowEndaralığının windowStart dışındaysa, değeri uygun şekilde 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ımdan dolayı, 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

Çıkış

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

Zaman damgası Olay türü min_DamageProperty max_DamageProperty avg_DamageProperty
2007-07-08T00:00:00Z Kasırga 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 Kasırga 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 Kasırga 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 geçin.