Veri modeline giriş yazısında, Power BI hesaplama yaparken her bir hücreyi ayrı ayrı ilgili context altında hesaplar, buna Total (Toplam) satırı da dahil demiştim. Total satırı toplam satırı demek değildir, bir özet satırıdır. Aynen diğer hücrelerde olduğu gibi, total satırının da her bir hücresi, gördüğü context üzerinden hesaplanır.
Contoso modeli üzerinde aşağıdaki gibi metriklerimiz var.
Satışlar := SUM ('Satışlar'[Tutar] )
Satış Yapılan Gün Sayısı := DISTINCTCOUNT ('Satışlar'[Fatura Tarihi] )
Günlük Satışlar := DIVIDE ( [Satışlar] ; [Satış Yapılan Gün Sayısı] )
Tüm metrikleri aşağıdaki gibi bir matrise düşürelim:
Her bir kategorinin satıldığı gün sayısı farklı. Bisikletler 2004 yılında 182 farklı günde satılmış. 2004 satırına yani Total satırına baktığımızda, 2004 yılında 213 farklı günde satış yapıldığını görüyoruz.
Yukarıdaki cümleye geri dönüyorum: Total satırının her bir hücresi, aynen diğer hücreler gibi gördüğü context altında hesaplanır.
2004 Total satırı için [Satış Yapılan Gün Sayısı] metriğinin gördüğü context, 2004 yılına ait fatura satırlarıdır ve bu satırlardaki tekil fatura tarihini sayıyor. Aynı gün hem aksesuar, hem bisiklet hem de elbiseler kategorilerinden satış yapıldıysa bunu 1 gün olarak sayar.
Aynı metriğin 2004-Bisikletler satırı için gördüğü context, 2004 yılında kategorisi bisiklet olan ürünlerin olduğu fatura satırlarıdır. Bu satırlardaki tekil fatura tarihini sayar.
Bisikletlerin satışlarını, bisiklet satılan gün sayısına böldüğümüzde 50.342 çıkıyor.
2004 yılının satışlarını, 2004 yılında satış yapılan gün sayısına böldüğümüzde 45.873 çıkıyor.
Yani formüller doğru çalışıyor!
Fakat şöyle bir durum ortaya çıkıyor: 2004 yılının günlük satışları, nasıl oluyor da tek bir kategorinin günlük satışından daha az!
Aslında cevap belli, her bir kategorinin satıldığı gün sayısı farklı, 2004 yılı için satış yapılan gün sayısı her bir kategorinin satıldığı gün sayısının toplamı değil.
Fakat Total satırı için görmek istediğimiz rakam, tüm kategorilerin günlük satışlarının toplamı. Bu durumda [Günlük Satışlar] metriğini biraz modifiye etmemiz lazım.
Satır bazındaki rakamlar doğru, fakat toplam satırı istediğimiz gibi değil. Dolayısıyla metriği modifiye ederken kategori satırında mıyız yoksa toplam satırında mıyız anlamamız lazım.
Bunun için şöyle bir kalıp kullanabiliriz:
IF (
HASONEVALUE ( 'Ürünler'[Kategori] ) ;
"Satırdaysak ne yapacağız" ;
"Satırda değilsek, yani toplam satırındaysak ne yapacağız" )
)
HASONEVALUE (‘Ürünler'[Kategori]) True dönerse, yani 1 dönerse toplam satırında olmadığımızı, kategori satırında olduğumuzu anlarız. False dönerse toplam satırındayız demektir.
Kategori satırındaysak [Günlük Satışlar] metriğini döndüreceğiz, değilsek her bir kategori için [Günlük Satışlar] metriğini toplamamız lazım.
Günlük Satışlar Modifiye :=
IF (
HASONEVALUE ( 'Ürünler'[Kategori] ) ;
[Günlük Satışlar] ;
SUMX ( VALUES ( 'Ürünler'[Kategori] ) ; [Günlük Satışlar] )
)
Toplam satırındaysak VALUES ( ‘Ürünler'[Kategori] ) bize kategorilerin tekil listesini içeren tabloyu döndürür. SUMX bir iterator. Yani bir tablo verdiğinizde, tabloda gördüğü her bir satır için belirttiğiniz işlemi yapar, en sonunda her bir satır için bulduğu rakamları toplar.
Dolayısıyla SUMX ( VALUES ( ‘Ürünler'[Kategori] ); [Günlük Satışlar] ) kodu bize, gördüğü her bir kategori için [Günlük Satışlar] ‘ı hesaplar, gördüğü tüm kategorileri bitirdiğinde bulduğu rakamları toplar.
Toplam satırı, artık istediğimiz toplamı gösteriyor.
Yazıdaki modeli indirebilirsiniz.
Sadece üyeler görebilir. Hızlı üyelik için sosyal medya hesabınızla giriş yapabilirsiniz!
Yine çok güzel bir yazı olmuş. Heyecanla okudum. Emeğinize sağlık.