ISFILTERED, ISCROSSFILTERED Fonksiyonları, DAX Örnekleri
Filter context'i ve filter propagation 'ı (filtrelerin akmasını) biraz daha iyi anlamamızı sağlayacak ISFILTERED ve ISCROSSFILTERED fonksiyonlarını açalım. Bu fonksiyonları ileriki yazılarda özellikle matris görselinde bazı rasyo hesaplamalarında kullanacağız.
ISFILTERED ( Sütun Adı ) , verdiğimiz sütun üzerinde doğrudan bir filtre varsa TRUE döndürür, değilse FALSE döndürür. Doğrudan filtre olması demek, ilgili sütunun matriste satıra veya kolona düşürülmesi ya da dilimleyide olması demek ve filtrelenmiş olması demek.
ISCROSSFILTERED ( Tablo Adı veya Sütun Adı ) , fonksiyona verdiğimiz tablonun veya sütunun üzerinde dolaylı yoldan bir filtre olması durumunda TRUE döndürür, değilse FALSE döndürür. Dolaylı yoldan filtre olması demek, verdiğimiz sütunun üzerinde doğrudan değil, filter propagation 'dan dolayı bir filtre olması demek. Veya aynı tablodaki bir başka sütun üzerindeki filtreden dolayı filtre olması demek. Filter propagation 'ın, tablolar arasındaki ilişkiler boyunca ok yönünde filtrelerin akması anlamına geldiğini tekrar etmiş olalım.
Aşağıdaki gibi metriklerimiz var:
Renk Doğrudan Filtrelendi := ISFILTERED ('Ürünler'[Renk])
Kategori Doğrudan Filtrelendi := ISFILTERED ('Ürün Kategorileri'[Kategori])
Aşağıdaki gibi bir matrise düşürüyorum ve kategorileri dilimleyiciye ekliyorum fakat herhangi bir seçim yapmıyorum.
Kategoriyi dilimleyiciye eklemiş olmamız, herhangi bir seçim yapmadığımız sürece Kategori sütununu filtrelemez. Dolayısıyla şu anda hem satırlar hem de toplam satırı için FALSE döndürüyor. Yani üzerinde doğrudan bir filtre yok.
Diğer taraftan [Renk Doğrudan Filtrelendi] metriği satırlar için TRUE dönerken toplam satırı için FALSE dönüyor. Satırlarda her bir renk tek tek var, dolayısıyla ilgili satırdaki renk neyse o satır için renk sütunu üzerinden doğrudan filtre var. Toplam satırı ise şu an tüm renkleri görebiliyor. Bu yüzden şu an FALSE döndürüyor.
Kategori dilimleyicisinden bazı kategorileri seçiyorum, ek olarak rengi de bir dilimleyiciye ekliyorum ve bazı renkleri seçiyorum.
[Renk Doğrudan Filtrelendi] metriği biraz öncekinin aksine Toplam satırı için de TRUE dönüyor şimdi. Bunun sebebi, dilimleyicideki renklerden bazılarını seçmiş olmamız, tüm matris için doğrudan renk sütununa filtre koyduk!
Benzer sebeple [Kategori Doğrudan Filtrelendi] metriği de toplam satırı da dahil olmak üzere TRUE dönüyor. Dilimleyicide yapılan seçin matrise doğrudan filtre koydu.
Aşağıdaki metrikleri ekliyorum, bu sefer ISCROSSFILTERED ile:
Renk Dolaylı Filtrelendi := ISCROSSFILTERED ('Ürünler'[Renk])
Kategori Dolaylı Filtrelendi := ISCROSSFILTERED ('Ürün Kategorileri'[Kategori])
Dilimleyiciye marka sütununu ekleyip seçim yapıyorum. Marka sütunu Renk sütunuyla aynı tabloda, Ürünler tablosunda olan bir sütun. Dolayısıyla bu sütuna konan bir filtre dolaylı yoldan renk sütununu da etkiliyor. Bu yüzden [Renk Dolaylı Filtrelendi] mevcut seçimlere göre toplam satırı da dahil olmak üzere TRUE dönüyor.
[Kategori Dolaylık Filtrelendi] metriği ise toplam satırı da dahil olmak üzere FALSE dönüyor. Marka sütununa filtre koymuş olmamız Kategori sütununu dolaylı yoldan da olsa filtrelemiyor. Çünkü Kategori sütunu "Ürün Kategorileri" tablosunda ve tablolar arasındaki ilişkilerin yönü tek yönlü, dolayısıyla koyduğumuz filtre kategoriler tablosuna akmıyor (propagate etmiyor).
Eğer tablolar arasındaki ilişkileri çift yönlü yaparsak, Marka sütununa koyduğumuz filtre kategoriler tablosuna da akacaktır. Dolaylı yoldan kategorileri de filtrelemiş oluruz.
ISFILTERED fonksiyonu bir yönüyle HASONEVALUE fonksiyonuna benziyor. Her ikisi de satırda mıyız yoksa toplam satırında mıyızı belirlemek için kullanılabilir, fakat arada nüanslar var. Daha önce IF ( HASONEVALUE…) kalıbıyla bir örnek yapmıştık.
Birisi "tek bir değer mi var" sorusuna cevap veriyor, diğeri "sütun üzerinde doğrudan filtre var mı" sorusuna. Arada fark var.
Bu iki fonksiyona benzer bir de HASONEFILTER fonksiyonu var! Üçü arasındaki farkı da bir başka yazıda açalım.