Power BI ‘daki bir çok görselin varsayılan davranış şekli, görsele eklediğimiz metriğin boş değer döndürmesi durumunda (misal hiç satışı olmayan ürün gibi) ilgili sütunu-değeri hiç göstermemek şeklinde.
Örnek modele göre, bir çok ülke ve şehirde mağaza var fakat sadece 3 ülke ve şehirde satış gerçekleşmiş. [Satışlar] metriğini düşürdüğüm matrislerde sadece satışı olan ülke ve şehirler gözüküyor. “Ülke” ve “Şehir” bilgisi “Mağazalar” tablosundan gelen sütunlar.
Standart dilimleyici görseli (slicer) değer listesi olarak “Mağazalar” tablosundaki tüm satırlar üzerinden çalışıyor, dolayısıyla satışı olsun ya da olmasın tüm ülkeleri ve şehirleri gösteriyor. Bu da gayet normal bir durum.
Fakat zaman zaman ihtiyaçlardan biri şu: Sadece satışı olan ülke ve şehirleri göstersin!
Dilimleyicilere “Visual Level Filter” ekleyebilme özelliği -uzunca bir süre komunitenin istek listesinde kaldıktan sonra- 4-5 ay önce eklendi.
“Visual Level Filter”, adı üstünde sadece seçtiğimiz görseli tetikleyecek filtreler eklememize yarıyor. Üstelik bu filtrelerde sadece sütunları değil metrikleri de kullanabiliyoruz.
[Satışlar] metriğini “Ülke” dilimleyicisine “visual level filter” olarak ekleyip, değeri 0’dan büyük olsun ya da “boş olmasın” diyebiliriz.
Bu durumda sadece satışın gerçekleştiği ülkelerin listesini gösterecektir.
Ülke ve Şehir bilgisi örnek modele göre aynı tablodan geldiği için Ülke dilimleyicisinde herhangi bir seçim yaptığımızda otomatik olarak Şehir de filtrelenir. Çünkü her ikisi de aynı tabloda, Ülke filtresi otomatik olarak ilgili ülkedeki şehirleri de filtreleyecektir.
Ülke üzerindeki filtrenin ilgili ülkedeki şehirleri göstermesi, bu şehirlerde illaki satış olduğu anlamına gelmiyor: Koyduğumuz “visual level filter” sadece Ülke’yi tetikliyor şu an. Yapılan ülke seçimi de -satışın olup olmadığından bağımsız bir şekilde- o ülkedeki şehirleri listeliyor.
Çin’de 5 tane şehir var tabloya göre ama sadece Pekin’de satış yapılmış. Sadece satışın olduğu şehirleri filtrelemek için benzer şekilde [Satışlar] metriğini “Şehir” dilimleyicisine filtre olarak ekleyebiliriz.
Biraz daha ilerletelim: Ürünler tablosunda her bir ürünün ait olduğu marka bilgisi var. Marka sütünunu dilimleyici olarak düşürdüğümde -normal olarak- tüm markaları listeliyor.
Satışı yapılan marka sayısı ise -matrise göre-daha az.
Ülke’lerden herhangi birini seçsek de Marka dilimleyicisinin gösterdiği liste değişmiyor! Biraz önceki durumun aksine, Ülke ve Marka aynı tabloda değil, dolayısıyla Ülke seçimi Marka listesini filtrelemiyor.
Visual level filter özelliği eklenmeden önce bu durumda yapılabilecek şeylerden biri satışlar tablosu ile ürünler tablosu arasındaki bağlantıyı çift yönlü yapmak olurdu.
“Mağaza” tablosundan gelen filtre “Satışlar” tablosunu filtreleyecek, bu filtre de çift yönlü ilişki üzerinden “Ürünler” tablosunu, dolayısıyla marka sütununu filtreleyecek!
İlişki yönünü çift yönlü yapmak güçlü bir özellik, fakat sırf buna benzer bir amaçla kullanacaksanız kullanmayın!
Bunun yerine yukarıdaki örneklerde olduğu gibi visual level filter’ları kullanabilirsiniz.
** Çift yönlü ilişkiler daha çok many-to-many tipindeki ilişkiler için eklenmiş güçlü bir özellik, arka planda performansı olumsuz etkileyebilir, yazdığınız metriklerin istediğiniz gibi çalışmasını da etkileyebilir. Her şey her şeyi filtreliyor gibi bir durumu yaratmak -genelde- istemeyiz.
Görsel filtresine [Satışlar] metriğini verdik filtre olarak ama daha generik ve bir çok durum için daha doğru çalışacak bir başka metrik yazabiliriz filtre amaçlı. Modelimizde satışların toplamını, ortalamasını vs alan bir çok metrik olabilir. Hangi birini ekleyeceğiz filtre olarak? Her biri olabilir duruma göre.
Satışlar tablosu üzerinde çalışan bir çok metriğimiz olabilir, ama hepsinin ortak cümlesi şu : “Eğer gördüğün satışlar tablosunda yapılan seçime ilişkin kayıt varsa” , yani filter context’te gördüğün satışlar tablosu “boş değilse”!
Power BI’da filter context’te gördüğümüz bir tablonun boş olup olmadığını test etmemizi sağlayacak birden fazla yöntem var.
- COUNTROWS ile gördüğün tablodaki satır sayısı 0’mı diyebiliriz.
- ISBLANK + COUNTROWS ile dönen kayıt yok mu diyebiliriz.
- ISEMPTY ile doğrudan tablo boş mu diyebiliriz.
COUNTROWS( 'Satışlar' ) = 0
ISBLANK( COUNTROWS( 'Satışlar' ) )
ISEMPTY( 'Satışlar' )
Her üç yöntem de çalışır, ben size ISEMPTY’yi kullanmanızı önereceğim.
Satışlar Boş Mu := ISEMPTY( 'Satışlar' )
Bu metrik bu haliyle “True” ya da “False” dönecek.
Bu metriği visual level filter’da kullanabilmek için skalar bir değere dönüştürmemiz lazım, filtre true ya da false değerini değil bir rakamı görmeyi bekliyor! INT ile true/false değerinin 0 ya da 1 olarak dönmesini sağlayabiliriz.
Satışlar Boş Mu := INT( ISEMPTY( 'Satışlar' ) )
Bu metriği artık görsel filtresine ekleyebiliriz.
Yazıdaki modeli -bloga üyeyseniz- indirebilirsiniz.
Sadece üyeler görebilir. Hızlı üyelik için sosyal medya hesabınızla giriş yapabilirsiniz!