CALCULATE ve Basit Filtreler

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.

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 kayıtlı üyeler görebilir. Giriş veya Üyelik için login.