Power BI ‘da kompleks DAX formüllerini yazmayı kolaylaştıran değişken (variables) yapısı var.
Önceki yazıda bir giriş örneğini yaptığımız değişken kullanımına farklı örnekler verelim.
Aşağıdaki gibi metriklerimiz var:
Müşteri Sayısı := DISTINCTCOUNT ('Satışlar'[Müşteri ID])
Ortalama Müşteri Satışları := AVERAGEX ('Müşteriler' ; [Satışlar])
Bu ortalamanın üzerinde satış yapılan müşteri sayısını değişken kullanarak bulalım.
İyi Müşteri Sayısı =
VAR _OrtalamaMusteriSatisi = [Ortalama Müşteri Satışları]
RETURN
COUNTROWS(
FILTER('Müşteriler',
[Ortalama Müşteri Satışları] > _OrtalamaMusteriSatisi
)
)
Değişken isimleri arada boşluk veya Türkçe karakterleri desteklemiyor.
Burada bilinmesi gereken nokta değişkenin değerinin tanımlandığı yerdeki context’e göre hesaplanmasıdır. Kullanıldığı yerde tekrar hesaplama yapılmaz.
Değişkenin tanımlandığı yer VAR ile başlayan ikinci satır. Matristeki context şu an neyse, değişkenin değeri bu context’e göre bir kez hesaplanıyor. Kullanıldığı yer ise FILTER’ın içindeki altıncı satır.
FILTER, müşteriler tablosunu iterate ederken, her bir müşterinin satışını değişkenin daha önceden hesaplanmış değeriyle karşılaştırıyor.
Aynı hesaplamayı CALCULATE ile de yapabiliriz elbette.
İyi Müşteri Sayısı CALCULATE =
COUNTROWS (
FILTER ('Müşteriler',
[Satışlar] > CALCULATE ([Ortalama Müşteri Satışları] , ALL ('Müşteriler'))
)
)
VAR ile yazılmış kodu yazması da okuması da (debug etmesi de) daha kolay.
Bir başka örnek daha yapalım: satış frekansını bulalım, yani iki satış arasında geçen ortalama süreyi bulalım. Kurduğunuz cümleye göre farklı şekillerde hesaplanabilir.
Kaç Günde Bir Satış Yapıldı :=
VAR _IlkTarih = FIRSTDATE ('Satışlar'[Tarih])
VAR _SonTarih = LASTDATE ('Satışlar'[Tarih])
VAR _KacFarkliGundeSatisYapildi = DISTINCTCOUNT ('Satışlar'[Tarih])
RETURN
DIVIDE (_SonTarih - _IlkTarih ; _KacFarkliGundeSatisYapildi; 0)
Değişken yapısı olmadan bu formülü yazmak daha zor olurdu.
FIRSTDATE ve LASTDATE, verdiğimiz tarih tipindeki sütunda gördüğü ilk ve son tarihleri döndüren gayet basit ve kullanışlı iki fonksiyon.
Değişkenlerle yukarıdaki örneklerde olduğu gibi sayısal değerler hesaplanabileceği gibi tablolar da atanabilir!
Kırmızı Ürünlerin Geçen Ayki Satışları =
VAR _KirmiziUrunler=FILTER (ALL('Ürünler') ,'Ürünler'[Renk] ="Kırmızı")
RETURN
CALCULATE ([Satışlar],
_KirmiziUrunler ,
DATEADD ( 'Tarih'[Tarih] ,-1, MONTH )
)
DATEADD -daha sonra göreceğimiz time intelligence grubundaki fonksiyonlardan biri-, bir tarih sütunu verdiğimizde kaç periyod geriye gitmek istiyorsak bunu yapmamızı sağlıyor, periyod olarak gün, ay, çeyrek veya yıl seçebiliriz.
Değişkenler sadece metriklerde değil hesaplanmış sütunlarda da kullanılabilir. Yani DAX formülü yazabildiğimiz her yerde kullanabiliriz.
Yazıdaki modeli indirebilirsiniz.
Sadece üyeler görebilir. Hızlı üyelik için sosyal medya hesabınızla giriş yapabilirsiniz!
Merhabalar,
Kaç Günde Bir Satış Yapıldığını bulmamız için 4. satıra -1 eklememiz gerekmez mi?
“VAR KacFarkliGundeSatisYapildi = DISTINCTCOUNT (‘Satışlar'[Tarih]) -1”
Diyelim bir müşteriye 01.01.19 , 01.02.19 , 01.03.19 tarihlerinde satış yapıldı. Satışlar arasında geçen ortalama süre normalde 30 gün ama formül geçen süreyi 3 ‘e böleceği için (60/3) 20 gün olarak hesaplayacak.
Doğru mudur?
Merhabalar,
Kaç Günde Bir Satış Yapıldığını bulmamız için 4. satıra -1 eklememiz gerekmez mi?
“VAR KacFarkliGundeSatisYapildi = DISTINCTCOUNT (‘Satışlar'[Tarih]) -1”
Diyelim bir müşteriye 01.01.19 , 01.02.19 , 01.03.19 tarihlerinde satış yapıldı. Satışlar arasında geçen ortalama süre normalde 30 gün ama formül geçen süreyi 3 ‘e böleceği için (60/3) 20 gün olarak hesaplayacak.
Doğru mudur?
Doğrudur. “Kurduğunuz cümleye göre farklı şekillerde hesaplanabilir”
Doğrudur. “Kurduğunuz cümleye göre farklı şekillerde hesaplanabilir”