ALL, ALLEXCEPT ve ALLSELECTED: DAX'ta filtreleri kontrollü kaldırmak
Beceri rehberi

ALL, ALLEXCEPT ve ALLSELECTED: DAX'ta filtreleri kontrollü kaldırmak

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Filtreleri kaldıran DAX fonksiyonlarının farkı: ALL, ALLEXCEPT ve ALLSELECTED. Toplam içindeki pay, yüzde hesapları ve sık yapılan bağlam hataları örneklerle.

Neden filtre kaldırmak gerekir?

Power BI'da bir görselin değeri, o anki filtre bağlamına göre hesaplanır. Bir tabloda her ürünün satışını gösterirken, satırdaki ürün filtresi ölçüyü o ürüne indirger. Bu çoğu zaman istenen davranıştır. Ama bazı hesaplar bir karşılaştırma tabanı ister: ürünün satışının toplam satış içindeki payı, kategorinin kendi toplamına oranı, hedefin gerçekleşmeye göre yüzdesi.

Bu tür hesaplarda paydanın, satırın filtresinden bağımsız hesaplanması gerekir. Filtreyi kaldırmak için ALL ailesi kullanılır. Bu fonksiyonlar farklı birer kaldırma stratejisi sunar: ALL her şeyi kaldırır, ALLEXCEPT belirttiğiniz dışındaki her şeyi kaldırır, ALLSELECTED ise görsel içi filtreyi kaldırıp kullanıcının dış seçimini korur.

Bu fonksiyonlar tek başına anlamlı bir değer üretmez; filtre değiştiren olarak çalışır ve CALCULATE ile birlikte kullanılır. CALCULATE'in filtre bağlamını nasıl değiştirdiğini bilmek bu yüzden ön koşuldur.

ALL: tüm filtreleri kaldırır

ALL bir tabloya ya da sütuna uygulandığında o tablodaki ya da sütundaki tüm filtreleri yok sayar. En klasik örnek toplam içindeki paydır:

Pay = DIVIDE([Toplam Satış], CALCULATE([Toplam Satış], ALL(Ürünler)))

Payda, ürünle ilgili hiçbir filtre olmadan tüm satışı hesaplar. Pay, satırdaki ürünün satışıdır. Sonuç, her ürünün toplam içindeki yüzdesidir. Bu ölçü bir kategori dilimleyicisiyle birlikte kullanıldığında bile paydada kategori seçimi yok sayılır, çünkü ALL(Ürünler) ürün tablosundaki tüm filtreleri kaldırır; kategori sütunu da bu tablodadır.

Tek sütuna ALL uygulayabilirsiniz: ALL(Ürünler[Kategori]) yalnızca kategori filtresini kaldırır, tablodaki başka filtreler (ürün adı gibi) sürer. Bu kesin kontrol sağlar. ALL ayrıca bir tablo olarak da kullanılır: sütundaki tüm benzersiz değerleri döndürür ve RANKX gibi fonksiyonlara ilk argüman olarak verilir.

ALL'ın dikkat gerektiren bir yanı, güvenlik kurallarını (RLS) aşmamasıdır; satır düzeyi güvenlik uygulandığında yetkisiz satırlar ALL ile de görünmez.

ALLEXCEPT: yalnızca belirttiğinizi korur

ALLEXCEPT bir tablo ve bir ya da birkaç sütun alır. Belirtilen sütunlar dışındaki tüm filtreleri kaldırır, belirtilenleri korur. Böylece 'kategori içinde pay' gibi hesaplar kolay yazılır:

Kategori İçi Pay = DIVIDE([Toplam Satış], CALCULATE([Toplam Satış], ALLEXCEPT(Ürünler, Ürünler[Kategori])))

Burada paydada ürün adı filtresi kaldırılır ama kategori korunur. Dolayısıyla her ürün, kendi kategorisinin toplamına oranlanır. Kategori filtresi yoksa tüm kategoriler dahil edilir.

ALLEXCEPT'in bir sınırı, yalnızca tek bir tablo için çalışmasıdır. Başka bir tablodaki filtreler (örneğin tarih) bu fonksiyonla kaldırılmaz. Birden fazla tabloyu içeren karmaşık durumlarda, ALL ve VALUES ile yeniden kurma gerekir:

