Hesaplanmış Sütun Olarak Kümülatif Toplam Alma

Power BI 'da DAX ile kümülatif toplam alma yazısından sonra "Kümülatif toplamları hesaplanmış sütun olarak nasıl yapabiliriz?"  soruları geldi. Önceki yazının devamı olarak eklemek istedim.

Kategori bazında yıllık ve aylık satışları içeren  hesaplanmış bir tablo  oluşturalım. Bunu da SUMMARIZE ile yapalım, sonraki yazıların konusu olacak gruplama ve tablo oluşturma yazılarına da basit bir giriş olmuş olur böylelikle. Modelling menüsünden " New Table" diyerek aşağıdali formülü yazıyorum.

Yıl ve Aylara Göre Kategori Satışları =
SUMMARIZE( 'Satışlar' ;
'Kategoriler'[Kategori] ; 'Kategoriler'[Kategori ID] ;
'Tarih'[Yıl] ; 'Tarih'[Ay No] ;
"Kategori Satışları" ; SUM( 'Satışlar'[Tutar] )
)

SUMMARIZE kabaca tariflemek gerekirse SQL'deki Group By 'a benziyor. "Satışlar" tablosunu Kategori, Kategori ID, Yıl ve Ay bazında gruplamış (özetlemiş) olduk.  Group By sütunu olarak kullanabileceğimiz sütunlar  ya ilk parametreye verdiğimiz tablodan olabilir, ya da bu tablonun RELATED tarafında -yani One tarafında- olan tablolardan gelebilir.


Hatta bu dönen tabloyu da -satır sayısını azaltmak adına ve gene diğer yazılara ufak bir giriş olması açısından- daraltıyorum. Satış büyüklüğü 130,000 'in üzerinde olan Yıl-Ay No-Kategori-Kategori ID kombinasyonları gelsin!

Yıl ve Aylara Göre Kategori Satışları = 
FILTER (
    SUMMARIZE (
        'Satışlar';
        'Kategoriler'[Kategori];
        'Kategoriler'[Kategori ID];
        'Tarih'[Yıl];
        'Tarih'[Ay No];
        "Kategori Satışları"; SUM ( 'Satışlar'[Tutar] )
    );
    [Kategori Satışları] > 130000
)


Hatta tabloyu düzgün sıralamak için de hesaplanmış sütun olarak bir Yıl-Ay No sütunu ekleyelim!


Kümülatif hesaplamalarda hep bize bir referans alabileceğimiz indeks -sıralama- sütunu lazım! Eğer amaç Kategori bazında kümülatif bulmaksa "Kategori ID" sütununu, ay bazında kümülatif almaksa "Yıl-Ay" sütununu kullanabiliriz.

Daha önce yazdığım EARLIER fonksiyonu bunun için en uygun fonksiyon. Yazıyı okumanızı öneririm, çünkü doğrudan formülü yazacağım!

Aylara Göre Kümülatif = 
CALCULATE( SUM( 'Kategori Satışları'[Kategori Satışları] ) ;
    FILTER( 'Kategori Satışları' ;
        'Kategori Satışları'[Yıl-Ay No] <= EARLIER( 'Kategori Satışları'[Yıl-Ay No] )
    )
)

** "Yıl-Ay No" text tipinde bir sütun olmasına rağmen >=, <= gibi operatörlerle A-Z veya Z-A mantığına göre çalışıyor!

** Dikkatli okurun gözünden kaçmayacaktır, tablonun orijinal adını formül çok geniş alana yayılıp zor okunmasın diye "Kategori Satışları" diye değiştirip kısalttım. Blog yazılarında formülde refere edeceğim tabloların ismini çok uzun tutmamak lazımmış. Bu da bana ders olsun! Her neyse.


EARLIER olmaksızın değişken kullanarak da benzer bir kümülatif formülü yazabiliriz.

Aylara Göre Kümülatif_VAR = 
Var SatirdakiKategorininYilAyi = 'Kategori Satışları'[Yıl-Ay No]
-- Bu yukarıdaki '....'[Yıl-Ay No], hesaplanmış sütunun iterate ettiği satırın [Yıl-Ay No] değeri!
-- Satırdaki değer neyse bir kez bulunacak ve değeri değişkene atanacak!
RETURN
CALCULATE( SUM( 'Kategori Satışları'[Kategori Satışları] ) ;
    FILTER( 'Kategori Satışları' ;
        'Kategori Satışları'[Yıl-Ay No] <= SatirdakiKategorininYilAyi
    )
)
-- FILTER 'ın altındaki ...[Yıl-AY No] ise, FILTER 'in iterate ettiği satırın [Yıl-Ay No] değeri!
-- Bu değeri daha önce hesaplanan değişkenle karşılaştıracak!


Bu kümülatifin yıl değişiminde tekrar sıfırdan başlaması için, yani daha düzgün Türkçe'yle yıllık kümülatife dönüştürmek için formülü VALUES ile veya ALLEXCEPT ile modifiye etmek mümkün.

Yıllık Kümülatif = 
CALCULATE( SUM( 'Kategori Satışları'[Kategori Satışları] ) ;
    FILTER(
        ALLEXCEPT( 'Kategori Satışları' ; 'Kategori Satışları'[Yıl] ) ;
        'Kategori Satışları'[Yıl-Ay No] <= EARLIER( 'Kategori Satışları'[Yıl-Ay No] )
    )
)

** Yukarıdaki formül FILTER olmadan da çalışır! Yazıdaki formüllerin mantığını bozmamak için eklemiyorum ama modelde görebilirsiniz.

Yazıdaki modeli indirebilirsiniz.

Sadece kayıtlı üyeler görebilir. Giriş veya Üyelik için login.