ALL + VALUES vs ALLEXCEPT

DAXDAX 101

Önceki yazının tamamlayıcısı olarak, birbirine yakın gibi duran ama iki farklı kalıbı karşılaştıralım: ALL + VALUES ile ALLEXCEPT arasındaki farklar ve benzerliklere değinelim. Kullandığımız yere göre her iki kalıp da zaman zaman aynı sonucu verebilir ama semantikleri tamamen farklı.

Aşağıdaki gibi iki metriğimiz var:

Tüm Satışlar := 
CALCULATE( [Satışlar] ; ALL('Tarih') )
Tüm Satışlar VALUES := 
CALCULATE( [Satışlar] ; ALL('Tarih') ; VALUES( 'Tarih'[Yıl] ) )
all


[Tüm Satışlar] metriğine ALL(‘Tarih’) ile Tarih tablosundaki tüm filtreleri kaldır dedik, dolayısıyla aktif filter context’teki tarih ne olursa olsun tüm tarihleri görüyor.

VALUES( ‘Tarih'[Yıl] ) ile modifiye ettiğimiz ikinci metrikte ise, tüm tarih tablosunu gör VE gördüğün context’teki yıl değişirse buna riayet et dedik.  Aynı matrise ay seviyesinde bakalım:

2007 yılına ait satırlar için konuşmak gerekirse: tüm tarih tablosuna bak VE yıl 2007 olacak, yıl değişirse bu değişikliğe riayet et! İlgili ayların yılı aynı, yıl değişmiyor, dolayısıyla 2007’deki her bir ay satırı çin aynı şeyi hesaplıyor: 2007’deki satışlar! Aynı cümleleri diğer yıl/ay için de kurabiliriz.

ALLEXCEPT ile bir metrik daha ekleyelim ve matrise düşürelim:

Tüm Satışlar_ALLEXCEPT :=
CALCULATE( [Satışlar] ; ALLEXCEPT( 'Tarih' ; 'Tarih'[Yıl] ) )

ALLEXCEPT( ‘Tarih’ ; ‘Tarih'[Yıl] ) ile Tarih tablosundaki aktif tüm filtreleri kaldır, yıl hariç, yani yıl değişirse buna riayet et!

Her ikisi de, yani hem VALUES hem de ALLEXCEPT versiyonları aynı gibi gözüküyor. Hem yıl seviyesinde hem de ay seviyesinde aynı gibiler!

Tarih tablomuzdaki sütunlardan biri Yıl-Ay No kombinasyonunu içeriyor. 2007-1, 2007-2 vs diye gidiyor.

Bu sütun üzerinden aşağıdaki metrikleri ekliyorum:

Tüm Satışlar_VALUES_Yıl-Ay :=
CALCULATE( [Satışlar] ; ALL('Tarih') ; VALUES( 'Tarih'[Yıl-Ay] ) )
Tüm Satışlar_ALLEXCEPT-Yıl-Ay :=
CALCULATE( [Satışlar] ; ALLEXCEPT( 'Tarih' ; 'Tarih'[Yıl-Ay] ) )

Cümleleri benziyor: tüm tarih tablosuna bakacaksın VE Yıl-Ay değişirse buna riayet edeceksin!

Aşağıdaki matrise her ikisini de düşürelim:

Yukarıda yaptığımız örneklere benzer şekilde hala aynı gibi gözüküyorlar ama değiller! Matristen Yıl-Ay sütununu çıkardığımız anda farklılaşacaklar!

ALLEXCEPT( ‘Tarih’ ; ‘Tarih'[Yıl-Ay] ), eğer Yıl-Ay sütunu üzerinde doğrudan direkt bir filtre varsa bunu kaldırıyor! Matriste Yıl-Ay varken her bir değişimde ilgili Yıl-Ay’daki satışları gösterirken, Yıl-Ay sütununu matristen kaldırdığımızda gösterdiği şey tüm satışlar! Çünkü artık Yıl-Ay sütunu üzerinden doğrudan direkt bir filtre yok!

Daha önce bahsettiğim ISFILTERED / ISCROSSFILTERED ile bunu kontrol edebiliriz:

Yıl_Ay_ISFILTERED := ISFILTERED( 'Tarih'[Yıl-Ay] )

Her bir satırda Yıl-Ay sütunu üzerinde doğrudan bir filtre varken (ISFILTERED True dönüyor) Toplam (Total) satırında doğrudan bir filtre yok, ISFILTERED False dönüyor!

Matristen Yıl-Ay sütununu kaldırdığımızda hepsi False dönüyor, yani artık Yıl-Ay sütununda doğrudan direkt bir filtre yok!

Yıl-Ay sütunu üzerinde dolaylı, endirekt bir filtre var, o da matristeki Yıl ve Ay sütunlarından geliyor. Başka bir deyişle, Yıl-Ay sütunu üzerindeki dolaylı filtre Yıl ve Ay sütunlarından gelen cross-filter!

Aşağıdaki metriği de ekleyelim ve görelim:

Yıl-Ay_ISCROSSFILTERED := ISCROSSFILTERED( 'Tarih'[Yıl-Ay] )

VALUES( ‘Tarih'[Yıl-Ay] ), ALLEXCEPT’in aksine, dolaylı da olsa Yıl-Ay üzerindeki crossfilter’ı görüyor! Yıl-Ay sütununun matriste olmasına gerek yok, ayrı ayrı Yıl ve Ay sütunlarından gelen etkiyi görebiliyor.

** ISCROSSFILTERED ile yazdığımız metrik Toplam satırında niye False dönüyor düşünmekte fayda var. ISFILTERED yazısına tekrar bakmanızı önereceğim.

Ara ara çalışan metrikler yerine her zaman istediğimiz gibi çalışan metrikler yazmak için context/filter context kavramları üzerinde ciddi anlamda durmak gerekiyor. Fonksiyonlar arasında ufakmış-önemsizmiş gibi gözüken farklar bazen yazdığımız formüllerin sonucunu radikal bir biçimde değiştirebiliyor.

Yazıdaki modeli -bloga üyeyseniz- indirebilirsiniz.

Sadece üyeler görebilir. Hızlı üyelik için sosyal medya hesabınızla giriş yapabilirsiniz!

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