CALCULATE([Toplam Satış], ALL(Ürünler), VALUES(Ürünler[Kategori]))

Bu kalıp, ALLEXCEPT'e eşdeğer sonucu verir ve daha esnektir. Hangisini seçeceğiniz okunabilirlik tercihine bağlıdır; ALLEXCEPT niyeti açıkça gösterir.

ALLSELECTED: kullanıcının seçimini koruyan toplam

ALL, kullanıcı bir dilimleyiciyle yıl ya da bölge seçse bile onu yok sayar. Çoğu rapor kullanıcısı ise 'seçtiğim kapsam içinde pay' görmek ister. ALLSELECTED bunu karşılar: görsel içi filtreleri (satır ve sütun başlıklarından gelenleri) kaldırır, ama dilimleyici ve sayfa/rapor filtreleri gibi dış seçimleri korur.

Seçime Göre Pay = DIVIDE([Toplam Satış], CALCULATE([Toplam Satış], ALLSELECTED(Ürünler)))

Kullanıcı bir bölgeyi seçtiyse, payda yalnızca o bölgedeki toplam satıştır. Bölge seçimi yoksa tüm bölgeler. Yani rapor kullanıcısının etkileşimine göre payda kendiliğinden güncellenir.

ALL ile ALLSELECTED arasındaki seçim, raporun amacına bağlıdır. 'Şirketin tamamı içindeki payı' gösteren bir ölçü ALL kullanır. 'Seçtiğim kapsam içindeki payı' gösteren ise ALLSELECTED. İki ölçüyü birlikte sunmak da mümkündür: kullanıcı iki bakışı karşılaştırabilir. Ölçü adlarında bu farkı açıkça belirtin, aksi hâlde kullanıcılar neyin neye oranlandığını karıştırır.

Üç fonksiyonun karşılaştırması: ölçüt ölçüt

  • Kaldırdığı filtre. ALL: belirtilen tablo/sütundaki hepsi. ALLEXCEPT: belirtilen sütunlar dışındaki hepsi. ALLSELECTED: görsel içi filtreler, dış seçimler kalır.
  • Dilimleyici etkisi. ALL: yok sayar. ALLEXCEPT: belirtilen sütun dışındakini yok sayar. ALLSELECTED: dilimleyiciyi dikkate alır.
  • Tipik kullanım. ALL: genel toplam payı, sabit sıralama tabanı. ALLEXCEPT: grup içi pay. ALLSELECTED: seçim kapsamındaki yüzde ve kümülatif toplam.
  • Risk. ALL: kullanıcının filtresini sessizce yok saydığı için kafa karıştırabilir. ALLEXCEPT: tek tabloyla sınırlıdır. ALLSELECTED: görsel yapısına duyarlı olduğu için farklı görsellerde farklı sonuç verebilir.

Karar için basit bir soru işe yarar: payda kullanıcının dilimleyici seçimine tepki versin mi? Evetse ALLSELECTED, hayırsa ALL ya da ALLEXCEPT. Grup içi bir karşılaştırma varsa ALLEXCEPT, tüm tablo içinde ise ALL.

Örnek: kümülatif toplam ve yüzde dağılım

Örneğin bir satış raporunda ürünler büyükten küçüğe sıralanmış ve yanında kümülatif yüzde isteniyor (Pareto analizi). Kümülatif toplam, o satıra kadar olan ürünlerin toplamıdır:

Kümülatif Satış = VAR GeçerliSatış = [Toplam Satış] RETURN SUMX(FILTER(ALLSELECTED(Ürünler[Ürün Adı]), [Toplam Satış] >= GeçerliSatış), [Toplam Satış])

Burada ALLSELECTED, dilimleyici seçimlerine saygı duyarak görünür ürünlerin listesini verir. FILTER, geçerli satırın satışına eşit ya da daha yüksek ürünleri alır ve SUMX bunları toplar. Sonuç büyükten küçüğe kümülatif toplamdır. Bu değeri toplam satışa bölerek kümülatif yüzdeyi bulursunuz.

Kalıbın bilinen sınırı, aynı satışa sahip ürünlerin birlikte hesaba girmesidir ve çok sayıda ürün için yavaş olabilmesidir. Büyük ürün listelerinde ölçünün süresini Performans Analizörü ile kontrol edin. Pareto grafiği hazırlayan ekipler bu ölçüyü sıralama ölçüsüyle birleştirebilir.

