Öğretici: Toplama işlevlerini kullanma
Şunlar için geçerlidir: ✅Microsoft Fabric✅Azure Veri Gezgini✅ Azure İzleyici✅Microsoft 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:
- Microsoft hesabı veya Microsoft Entra kullanıcı kimliği
- Microsoft Fabric özellikli kapasiteye sahip doku çalışma alanı
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
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
.
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
Ş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
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:
- Her kaydı ile ilgili olarak tek bir güne bölme
windowStart
. - Her kaydın aralığının sonunu ayarlamak için bölme değerine yedi gün ekleyin. Değer ve
windowEnd
aralığınınwindowStart
dışındaysa, değeri buna göre 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ım nedeniyle, 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
Çı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.