DAX Toplayıcı (Aggregate) Fonksiyonları
Power BI ’da en çok kullanılan fonksiyonlardan biri olan DAX Toplayıcı (Aggregate) Fonksiyonları’ nı Power BI ‘da örnek raporlarda kullanımlarını inceleyerek aktarmaya çalışacağım.
Genel olarak Power BI raporları hazırlanırken, hazırlanan raporların içeriğine, detayına ve veri türlerine göre Power BI ’da DAX Fonksiyonları ‘nın çok karmaşık kullanımları söz konusu olabilir.
Power BI ‘da DAX Fonksiyonları yazı dizisini oluştururken genel olarak basit örneklerden yola çıkarak daha karmaşık DAX Fonksiyonları yazmaya çalışacağız.
Bu bölümde sizin katkınız da çok önemli. Çünkü oluşturulan her Power BI raporunun kendine özgü bir ahengi var ve bu çeşitlilikten herkesin yararlanması için sizden gelecek olan DAX Fonksiyon örneklerini de yazı dizisinin ilgili bölümlerine gönderen kişiyi de kaynak olarak gösterip eklemeyi hedefliyorum.
Farklı bir çözüme hitap eden ve paylaşmak istediğiniz Power BI DAX Fonksiyon örneklerinizi [email protected] ya da [email protected] e-posta adreslerine gönderebilirsiniz. Katkılarınız için şimdiden teşekkür ederim.
DAX Toplayıcı (Aggregate) Fonksiyonları
DAX Toplayıcı (Aggregate) Fonksiyonları (SUM, AVERAGE, MIN, MAX…) bir parametre ile çalışan sütun bazlı fonksiyonlardır. Üzerinde işlem yaptıkları sütunu parametre olarak alırlar. Tek bir sütun üzerinde çalışırlar ve satırı görmezler.
Fakat X ile biten özel toplama işlevleri (SUMX gibi) ile birden çok sütunda çalışılabilir. Bu işlevler tablonun tamamında yinelenir (iterator) ve ifadeyi her bir satır için değerlendirir.
Ayrıca DAX Toplayıcı (Aggregate) Fonksiyonları sadece Date ve Boolean harici diğer Sayısal Veri Tiplerinde (Numeric Types) çalışırlar.
SUM ( ) Fonksiyonu
[code]Total Amount = SUM (ColumnName) [/code]
Bu bölümde “Total Amount” olarak isimlendirdiğimiz hesaplanmış bir kolon-sütun (column) ya da ölçü (measure) olabilir.
Column (Hesaplanmış Kolon/Sütun) ve Measure (Ölçü) ile ilgili ayrıntılı bilgiyi Power BI ’da DAX ile Measure ve Column Kullanımı başlıklı yazımdan inceleyebilirsiniz.
[code]Toplam_Satis = SUM (‘SIPARISLER'[Birim_Fiyat] * ‘SIPARISLER'[Miktar] )
//Hata-Error [/code]
şeklinde kullanımda hata verecektir. Hatanın sebebi ise daha önce de belirttiğim gibi SUM fonksiyonu satırları parametre olarak almazlar, sadece tek bir sütunu parametre olarak alabilirler.
Aşağıdaki örnekte bazı ürünlerin satış rakamlarının yer aldığı veri kümesinden bir görsel paylaştım. Genel olarak bu veri kümesinde bulunan “Ciro” alanı bizim satış rakamlarımızı Ürün Grubu bazında kırarak göstermektedir.
Fakat SUM ( ) fonksiyonunun nasıl kullanıldığını ve aldığı parametreyi veri kümesinde bulunan satırlarda nasıl göstereceği konusunda örnek olması açısından SUM fonksiyonu ile bir Hesaplanmış Kolonun-Sütunun (Column) oluşturacağız.
Aşağıdaki ekran görüntüsünde SUM fonksiyonu ile oluşturulan Hesaplanmış Kolonun-Sütunun (Column) her bir satırda, aynı değeri yani tüm satışların toplamını tekrar ederek getirdiğini görebilirsiniz.
SUM fonksiyonunun neden bu şekilde aynı sütunda tekrarladığını daha iyi kavramak için SUM ( ) Fonksiyonunun hemen ardından, SUMX ( ) Fonksiyonunun kullanımını incelemenin daha yararlı olacağını düşünüyorum.
SUMX ( ) Fonksiyonu
SUMX ( ) Fonksiyonu yinelenen yani iterator bir fonksiyondur.
SUMX ( ) Fonksiyonu iki parametre alır.
[code] SUMX_Fonksiyonu = SUMX(TABLE ; EXPRESSION)[/code]
Yinelenecek table (tablo), doğrudan bir tablonun adı olabilir veya geriye tablo döndüren bir tablo fonksiyonu da olabilir. Burada önemli olan satır satır SUMX fonksiyonuna yazdığımız komutu çalıştıracak bir tablonun olması.
Yineleyen fonksiyonlar parametre olarak verilen tabloda gördüğü tüm satırlara ilk satırdan başlayarak, fonksiyonun ikinci parametresinde belirtilen ifadeyi (Expression) tek tek uygular. Bulduğu sonucu yineleyen fonksiyonu oluşturduğumuz hesaplanmış bir kolona-sütuna (column) ya da ölçüye (measure) yazar.
SUMX ( ) Fonksiyonunun nasıl kullanıldığını basitçe anlatabilmek amacıyla aşağıdaki örnek veri kümesini Power BI Desktop ‘ın Enter Data özelliği kullanarak manuel olarak oluşturdum. Veri kümesini incelediğimizde Ürünlerin (Product) ve bu ürünlerin satış miktarlarının (Quantity) ve ürünlerin birim fiyatlarının (UnitPrice) olduğunu görüyoruz.
SUMX ( ) Fonksiyonunu kullanarak her üründen ne kadar satış yapıldığını Hesaplanmış Kolon/Sütun (New Column) ile göstereceğiz.
[code]TotalSales = CALCULATE(SUMX(SALES;SALES[Quantity]*SALES[UnitPrice]))[/code]
Yazdığımız kodda CALCULATE ( ) fonksiyonunu kullandığımızı fark etmişsinizdir. Bunun sebebi SUMX ( ) Fonksiyonu içerisindeki ifadede matematiksel bir işlem/hesaplama yaptığımız için CALCULATE ( ) fonksiyonunu kullanmamızın gerekliliğindendir. Hemen gözünüz korkmasın DAX konularında ilerledikçe böyle iç içe bir çok fonksiyonu kullanacağımızdan dolayı buna alışmanız bakımından iyi bir örnek olduğunu düşünüyorum :)
CALCULATE ( ) fonksiyonunu ilerleyen bölümlerden ayrıntılı anlatacağız ama, genel olarak bir DAX fonksiyonu içerisinde filtreleme ( FILTER() ) fonksiyonunu veya bir matematiksel hesap yapıyorsak CALCULATE( ) fonksiyonunu kullanıyoruz. Eğer CALCULATE fonksiyonu kullanıyorsak veri kümesinde gizli bir filtre işlemi de uygulanıyor demektir.
Şöyle ki ; Her satırda SUMX ( ) fonksiyonuna yazılan işlem uygulandı ve daha sonra CALCULATE ( ) fonksiyonu Product alanına göre filtreledi ve tüm değerleri ürün bazında kırarak getirmiş oldu. CALCULATE () ile ilgili olarak şimdilik bu kadarını bilmemiz bizim için yeterli.
Bunun dışında yukarıdaki örnekte SUMX ( ) Fonksiyonunu CALCULATE ( ) fonksiyonu olmadan kullansaydık nasıl bir sonuç dönerdi ?
Yukarıda anlatılanlar ışığında SUM ( ) Fonksiyonuna benzer bir şekilde ürün bazında kırılım (Product) gerçekleşmeden her satırda tüm işlemlerin toplamı olan 5035,00 rakamını getirdi !
[code]TotalSales = SUMX(SALES;SALES[Quantity]*SALES[UnitPrice])[/code]
AVERAGE ( ) Fonksiyonu
Daha önce Excel gibi programları kullananlar genel olarak bilirler ki AVERAGE ( ) fonksiyonu belirtilen sütunu bir parametre olarak alır ve o sütundaki değerlerin ortalamasını bulur.
Eğer sütun veri tipi olarak metin içeriyorsa, hiç bir işlem yapılmaz ve boş döner. Sütun mantıksal (logical) değerler veya boş hücreler içeriyorsa, bu değerler göz ardı edilerek ortalama hesaplanır. Doğal olarak sıfır değerine sahip alanlar hesaplamaya dahil edilir.
Bir sayı kümesine değerlendiren bir ifadenin ortalamasını bulmak istiyorsak, bunun yerine AVERAGEX ( ) fonksiyonunu kullanmamız gerekir.
[code]QuantityAverage = AVERAGE(SALES[Quantity])[/code]
MIN ( ) Fonksiyonu
[code]MIN_FUNCTION = CALCULATE(MIN(ColumnNameOrScalar1;[Scalar2])[/code]
MIN ( ) Fonksiyonu, bir kolondaki (sütundaki) veya iki skaler ifade arasında bulunan en küçük sayısal değeri sonuç olarak döndürür.
Mantıksal (Lojik) değerleri ve metni yok sayar. MIN ( ) Fonksiyonu, Sayısal Veri Tiplerinde (Numeric Types) ve boşluklarda (blanks) çalışabilirler. Sayısal bir değer yok ise MIN ( ) Fonksiyonu boşlukları döndürür.
MIN ( ) Fonksiyonu ile ilgili olarak bir ölçü (measure) oluşturacağım ve daha önceki örnekte kullandığım veri kümesinde bulunan Birim Fiyat (UnitPrice) alanının en küçük değerini bir kart (card) görselinde göstereceğim.
Column Oluştururken Alınan ” A Circular Dependency Was Detected ” Hatası
Peki neden hesaplanmış kolon (column) kullanmadık da bir ölçü (measure) kullandık ?
SUMX ( ) Fonksiyonunu kullandığım veri kümesi üzerinden örneklememize devam ettiğimiz ve o örnekte CALCULATE ( ) Fonksiyonu içeren bir hesaplanmış kolon kullandığımız için tekrar CALCULATE ( ) Fonksiyonu içeren bir hesaplanmış kolon daha oluşturursak A circular dependency was detected… hatası alırız.
Bunun sebebi ise bir veri kümesinde sadece CALCULATE ( ) Fonksiyonu bir adet hesaplanmış kolon (column) kullanabilmemizden kaynaklanmaktadır.
Başka hangi durumlarda A circular dependency was detected:… hatasını alırız ? Bunu öğrenmek için Column Oluştururken Alınan ”A Circular Dependency Was Detected ” Hatası başlığını inceleyebilirsiniz.
MIN ( ) Fonksiyonunun Ölçü(Measure) İle Kullanılması
[code]MIN_FUNCTION_Measure = CALCULATE(MIN(SALES[UnitPrice]))[/code]
MAX ( ) Fonksiyonu
[code]MIN_FUNCTION = CALCULATE(MIN(ColumnNameOrScalar1;[Scalar2])[/code]
Sayısal değerler içeren tek bir sütun değerlendirilirken, sütunda sayı yok ise, MAX ( ) Fonksiyonu bir boşluk (Blank) döndürür.
Sayı olmayan değerler için MAXA ( ) Fonksiyonu kullanılır.
MAX ( ) Fonksiyonu ile iki ifadeyi karşılaştırırken boşluk değerler (blank) sıfır olarak değerlendirilir. Örnek olarak MAX (3, Blank() ) 3 değerini döndürürken, MAX (-2, Blank() ) sıfır değerini döndürür. Eğer MAX ( ) Fonksiyonuna yazılan değerlerin her ikisi de boşluk (blank) ise fonksiyon boşluk (blank) değeri döndürür.
[code]MIN_FUNCTION_Measure = CALCULATE(MIN(SALES[Quantity]))[/code]
DAX Fonksiyonlarına giriş yaptığım Power BI ‘da DAX Fonksiyonları başlıklı yazımı başlığa tıklayarak inceleyebilir, Power BI DAX Fonksiyonları yazı dizisinin başlıklarını ve içeriğini öğrenebilirsiniz.
Umarım sizi için faydalı bir yazı olmuştur. Konu ile ilgili sorunuz, öneriniz ve spesifik Power BI ‘da kullandığınız DAX fonksiyonları örneği var ise diğer arkadaşlarımızın da yararlanması ve bilgi birikimi oluşması açısından yorum bölümüne iletmenizi çok isterim.
İlerleyen yazılarımızda yukarıda örnekleri sunduğumuz DAX Fonksiyonlarının birbiriyle ilişkili ve daha karmaşık örneklerini ele alacağız. Bu anlatımın ve sizlerden gelecek örneklerle yer alaması ile birlikte başlangıç seviyesi için uygun olacağı kanaatindeyim.
Bir hatamız olduysa affola…
Görüşlerinizi, önerilerinizi ve sorularınızı yorum bölümüne yazabilirsiniz. Vakit buldukça cevaplamaya çalışacağım.
Takipte kalmanız dileğiyle…
Yazıda ciddi hatalar var, yarım yamalak anlatmayın anlatacaksanız da gerçekten bilerek anlatın, çok yanlış ve eksik bilgi var.
Merhabalar,
İsminizle hitap etmek isterdim ancak isminizi açık olarak yazmamışsınız. Öncelikle eleştiriniz için teşekkür ederim. Ancak yaklaşımınızın pek uygun olmadığını söylemeliyim. Yazıda hatalar olabilir. Ben bildiğim kadarıyla deneyerek, tecrübe ettikten sonra bu bloga aktarmaya çalışıyorum.
Böyle bir üslup yerine hatalı olan bölümü bana iletseniz, herkes için daha yararlı olmaz mı? Yanlışımı görmemi sağlamanız hem ben hem de bu blogtan yararlanmaya çalışan herkes için daha doğru olacağı kanaatindeyim.
Merhaba Okan Bey, emeğiniz ve bilginizi paylaştığınız için çok teşekkür ederim. Sorum şu olacak;
Dax kullanarak A hücresindeki değere göre, aynı satırdaki B hücresindeki değeri setleyebilir miyim?
Merhaba Uğur Bey,
Kullanım alanınızı çok net anlayamadım ama aşağıdaki kod size yardımcı olabilir sanırım.
A kolonundaki bir değere göre yeni bir B kolonu oluşturup set etmek istiyorsanız aşağıdaki şekilde kullanabilirsiniz.
ColumnB = switch(true();
ColumnA = “Araba”; “Audi”;
ColumnA = “Motorsiklet”; “Honda”;
“Bisan”)
Var olan bir kolonu set etmek isterseniz if/else yapısını kullanabilirsiniz.
Umarım yardımcı olabilmişimdir. Görüşmek üzere.