CALCULATE ve Basit Filtreler

DAXDAX 101

DAX’ın en önemli fonksiyonlarından olan CALCULATE ile ilgili örneklere devam ederken sık yapılan kalıp hatalarını da biraz açmaya çalışalım. Önceki giriş yazısına da göz atmak isteyebilirsiniz.

‘Satışlar’ tablosundaki [Tutar] sütununu toplayan temel metriğimizle birlikte iki farklı CALCULATE formülü yazalım:

Satışlar := SUM('Satışlar'[Tutar])
Kalıp 1 Siyah Ürün Satışları :=
CALCULATE ( [Satışlar]; 'Ürünler'[Renk] = "Siyah" )
Kalıp 2 Siyah Ürün Satışları :=
CALCULATE ( [Satışlar]; 
          FILTER ( 'Ürünler'; 'Ürünler'[Renk] = "Siyah" )
)

Her iki formül de, kullandığınız görsele ne düşürdüğünüze göre bazen aynı sonucu verebilir.

calculate

Fakat her iki formülün semantiği tamamen farklıdır. Matrise [Renk] sütununu düşürdüğümüzde bu fark gayet net bir şekilde ortaya çıkar.

Kalıp 1 formülünün arka taraftaki açılımı şöyledir:

Kalıp 1 Açılım :=
CALCULATE (
    [Satışlar];
    FILTER ( ALL ( 'Ürünler'[Renk] ); 'Ürünler'[Renk] = "Siyah" )
)

Kalıp 1, açılımındaki ALL (‘Ürünler'[Renk]) ile [Renk] sütununu filtreleyen her şeyi kaldırır ve bu sütun üzerinde kendi context’ini yaratır: Siyah ürünler.  Dolayısıyla matristeki satırda hangi renk gözükürse gözüksün bunu umursamaz ve her zaman rengi siyah olan ürünleri görür.

Kalıp 2 ise, mevcut filter context neyse, bu context altındaki siyah ürünleri bulmaya çalışır. Kalıp 2 formülü -örneğin-, matriste “Kırmızı” rengin olduğu  satırdaki hücre için hesaplama yapmaya çalışırken, gördüğü filter context’teki ürünler rengi “Kırmızı” olan ürünlerdir. Context’te sadece “Kırmızı” ürünler olduğundan bunların içinde “Siyah” ürün bulamaz ve hiçbir şey döndürmez.

“Siyah” rengin olduğu satırdaki hücre için hesaplama yaparken gördüğü filter context rengi siyah olan ürünlerdir, Siyah ürünler içinde Siyah ürün arayan Kalıp 2 formülü, doğal olarak mevcut filter context’ten gelen siyah ürünlerin satışını hesaplar.

Matristeki “Siyah” satırı için, her 3 formülün de aynı rakamı göstermesi tamamen gördükleri, üzerinde çalıştıkları filter context’in aynı olmasından kaynaklanıyor.

DAX’ta her bir hücre ayrı ayrı, ilgili filter context altında hesaplanır, ne kadar tekrar etsem de -bu konsepte tamamen alışana kadar- az.

Kalıp 1’in açılımı, ‘Ürünler'[Renk] sütunu üzerindeki filtreleri kaldırıyor. Bu formülü biraz daha farklı bir şekilde yazalım ve sadece [Renk] sütunu değil, tüm ‘Ürünler’ tablosundaki filtreleri kaldıracak şekilde başka bir kalıp yazalım :

Kalıp 3 :=
CALCULATE (
    [Satışlar];
    FILTER ( ALL ( 'Ürünler' ); 'Ürünler'[Renk] = "Siyah" )
)

Her iki formül de gene matrise ne düşürdüğünüze göre bazen aynı rakamları gösterebilir.

Fakat birisi sadece [Renk] sütununun filtrelerini kaldırıyor, diğeri ise ‘Ürünler’ tablosundaki tüm filtreleri kaldırıyor. Dolayısıyla [Renk] sütunu haricinde filter context’i değiştiren yeni bir filtre konduğunda -örneğin ürün kategorilerilerinden Bilgisayarları seçmek gibi- , Kalıp 1 bu filtreye riayet edecektir, fakat Kalıp 3 umursamayacaktır.


Yazıdaki modeli indirebilirsiniz.

Sadece üyeler görebilir. Hızlı üyelik için sosyal medya hesabınızla giriş yapabilirsiniz!

Bloga sosyal medya hesabınızla hızlı üye olmak için ilgili ikonu tıklayabilirsiniz.

Yorum yapın

PowerBI İstanbul

Microsoft Power BI, Microsoft Fabric, veriyle ilgili Azure servisleri, veri analitiği, iş zekası, veri modelleme ve veri görselleştirme üzerine Türkçe bilgi içeriğine katkı sağlamayı amaçlar.

Intellect BI blog sitesidir. Intellect BI & PowerBI İstanbul, Microsoft Data Analytics ve Power BI Partneri 'dir.

Blog Yazılarına Üye Olun

Blog yazıları, eğitim ve meetup duyuruları posta kutunuza gelsin!

9,6K Üye