Öğ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
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
.
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
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
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:
- Her kaydı öğesine göre tek bir güne bölme
windowStart
. - Her kaydın aralığının sonunu ayarlamak için depo gözü değerine yedi gün ekleyin. Değer ve
windowEnd
aralığınınwindowStart
dışındaysa, değeri uygun şekilde ayarlayın. - Kaydın geçerli gününden başlayarak her kayıt için yedi günlük bir dizi oluşturun.
- 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.
- Her gün için toplamaları gerçekleştirin. 4. adımdan dolayı, bu adım aslında önceki yedi günü özetler.
- 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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin