Ana içeriğe geç
Kesit Power BI
Orta · DAX Bağlamları

FILTER, ALL, ALLEXCEPT, ALLSELECTED: pay ve oranlar

Genel toplama göre pay, ebeveyne göre pay, seçime göre pay ve satır koşullu filtreler.

Uygulamada aç, 9 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

FILTER: satır satır koşul

Büyük Satırlar = CALCULATE([Toplam Satış], FILTER(Satislar, Satislar[Tutar] > 2000))

FILTER(tablo, koşul) koşulu her satırda test eder ve geçen satırlardan bir tablo döndürür. Basit sütun koşullarında boolean filtre (Satislar[Kanal] = "Web") daha hızlıdır. FILTER, koşul bir ölçüye ya da birden çok sütuna dayandığında gerekir:

Çok Satan Ürün Sayısı = COUNTROWS(FILTER(Urunler, [Toplam Satış] > 50000))

ALL ailesi

FonksiyonCALCULATE içinde ne yapar?
ALL(Tablo) / REMOVEFILTERS(Tablo)Tablonun ve genişletilmiş tablosunun (bire tarafındaki tablolar) filtrelerini kaldırır
ALL(Tablo[Sütun])Yalnızca o sütunun filtresini kaldırır
ALLEXCEPT(Tablo, Tablo[Sütun])Belirtilen sütun dışındaki tüm filtreleri kaldırır
ALLSELECTED(...)Görselin satır/sütun filtrelerini kaldırır ama dilimleyici seçimlerini korur

Üç farklı pay

Genel Pay % =
DIVIDE([Net Satış], CALCULATE([Net Satış], ALL(Kategoriler)))

Seçime Göre Pay % =
DIVIDE([Net Satış], CALCULATE([Net Satış], ALLSELECTED(Kategoriler)))

