DAX’ta Bağlamlara Giriş 2: Filter Context (Filtre Bağlamı) Nedir

Filtre bağlamı, DAX’ta veri analizini etkileyen en önemli unsurlardan biridir ve satır bağlamı ile birlikte düşünülmesi gerekir. Önceki yazımızda satır bağlamını ele almıştık; henüz okumadıysanız buradan ulaşabilirsiniz:

DAX’ta Bağlamlara Giriş 1: Row Context (Satır Bağlamı) nedir

Filtre bağlamı ise görsellerde gördüğümüz verilerin aktif filtrelere göre nasıl değiştiğini açıklar. Satır bağlamı, her satırdaki hesaplamaları belirlerken; filtre bağlamı, bu hesaplamaların tüm veri modeli üzerinde nasıl uygulanacağını tanımlar.

Filtre bağlamı basit anlamıyla görsellerde gördüğümüz sonuçların, aktif olan filtrelere göre dinamik olarak değişimini anlatır. Formül motoru tek bir öğeyi hesaplar ancak filtreler sayesinde, görsellerdeki her bir noktada, hücrede, sütunda vb, farklı sonuçlar gözlenir.

Örneğimizde satır bağlamı konusunda vermiş olduğumuz satış döviz tutarı ölçüsünü kullanalım. Siz de denemek isterseniz Contoso Power BI dosyasını buradan indirebilirsiniz.

Satış Döviz Tutarı = 

 SUMX(
    Sales, 
    Sales[SalesQuantity] * Sales[UnitPrice]
 )

Ölçümüz, 3 noktada, marka (BrandName) dilimleyicisi, ardından sınıf (ClassName) ve tekrar marka kırılımlarıyla, filtreleniyor. Başka bir açıdan, tek bir ölçümüz olmasına rağmen, uyguladığımız filtrelerle, görselde birçok farklı sonuç elde ediyoruz.

Bir sonraki aşamamız CALCULATE() fonksiyonunu kullanarak DAX yolu ile filtreleri bir ileri aşamaya taşımak. CALCULATE() fonksiyonu ile yeni filtreler ekleyebilir, var olan filtreleri kaldırabilir, veri modelindeki ilişkileri aktif/pasif yapabilir, tablolar arasında kurulan ilişkilerin yönünü değiştirebiliriz.

Contoso Satışlar = 

VAR _ContosoSatis =
    CALCULATE(
        [Satış Döviz Tutarı],
        'Product'[BrandName]  ="Contoso"
    )
RETURN _ContosoSatis

Yeni oluşturduğumuz “Contoso Satışlar” adlı ölçüde CALCULATE() fonksiyonunu kullanarak Contoso markasını filtreledik. Filtre bağlamı nüanslarla dolu bir konu ve DAX serüveni boyunca sürekli farkındalık isteyen konular arasında. Anlatımı zorlaştırmadan nüanslara da birkaç örnek ekleyelim.

Contoso markasını filtrelediğimizden bahsettik ancak tablomuzda nasıl göründüğüne bir bakalım

Matrix görselinde her satırda tekrar eden Contoso satış değerlerini görmek yerine, yalnızca Contoso satışlarını göstermek istiyorsanız KEEPFILTERS() fonksiyonunu devreye sokabilirsiniz. Bu fonksiyon sayesinde, her satırda aynı işlemi yapmak yerine, Contoso’ya ait filtreleri tutarak tekrarların önüne geçebiliriz. Bu sayede çoğu durumda majör performans artışı da sağlanabildiğini not aldıktan sonra, formülümüzü biraz geliştirelim ve Contoso veya Fabrikam satışlarını bize getirmesini isteyelim. Tekrar eden satırlar olmadan..

Contoso veya Fabrikam Satışlar = 

VAR _ContosoVeyaFabrikamKeepfilters =
    CALCULATE(
        [Satış Döviz Tutarı],
        KEEPFILTERS('Product'[BrandName] IN {"Contoso", "Fabrikam"})
    )
RETURN _ContosoVeyaFabrikamKeepfilters
This image has an empty alt attribute; its file name is Filtre-Baglami-1.4.png

Şimdi ise REMOVEFILTERS() fonksiyonunu kullanarak Brandname filtresini kaldıralım. BrandName hem dilimleyicide filtreleniyor hem de matrix görselimizin içerisinde bir kırılım olarak filtreleniyor. Bu filtreyi kaldırdığımızda neler olacağını görelim:

RemoveFilters BrandName = 

VAR _Result =
    CALCULATE(
        [Satış Döviz Tutarı],
        REMOVEFILTERS('Product'[BrandName])
    )
 RETURN _Result

BrandName kırılımındaki filtreyi hem dilimleyiciden hem de kırılımın içerisinden kaldırmış olduk. Bu yüzden, matrix görselindeki Satış Döviz Tutarı toplamından daha büyük tutarlar görüyoruz. 1958M tüm delüx satışlar toplamı, 1208M tüm ekonomi satışlar toplamını ifade ediyor. 

Filtre bağlamının nüanslarla dolu olduğundan bahsettik. DAX yazmak, fonksiyonların iç içe ve bağlamlarla nasıl çalıştığını anlamakla yakından ilgili; sürekli olarak gözlem ve denemeler yapmayı gerektiren bir yolculuk. DAX ve filtre bağlamları üzerinde ne kadar hakimiyet kurarsanız, raporlarınızdaki bilgilerin ve sonuçların tutarlılığı da ve verimliliği de o kadar artar. 

Satır bağlamı yazımızda kullandığımız aynı SUMX() fonksiyonunun, hem satır hem de filtre bağlamında nasıl çalıştığını merak etmiş olabilirsiniz. SUMX fonksiyonunu bir ölçü olarak tanımladığımızda, artık satır bağlamından çıkıp filtre bağlamına geçiyoruz. Böylece SUMX, filtrelerle etkileşime girerek görselde farklı sonuçlar üretebiliyor. Bu konuya, bağlam geçişini anlattığımız yazımızda daha geniş yer vereceğiz. Yazımıza linkten ulaşabilirsiniz:

DAX’ta Bağlamlara Giriş 3: Context Transition (Bağlam Geçişi) nedir