Implict Measure Giriş 1 | Aggregation & Implict Measure Kullanımına Giriş
Merhaba, Dax’ın başlangıç noktasına hoş geldiniz 😊 Bu yazıda, Power BI’ın sürükle bırak yaptığımızda hangi hesabı yaptığını anlamak için bilmemiz gereken, önemli ama aynı zamanda oldukça kolay bir yapıyı tanıyacağız.
Öncelikle Power BI’ın temelde Excel’in Pivot table’ı ile aynı mantıkta çalıştığını belirteyim. Yani rapora sürükleyip bıraktığımız değerler, genellikle tablodaki boyuta göre özetlenir. Bu sayısal verilerimizi birleştirme veya özetleme işlemine “aggregation” denir. Yani çarşaf datanın bir sütunundan bir toplam, ortalama, max, min, count vb. gibi sonuçlar ürettiğimizde bu işleme aggregation, ortaya çıkan sonuca da “aggregate” denir.
Aggregation fonksiyonları bir sütun üzerinden toplam, ortalama, max, min, count, distinccount gibi işlemler yapar ve bir sonuç döndürürler.
Power BI’da verilerinizi rapora sürükleyip bırakmaya başladığınızda, kendi içinde hazır sunduğu Aggregation işlemlere başlamış oluruz. Excel’de Pivot table yapıyormuş gibi düşünebilirsiniz. Aşağıda, sadece 121 satırlık bir satış datasından bu konuyu açıklayan güzel örnekler göreceğiz.
Ekranda Tablo Görselini(1 nolu)seçtikten sonra, Fields alanına satış verilerimizden Tutar sütununu sürükleyip bıraktık.(2 Nolu) Otomatik olarak bir aggregation gerçekleşti ve bize Tutar sütununun aggregate, Türkçe olarak söylersek agrega halini verdi.(3 Nolu) Hangi Aggregation fonksiyonunu kullandığına bakma için Fields alanındaki Tutar’ın yanındaki ok simgesine tıklayıp (4 Nolu) kontrol edebiliriz. Eğer Fields’a sürükleyip bıraktığımız verilerin veri tipi sayısal ise genellikle otomatikman “SUM” fonksiyonu uygulanır. (5 Nolu).
Sum, max, min, average, median, variance gibi aggregation fonksiyonları doğal olarak yalnızca sayısal olan veri tipleri ile çalışır. Count, Distinct Count gibi fonksiyonlar ise dolu olan hücreleri saydığı için veri tipi ne olursa olsun sayma işlemini yapabilir. Detayda her biri için örnek göreceğiz.
Power BI’a veri çektiğimizde, kendisi veri tiplerini otomatik olarak algılayabilir ancak bazı durumlarda algılamaz ve manuel veri tipi değişikliği gerekir. Tablo verilerinin göründüğü en sağdaki Fields penceresinde verilerin veri tipine yönelik bir önizleme vardır. Burada sigma işareti ile ( Σ ) gösterilen sütunlar veri tipinin sayısal olduğunu belirtir.
Dikkat ederseniz üstteki görselde Adet sütunun veri tipinde Sigma simgesi yok. Yani şu anda veri tipi sayısal değil. Böyle iken onu raporumuza getirirsek, veriler üzerinde bir SUM, MAX, MİN vb. bir hesaplama yapılamayacaktır.
Aşağıdaki görselde deneyelim; bakın toplama ya da ortalama gibi bir sonuç gelmedi, bir çok sayı geldi. Peki bu sayılar, bizim veri tablomuzdaki Adet sütununun birebir aynısı mı?
Otomatik gelen Aggregation’ı görmek için yine küçük ok simgesine tıkladığımızda, “Don’t Summarize” , Türkçe versiyon ekranlarda “Özetleme” seçeneğinin aktif geldiğini görürüz. Adet sütunun veri tipini düzeltip yeniden istediğimiz aggregation’ı yapmasını sağlayabiliriz ama bunu yapmadan önce bir çok kullanıcının gözünden kaçan bir noktaya değinelim.
Yazının en başında satış verilerimizin 121 satır olduğunu belirtmiştik. Ancak gelen data, verilerimizdeki data gibi 121 satır değil. Genellikle kullanıcılar “Don’t Summarize” seçeneği aktifse, verilerin tamamının geldiğini düşünür. Ancak durum öyle değil. Buradaki gibi veri tipiniz Text ise Don’t summarize seçeneği aktif olur ve gelen veri Distinct olarak datadan her veriden bir tane olacak şekilde özetleyerek gelir. Yani şuan bu gelen sayılar, veri tablonuzdaki adet sütunundaki her bir sayıdan birer tane gösteriyor. Bunu Excel’deki Remove Duplicates / Yinelenenleri Kaldır işlemine benzetebiliriz. Verilerin tamamını satır satır burada göstermek istersek, tekrar etmeyen yani distinct bir sütunu rapora eklememiz gerekirdi ki her satır görünebilrsin. Örneğin bizim satış verilerimizde bir ID sütunu mevcut, onu getirebiliriz.
SatisID sütunumuz da sayısal bir alan olduğu için Power BI veri tipini sayı olarak algılamış durumda. Bu nedenle o sütunu adet’in yanına bıraktığımızda Adeti 10 olan satırların Satış ID sütun toplamını alıyor. Bir alttaki görselde olduğu gibi, Aggregation’ı gösteren ok simgesinden hesaplama türünü “Don’t Summarize” olarak değiştiririz.
Böylece kaynak verilerimizdeki tüm satışlar açılmış oldu, artık satış ID sütununda bir aggregation olmadığından, filtre görevi görebiliyor ve her bir satış ID’nin veri tablosundaki Adet değeri görünmüş oldu.
Başka bir örnek yapalım. Farzedelim toplam adet sonucunu görmek istiyoruz. O halde Adet sütunun veri tipi mutlaka sayı olmalıdır. Veri tipi değiştirmeyi de buraya sıkıştıralım. Veri tipi değişikliklerini Power Query/ Transform Data’dan da yapabilirsiniz (ayrı bir yazı konuşu, tüm veri tipi değişikliklerini tek satırda yapardak küçük bir performans kazancı sağlar) ya da burada iken Adet sütunu seçince görünen, Column tools sekmesinden, Data Type alanından tam sayı alanlar için Whole Number seçeriz. (tam sayı alanlar için Whole, ondalıklı alanlar için Decimal seçebiliriz) Bu veri tipi tanımlamalarına projenin en başında biraz zaman ayırıp düzenlemekte fayda var.
Artık veri tipi Sayı olduğu için bundan sonra bir tabloya çektiğimizde anında aggregation yapılır ve toplam hesaplanır.
Aggregation Fonksiyonlarının Default Seçeneğini Ayarlama kısmına geçmeden önce, daha ilerde anlatılacak olan filtre özelliğinden kısaca bahsedelim.
Power BI tıpkı Pivot Table gibi filtreleme mantığı ile çalışır. Yani bu tablonun yanında, şehirler tablosundan şehir adlarını getirdiğimizde sonuç aşağıdaki gibi olur.
Yalnızca “Aggregation yapılmamış veri” filtre görevi görür!
Yani Şehir adı “don’t summarize” olarak gelmiştir. Böylece her satırda, aggregation hesaplanmadan önce verilerin olduğu tabloya satırdaki şehir filtresi gönderilir. Örneğin 1.satır için Şehir Adı Ankara olan satırlar filtrelenir, süzülmüş verilerin Adet sütunu toplanır. Aynı şekilde tüm şehirlerin satırında bu işlem tekrar edilir. Total Satırında da !
Total kelimesi bizi yanıltmasın, orada gerçekleşen işlem üstteki sayıların toplamını almak değildir. Yani 157 + 92 + 980 + 64 + 144 diye bir işlem gerçekleşmiyor.
Orada gerçekleşen işlem de üsttekilerin aynısıdır. Rapor nasıl ki her satırın filtresinin hangi şehir olduğuna bakarak o filtreyi tabloya uyguladı ise, Total satırında da mevcut filtrenin ne olduğuna bakıyor. Burada bir şehir filtresi yok, yani tüm şehirler yani Filtrede “ALL” / “Tümü” seçeneğinin aktif olduğunu hayal edin, böylece Şehir Adı sütununda filtresi olmayan bir tablodan Adet sütunlarını topluyor ve sonucu yazıyor. Yani tablo 121 satır ise ve raporda başka bir slicer vb. filtreleme yoksa, 121 satırlık datadan Adet sütunlarını topluyor. Detay yazı burada.
Yukarıda her iki şekilde de sonuç 1437 çıktığından tam anlaşılmamış olabilir ama küçük bir örnek daha yapalım. Şehir bazlı max satış adedini görelim. Adet’in Aggregation seçeneğini MAX yapalım ve burada Total satırını inceleyelim.
Şehir adı yazan sütunlarda işlem:
Ankara satırında iken Satışlar tablosunun Şehir Adı sütununa Ankara filtresi gönderilir, süzülen verilerin Adet sütunundaki en büyük Adet değeri seçilir.
Total Satırında İşlem: Total satırında herhangi bir Şehir filtresi bulunmuyor, bu nedenle Satışlar tablosunda Şehir adı sütununda hiçbir filtre yokken, Adet sütunun en büyük değeri getirilir.
Görüldüğü üzere sonuç üsttekilerin toplamı değildir. Aggregation seçeneği ne ise, onun Şehir adı filtresi olmayan/tüm şehirlerin bulunduğu datadaki sonucudur. Max ise Max, Min ise Min, Sum ise Sum işlemi.
Tavsiyem konuları, gelen değerleri anlamaya çalışırken, tablo grafik ile çalışın. Sonuçlara güvendiğinizde istediğiniz diğer grafiklere dönüştürün.
Özet: Mevcutta Power BI’a yüklediğimiz verilerin içinde adet toplamı, şehir bazlı adet toplamı, şehir adedi, her şehrin en yüksek satış adedi gibi toplam, ortalama, max vb. sayılar yoktu. Veriler sadece ne zaman, nerede, kaç tane, kaç liralık satış yapıldığını gösteriyordu. Bu verilerden, şehir bazlı adet toplamı, şehir adedi, her şehrin en yüksek satış adedi gibi toplam çıkarabilmek için sadece gerekli alanları rapora taşıdık, hesaplama seçtik. Rapordaki filtrelere göre otomatikman hesaplamalar o anda hesaplandı. İşte bu şekilde verilere sütun olarak eklemeden, sonuçlarını sadece rapor üzerinde gördüğümüz hesaplama türüne “Measure” diyoruz. Çok kapsamlı bir konsept Power BI öğrenme sürecinizin %60’ı diyebilirim. Buradaki measure’ları biz yazmayıp direkt Power BI listesinden seçtiğimiz için de bunlara İmplict Measure deniyor.
Implict measure’larla yapabileceklerimiz çok sınırlı. Bu nedenle mutlaka Explict denilen yani kendimizin yazdığı measure yapısını öğrenmeliyiz. Hatta gerçek projelerde, adet, tutar gibi sürekli kullanılacak sütunlar için kendimiz en başta birer measure yazar koyarız kenara. Rapor geliştirirken de bir daha sürekli bu measure’ları kullanırız. Peki o zaman dahili olanları tanımamıza gerek yok demeyin elbette, bir takım kontroller yaparken her test için measure oluşturmuyoruz, o sırada hemen dahili olanları kullanıyoruz. Bu nedenle ikisini de bilmek zorundayız. Measure oluşturma hakkında şuradaki Dax’a giriş videosunu izleyebilirsiniz.
Aggregation Fonksiyonlarının Default Seçeneğini Ayarlama
Konuyu kapatmadan, sık sık proje yapanlar için zaman kazandırıcı güzel bir özelliği daha paylaşmak isterim.
Örneğin Satış ID bizim hiçbir zaman toplamak istemeyeceğimiz bir sütun ancak veri tipi sayı olduğu için, rapora taşıdığımızda default olarak SUM yapılıyor. Bu default gelen özetleme biçimini belirleyebiliriz! Önce SatisID sütununu seçeriz, böylece Column Tools sekmesi görünür. Buradan Summarization listesinden “Don’t Summarize” seçeneğini seçeriz.
Böylece yanındaki Sigma simgesi kalkar ve bundan sonra rapora taşıdığımızda herhangi bir işlem yapılmadan distinct olacak biçimde değerleri gelir.
Bir sonraki yazıda, Power BI’da hesaplamalar için sihirli değneğimiz olmasını sağlayan Explict Aggregations kullanımından bahsedeceğiz.
Görüşmek Üzere