Kategori İçi Pay % =
DIVIDE([Net Satış], CALCULATE([Net Satış], ALL(Urunler[Urun])))
Doğru sütunu kaldırGörselde Kategoriler[Kategori] ile grupluyorsan, paydada da Kategoriler filtresini kaldırmalısın. ALL(Urunler[Kategori]) yazarsan görselin filtresi (Kategoriler'den geliyor) yerinde kalır ve her satırda %100 görürsün. Bu modelde iki kategori sütunu var: raporda ve alıştırmalarda eksen hep Kategoriler[Kategori]; Urunler[Kategori] ilişki anahtarıdır ve Playground’un alan listesinde gösterilmez.
Derinleş

Genişletilmiş tablolar: ALL(Satislar) neden kategori filtresini de siler?

DAX’ta bir olgu tablosu, ilişkili olduğu boyut tablolarının sütunlarını da “içerir”. Buna genişletilmiş tablo denir: Satislar, çoktan bire ilişkiler üzerinden Urunler, Musteriler ve Tarih sütunlarını da kapsar. Bu yüzden:

Tüm Satışlar =
CALCULATE([Net Satış], ALL(Satislar))

kategori kırılımında her satırda 1.250.772 ₺ (genel toplam) verir. Kategori filtresi Urunler tablosunda olduğu halde ALL(Satislar) onu da kaldırır, çünkü Urunler[Kategori] genişletilmiş Satislar tablosunun bir parçasıdır. Tersi doğru değildir: ALL(Urunler) ürün tablosunun ve onun genişletilmiş tablosunun (bire tarafındaki Kategoriler) filtrelerini siler; çok tarafındaki Satislar[Kanal] filtresi yerinde kalır.

Kanal Filtresiz Satış =
CALCULATE([Net Satış], ALL(Satislar[Kanal]))

Tek bir sütunu hedeflemek ise genişletmeye girmez: yukarıdaki ölçü yalnızca kanal filtresini kaldırır; kategori, tarih ve müşteri filtreleri korunur. Pratik kural: tüm tabloyu değil, kaldırmak istediğin sütunu ya da boyut tablosunu hedefle. Niyetini en açık gösteren yazım REMOVEFILTERS(Urunler) gibi boyut tablosunu adıyla anmaktır.

Uzmanlaş

ALLSELECTED ve görselin toplamı

Kategori müdürü dilimleyicide yalnızca Elektronik, Kitap ve Spor’u seçti. Pasta grafiğinde payların 100’e tamamlanmasını bekliyor. Hazır [Kategori Payı %] ölçüsü ise şunu gösteriyor:

Kategori[Net Satış][Kategori Payı %] (ALL)Seçime göre pay (ALLSELECTED)
Elektronik339.304 ₺%27,1%50,2
Kitap151.882 ₺%12,1%22,5
Spor184.231 ₺%14,7%27,3
Toplam675.417 ₺%54,0%100

İki ölçü de doğru; farklı sorulara cevap veriyorlar. ALL(Kategoriler) paydaya tüm şirketi koyar: “Elektronik, şirketin %27’si.” ALLSELECTED(Kategoriler) ise görselin kendi satır filtresini kaldırır ama dilimleyici gibi dışarıdan gelen filtreleri korur. Payda 675.417 ₺ olur: “Seçtiğin üç kategorinin yarısı Elektronik.”

Seçili Kategoriler İçinde Pay % =
DIVIDE([Net Satış], CALCULATE([Net Satış], ALLSELECTED(Kategoriler)))
ALLSELECTED’in sınırıALLSELECTED “görselin dışından gelen filtreleri” tanır. Başka bir görselden gelen çapraz filtre de bu gruba girer. Ölçüyü başka bir yineleyicinin içinden çağırırsan davranışı tahmin etmek zorlaşır. Kural: ALLSELECTED’i görselde doğrudan kullanılan en dış ölçüde kullan, yardımcı ölçülerin içine gömme.

Paydayı kurarken hangi filtre kalıyor?

Şimdi dilimleyicide kategori değil, Kanal = Web seçili olsun. Satırlarda kategoriler var. Paydayı üç farklı şekilde kurarsan:

PaydaNe kaldırılır?ElektronikOkunuşu
ALL(Kategoriler)Yalnızca kategori%28,6Web satışları içinde Elektronik’in payı
ALL(Satislar)Kategori, kanal, tarih, müşteri… hepsi%10,5Web’deki Elektronik, şirketin tüm satışlarının yüzde kaçı?
ALLSELECTED(Kategoriler)Görselin kategori filtresi%28,6Kategori seçimi olmadığı için ALL ile aynı

Dilimleyicinin kanal filtresi ALL(Satislar) ile de silinir, çünkü Satislar[Kanal] olgu tablosundadır ve genişletilmiş Satislar bütün boyutları kapsar. Kullanıcı “Web’i seçtim, neden paydada Web yok?” diye sorarsa ilk bakacağın yer burasıdır.

Zaman içinde pay

Pay her zaman kategoriyle ilgili değildir. Finans ekibi iki soru soruyor: “Aralık, yılın yüzde kaçı?” ve “2024, üç yılın yüzde kaçı?”

Yıl İçi Ay Payı % =
DIVIDE([Net Satış], CALCULATE([Net Satış], ALLEXCEPT(Tarih, Tarih[Yil])))

Tüm Yıllara Göre Pay % =
DIVIDE([Net Satış], CALCULATE([Net Satış], REMOVEFILTERS(Tarih)))

Aralık 2024 yılın %7,5’i; 2024 ise tüm dönemin %59,7’si. Yıl içi payda ALL(Tarih[YilAy]) yazmak da yalnız ay sütunu varken aynı sonucu verir. Ama matrise Tarih[Ay] ya da Tarih[Ceyrek] eklenince o filtreler yerinde kalır ve paylar bozulur. ALLEXCEPT(Tarih, Tarih[Yil]) “yıl dışındaki tüm tarih filtrelerini kaldır” dediği için daha sağlamdır.

Hiyerarşide ebeveyne göre pay

Kategori → Ürün hiyerarşisi olan bir matriste her düzey kendi ebeveynine göre pay göstersin: ürün satırında kategorinin yüzde kaçı, kategori satırında şirketin yüzde kaçı.

Ebeveyn Payı (Hiyerarşi) =
SWITCH(
    TRUE(),
    ISINSCOPE(Urunler[Urun]), DIVIDE([Net Satış], CALCULATE([Net Satış], ALL(Urunler[Urun]))),
    ISINSCOPE(Kategoriler[Kategori]), DIVIDE([Net Satış], CALCULATE([Net Satış], ALL(Kategoriler)))
)

Sıra önemlidir. Ürün satırında hem ürün hem kategori kapsamdadır. Bu yüzden en derin düzey önce denenir. 27" Monitör, Elektronik’in %30,1’i; Elektronik de şirketin %27,1’i. Toplam satırında hiçbir koşul doğru olmadığı için ölçü BLANK döner. %100 göstermek anlamsız olacağından bu bilinçli bir tercihtir.

Kontrol listesi: pay ölçüsü1) Payda kim: şirket, seçim, ebeveyn, yıl? Ölçü adına yaz. 2) Görselde hangi sütunla grupluyorsun? Paydada o sütunun (ya da tablosunun) filtresini kaldır. 3) Dilimleyici filtresi paydada kalmalı mı? Kalmalıysa olgu tablosunu değil boyutu hedefle. 4) Toplam satırında ne görünmeli: %100 mü, BLANK mi?
Alıştırmalara geç (9)