Öğretici: Toplulaştırma işlevlerini kullanma

Sürüm açılan listesini kullanarak hizmetler arasında geçiş yapın. Gezinti hakkında daha fazla bilgi edinin.
Şunlar için geçerlidir: ✅ Microsoft Fabric ✅ Azure Veri Gezgini ✅ Azure İzleyici ✅ Microsoft Sentinel

Toplama işlevleri , birden çok satırdan verileri gruplandırıp özet değer olarak birleştirir. Özet değeri, seçilen işleve (sayı, maksimum veya ortalama değer gibi) bağlıdır.

Bu eğitimde şunları öğreniyorsunuz:

Bu öğreticideki örneklerde, help kümesinde herkese açık olarak bulunan StormEvents tablosu kullanılır. Kendi verilerinizle keşfetmek için kendi ücretsiz kümenizi oluşturun.

Bu öğreticideki örneklerde, Hava durumu analiziörnek verileri içinde herkese açık olarak sunulan StormEvents tablosu kullanılır.

Bu eğitim, ilk eğitim olan Yaygın işleçleri öğrenin içeriğinin temeli üzerine inşa edilir.

Ö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ğıdaki seçeneklerden birini kullanın:

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ı birlikte gruplandırıp sağlanan toplama işlevini kullanarak her grubu tek bir satırda birleştirir.

Sayı toplama işleviyle kullanarak summarizeduruma 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. İşleme işlecini kullanarak bu görselleştirmeleri oluşturabilirsiniz.

Bu öğretici boyunca, sonuçlarınızı görüntülemek için render öğesini nasıl kullanacağınıza dair örnekler göreceksiniz. Kullanılabilir grafik türlerinden bazıları çubuk grafikler, çizgi grafikler, pasta grafikler ve dağılım grafikleridir. Şimdilik bir çubuk grafikte önceki sorgunun sonuçlarını görmek için kullanın 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 analiz ederken, satırları belirli bir koşula göre saymak için countif() kullanın. Bu işlev, verilen ölçütlere uyan satır sayısını anlamanıza yardımcı olur.

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 fazla mahsul zararının görüldüğü eyaletleri görüntülemek için top işlecini kullanır.

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

Çıktı

State Ürün Hasarına Neden Olan Fırtınalar
IOWA 359
NEBRASKA 201
MISSISSIPPI 105
KUZEY CAROLINA 82
MISSOURI 78

Verileri bölmeler halinde gruplandırma

Verileri sayısal veya saat değerlerine göre toplamak için, önce bin() işlevini kullanarak verileri bölmeler halinde gruplandırın. kullanmak bin() , değerlerin belirli bir aralık içinde nasıl dağıtıldığını anlamanıza yardımcı olur ve farklı dönemleri karşılaştırmayı kolaylaştırır.

Aşağıdaki sorgu, 2007 yılındaki her hafta için ekin hasarına neden olan fırtınaların sayısını hesaplar. 7d bağımsız değişkeni bir haftayı temsil eder, çünkü işlev geçerli bir zaman aralığı değeri gerektirir.

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

Çıktı

Başlangıç Zamanı Olay Sayısı
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 hasarlarını hesaplayın. 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 kullanabilirsiniz.

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

Çıktı

Olay Türü MaxCropDamage MinCropDamage AvgCropDamage
Kırağı/Donma 568600000 3000 9106087.5954198465
Orman yangını 21000000 10000 7268333.333333333
Kuraklık 700000000 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österir. Ancak, bin() sorgusu, ekin hasarı içeren olayların çoğunlukla yaz aylarında meydana geldiğini gösterir.

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

Artık mahsul hasarının Ocak ayında zirve yaptığını görebilirsiniz; bunun nedeni muhtemelen kırağı/don olaylarıydı.

İpucu

Satırları koşullu say bölümünde yaptığını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) kullanarak yüzdeleri hesaplamaya yönelik iki yaygın yöntemi kapsar.

yüzdeyi iki sütuna göre hesaplama

Her eyalette ekin 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 Ürün Hasarına Neden Olan Fırtınalar Ürün Hasarı Olan Yüzde
IOWA 2337 359 15.36
NEBRASKA 1766 201 11,38
MISSISSIPPI 1218 105 8.62
KUZEY CAROLINA 1721 82 4.76
MISSOURI 2016 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 dönüştürme, tamsayı bölme nedeniyle kırpılmış 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. Sorgu içindeki değişkenleri tanımlamak için Let deyimlerini kullanın.

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

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

Çıktı

Olay Türü Olay Sayısı Yüzde
Gök Gürültülü Fırtına 13015 22.034673077574237
Dolu 12711 21.519994582331627
Ani Sel 3688 6.2438627975485055
Kuraklık 3616 6.1219652592015716
Kış Hava Durumu 3349 5.669928554498358
... ... ...

Benzersiz değerleri ayıkla

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 Ölümlere Neden Olan Fırtına Türleri
CALIFORNIA ["Gök Gürültülü Fırtına Rüzgarı","Yüksek Dalga","Soğuk/Rüzgar Üşümesi","Kuvvetli Rüzgar","Çeken Akıntı","Sıcak","Aşırı Sıcak","Orman Yangını","Toz Fırtınası","Astronomik Alçak Gelgit","Yoğun Sis","Kış Havası"]
TEXAS ["Ani Sel", "Fırtına Rüzgarı", "Tornado", "Yıldırım", "Sel", "Buz Fırtınası", "Kış Havası", "Akıntı", "Aşırı Sıcak", "Yoğun Sis", "Kasırga (Tayfun)", "Soğuk/Rüzgar Soğuğu"]
OKLAHOMA ["Ani Sel", "Tornado", "Soğuk/Rüzgar Soğukluğu", "Kış Fırtınası", "Yoğun Kar", "Aşırı Sıcak", "Sıcak", "Buz Fırtınası", "Kış Havası", "Yoğun Sis"]
NEW YORK ["Sel", "Yıldırım", "Gök Gürültülü Fırtına Rüzgarı", "Ani Sel", "Kış Havası", "Buz Fırtınası", "Aşırı Soğuk/Rüzgar Soğukluğu", "Kış Fırtınası", "Yoğun Kar"]
KANSAS ["Gök Gürültülü Fırtına Rüzgarı", "Yoğun Yağmur", "Kasırga", "Sel", "Ani Sel", "Şimşek", "Yoğun Kar", "Kış Havası", "Tipi"]
... ...

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 maruz kaldığı fırtına kaynaklı 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 boyunca toplulaştırmalar gerçekleştirme

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

Sorgu, yedi günlük kayan bir pencere kullanarak hortum, sel ve orman yangınlarının neden olduğu en az, en fazla ve ortalama maddi hasarı 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ı, windowStart öğesine göre tek bir günde gruplandırın.
  2. Her kayıt için aralığın bitişini ayarlamak üzere kutu değerine yedi gün ekleyin. Değer, windowStart ile windowEnd aralığının 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 komutunu kullanarak 3. adımdaki diziyi genişletin.
  5. Her gün için agregasyonları uygulayın. 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 kırpılmıştır. Çı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 Hortum 0 30000 6905
2007-07-08T00:00:00Z Sel 0 200000 9261
2007-07-08T00:00:00Z Orman yangını 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 Orman yangını 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 Orman yangını 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.