Sık hatalar ve kontrol listesi

  • ALL'ı tek başına yazmak: ALL bir filtre değiştiricidir, CALCULATE içinde anlam kazanır.
  • ALLSELECTED'ı görsel dışındaki bir kartta beklentiyle kullanmak: görsel yapısı olmadığı için ALL'a yakın davranır.
  • Tablo yerine sütun vermek gerektiğinde tabloyu vermek: ALL(Ürünler) tablodaki tüm filtreleri kaldırır; yalnızca kategori filtresi kalksın istiyorsanız sütun belirtin.
  • İlişkili tabloların filtrelerini unutmak: bire çok ilişkide tarih ya da bölge tablosundaki filtre, ürün tablosunda ALL ile kalkmaz.
  • Payda sıfır: DIVIDE kullanın, bölme hatalarını engeller.

Kontrol listesi: ölçüyü önce filtresiz bir kartta, sonra bir dilimleyici seçiliyken, sonra tabloda deneyin. Beklenen paydayı ayrıca ayrı bir ölçü olarak gösterip değerini elle doğrulayın. Aynı hesap Excel'de pivot tablodaki 'toplamın yüzdesi' ile karşılaştırılabilir.

Bu beceriyi Mindset programlarında nerede çalışırsınız

Filtre bağlamını yönetmek, Power BI İleri Düzey ve DAX eğitiminde 'CALCULATE ve Filtre Bağlamında Ustalaşmak' modülünün merkezindedir; sıralama ve sınıflandırma konuları ise 'Sıralama, Sınıflandırma ve Karmaşık Analizler' modülünde işlenir. Pay, yüzde ve Pareto raporları hazırlayan satış analistleri, finans raporlama uzmanları ve BI geliştiricileri için uygundur.

Kurumsal ekiplerde, yönetici panolarında sıkça sorulan 'bu toplamın içindeki payımız ne' sorusuna tutarlı cevap veren ortak ölçü seti oluşturmak isteyenler için işe yarar.

İlgili Mindset programı

Power BI İleri Düzey ve DAX

Sık sorulanlar

Sık sorulan sorular

ALL ile ALLSELECTED'in farkını tek cümlede nasıl anlatırım?

ALL kullanıcının dilimleyici seçimi dahil tüm filtreleri yok sayar; ALLSELECTED ise görsel içi filtreleri kaldırıp dilimleyici gibi dış seçimleri korur. Bu yüzden ALL ile hesaplanan pay her zaman tüm veriye göre, ALLSELECTED ile hesaplanan pay ise dilimleyiciyle daralttığınız kümeye göre okunur; dilimleyiciyle bir yıl seçildiğinde ikisi farklı sonuç verir.

ALLEXCEPT birden fazla tablo için kullanılabilir mi?

Hayır. ALLEXCEPT tek bir tabloya uygulanır; ilk bağımsız değişken o tablodur, sonrakiler korumak istediğiniz aynı tablonun sütunlarıdır. Birden fazla tabloda filtre kaldırmak gerekiyorsa her tablo için ayrı ALL yazın ya da ALL ile VALUES kombinasyonunu kullanın.

ALL satır düzeyi güvenliği aşar mı?

Hayır. Satır düzeyi güvenlik kuralları model düzeyinde uygulanır ve ALL ile kaldırılamaz. Yetkisiz kullanıcı, ALL kullanan bir ölçüde de yetkisi olmayan satırları göremez. Ölçü yalnızca kullanıcının görmeye yetkili olduğu satırlar üzerinde çalışır; bu yüzden paydadaki toplam da tüm şirketi değil, yetkili satırları kapsar. Güvenliği ayrıca farklı rollerle test edin.

Toplam içindeki pay ölçüsü neden yüzde yüz çıkıyor?

Genellikle payda da pay ile aynı filtre bağlamında hesaplanıyordur. Paydadaki CALCULATE içinde ALL ile ilgili tablonun ya da sütunun filtresini kaldırdığınızı kontrol edin. Pay satır filtresini taşırken payda filtresiz olmalıdır.

DAX ALL, ALLEXCEPT ve ALLSELECTED Farkı Nedir