FILTER, ALL ve Context Etkileşimi

DAXDAX 101

Önceki yazıda FILTER kullanımına örnekler vermiştim, kısaca özetlemek gerekirse: FILTER, mevcut context’e yeni bir “condition” ekleyerek tabular engine’in gördüğü veri setini daraltır.

Kategorideki ürün sayısını ve siyah ürün sayısını hesaplamak üzere aşağıdaki gibi iki metriğimiz var.

Kategorideki Ürün Sayısı := 
COUNTROWS ( RELATEDTABLE ( 'Ürünler' ) )
Siyah Ürün Sayısı := 
COUNTROWS ( FILTER ( 'Ürünler'; 'Ürünler'[Renk] = "Siyah" ) )
filter

Her ikisini de bir matrise düşürüyorum, renk için “slicer” ekleyip herhangi bir seçim yapmıyorum.

Daha önce yazdığım basit ama önemli cümleleri bir kez daha tekrarlayacağım: DAX ile yazdığınız her bir formül, her bir hücre için ayrı ayrı, ilgili filter context altında hesaplanır.

Matristeki “Bilgisayarlar” satırı için, “Kategorideki Ürün Sayısı” metriğinin gördüğü veri seti, yani filter context’i, kategorisi bilgisayar olan ürünlerdir. Kategorisi bilgisayar olan 606 ürün saymış.

“Bilgisayarlar” satırı için “Siyah Ürün Sayısı” metriğinin gördüğü veri seti ise, kategorisi bilgisayar olan (tablolar arası ilişkilerden gelen orijinal filter context) ürünlerden rengi siyah olanlardır. FILTER komutu ile mevcut orijinal filter context’i bir daha filtreledik. Kategorisi bilgisayar olan 211 siyah ürün saymış.

Renk slicer’ından “Siyah” ‘ı seçtiğimizde matrisin görünümü aşağıdaki gibi oluyor.

Her iki metrik de aynı değerleri gösteriyor. Renk olarak slicer’dan siyah seçildiği için, “Kategorideki Ürün Sayısı” metriğinin filter context’i artık rengi siyah olan ürünler oldu. Dolayısıyla her iki metrik  de, formülleri farklı olmasına rağmen, aynı veri setini görüp sayıyorlar: “Siyah olan ürünler”.

Bu sefer slicer’dan “Kırmızı” yı seçiyorum. Matrisin görünümü değişti:

Filter context renk seçimiyle tekrar değişti: Her iki formülün de görebildiği veriseti, sadece rengi kırmızı olan ürünler. Kategorideki Ürün Sayısı metriği her bir kategorideki ürünleri sayarken sadece kırmızı renkli ürünleri görüyor. Kırmızı ürünler olarak değişen filter context içinde siyah ürün arayan diğer metrik ise haliyle hiçbir şey göremiyor ve boş (blank) döndürüyor.

Siyah ürünleri sayan metriğin formülünü ALL fonksiyonu ile farklı bir şekilde yazıyorum ve aynı matrise düşürüyorum.

Siyah Ürün Sayısı ALL := 
COUNTROWS ( FILTER ( ALL ( 'Ürünler' ); 'Ürünler'[Renk] = "Siyah" ) )

ALL (‘Ürünler’) dediğimizde tabular engine, ‘Ürünler’ tablosunu filtreleyen her türlü filtreyi, tablo ilişkilerinden gelen doğal filter context’i, “Bilgisayarlar” satırı için hesaplama yaparken “Bilgisayarlar” kategorisini, renk slicer’ından seçilen varsa herhangi bir rengi, hiçbirini umursamıyor, görmezden geliyor ve kaldırıyor. Yani tüm ‘Ürünler’ tablosunu görüyor. Bu durumda formülün gördüğü ve saydığı veri seti, tüm ürünler içerisinde rengi siyah olanlar. Matrise ne koyarsanız koyun, renklerden hangisini seçerseniz seçin, TÜM ürünleri görüyor hesaplama yaparken.

ALL komutu, ALL( Tablo Adı) formunda kullanıldığında, ilgili tablo üzerinde -nereden gelirse gelsin- ne kadar filtre varsa hepsini kaldırır ve tüm tabloyu görür.

ALL fonksiyonunu ve diğer varyasyonlarını ( ALLEXCEPT, ALLSELECTED ) etkili bir şekilde kullanmak için CALCULATE fonksiyonuna ihtiyacımız var, şimdilik ALL ve ekürisinin, mevcut filter context’i görmezden gelebilecek yegane komut seti olduğunu not edebiliriz.

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,4K Üye