SELECTEDVALUE: Dilimleyici Seçimini Ölçüye Taşımak
SELECTEDVALUE, bir sütunda filtre bağlamında tek bir değer kaldıysa o değeri, aksi halde belirlediğiniz alternatif sonucu verir. Dinamik başlıklar, ölçü seçiciler ve senaryo katsayıları bu basit davranışın üzerine kurulur.
Bir bakışta
- SELECTEDVALUE yalnızca tek değer kaldığında o değeri verir. Sütun filtre bağlamında birden çok ya da sıfır tekil değere inmişse alternatif sonuç döner.
- Alternatif sonuç verilmezse BLANK döner. Bu yüzden toplam satırı ve çoklu seçim boş görünür; anlamlı bir varsayılan metin ya da değer vermek çoğu zaman gerekir.
- Fonksiyon, IF ile HASONEVALUE ve VALUES birleşiminin kısa yazımıdır. Microsoft, VALUES ile tek değer almak yerine SELECTEDVALUE kullanmayı önerir.
- Dilimleyiciye bağlı başlık, ölçü seçici ve katsayı tipik kullanımlardır. Seçilen değeri okuyup başlığa ekler, SWITCH ile ölçü seçer ya da hesapta çarpan olarak kullanır.
- Sütun adı verilir, ifade verilemez. Fonksiyon bir sütuna bakar; ifade yazmak gerekiyorsa önce o ifadeyi sütun olarak üretmek gerekir.
SELECTEDVALUE ne yapar?
Rapor kullanıcısı dilimleyicide bir bölge seçtiğinde ölçünün bu seçimi bilmesi gerekir. SELECTEDVALUE bunu yapar: belirtilen sütunun filtre bağlamında kaç tekil değer kaldığına bakar. Tam olarak bir değer kaldıysa o değeri döndürür. Hiç değer kalmamışsa ya da birden çok değer kalmışsa alternatif sonucu verir.
Sözdizimi şöyledir:
SELECTEDVALUE(<sütunAdı> [, <alternatifSonuç>])
Alternatif sonuç isteğe bağlıdır; verilmezse BLANK döner. Örnek bir ölçü:
Seçilen Bölge = SELECTEDVALUE('Bölgeler'[Bölge], "Tüm bölgeler")
Dilimleyicide tek bölge seçiliyken ölçü o bölgenin adını verir. Seçim yoksa ya da birden çok bölge seçiliyse "Tüm bölgeler" yazar. Burada "seçim yok" durumunda sütunda tüm bölgeler göründüğü için tekil değer sayısı birden fazladır; fonksiyon bu durumu da alternatif sonuçla karşılar.
SELECTEDVALUE, bağlamdaki tekil değer sayısına göre sonuç seçer
Sütunda kaç değer kaldı?
- Tam olarak bir tekil değer kalmışO değerin kendisiDilimleyicide tek seçim, ya da satırda tek bölge.
- Birden çok tekil değer kalmışAlternatif sonuçÇoklu seçim, seçim yok ya da toplam satırı.
- Hiç değer kalmamışAlternatif sonuçBaşka filtreler tüm satırları elemiştir.
HASONEVALUE ve VALUES ile ilişkisi
SELECTEDVALUE, eskiden uzun yazılan bir kalıbın kısa halidir. Microsoft belgesine göre şu ifadeler eşdeğerdir:
SELECTEDVALUE(<sütun>, <alternatif>) IF(HASONEVALUE(<sütun>), VALUES(<sütun>), <alternatif>)
HASONEVALUE, sütunun filtre bağlamında tek bir tekil değere inip inmediğini DOĞRU ya da YANLIŞ olarak verir. Eşdeğer ifadesi COUNTROWS(VALUES(<sütun>)) = 1 biçimindedir. VALUES ise sütunun tekil değerlerinden oluşan bir tablo döndürür. Tek değer beklediğiniz yerde VALUES kullanırsanız ve bağlam birden çok değere inerse hata alırsınız.
Bu yüzden değer almak istiyorsanız SELECTEDVALUE, yalnızca "tek değer mi" sorusunu yanıtlamak istiyorsanız HASONEVALUE kullanılır. HASONEVALUE özellikle bir oranın toplam satırında anlamsız olduğu durumlarda ölçüyü boş döndürmek için işe yarar.
SELECTEDVALUE, HASONEVALUE ve VALUES aynı bağlama bakar ama farklı şey döndürür
SELECTEDVALUE, HASONEVALUE ve VALUES
| SELECTEDVALUE | HASONEVALUE | VALUES | |
|---|---|---|---|
| Döndürdüğü | Tek değer ya da alternatif sonuç | DOĞRU ya da YANLIŞ | Tekil değerler tablosu |
| Tek değer varken | Değeri verir | DOĞRU | Tek satırlı tablo |
| Çok değer varken | Alternatif sonuç | YANLIŞ | Çok satırlı tablo |
| Tipik kullanım | Başlık ve parametre okuma | Oran ölçüsünü koşullamak | Başka işlevlere tablo vermek |
Seçime göre değişen ölçü kalıpları
Birkaç kalıp sık kullanılır.
Birincisi, başlıkta seçili değeri göstermektir. Bir ölçü metin birleştirip görsel başlığına bağlanır:
Rapor Başlığı = "Satış Raporu: " & SELECTEDVALUE('Bölgeler'[Bölge], "Tüm Bölgeler")
İkincisi, kullanıcıya hangi ölçüyü görmek istediğini seçtirmektir. Veri modeline bağlı olmayan küçük bir tabloda ölçü adları listelenir ve dilimleyicide gösterilir; ölçü seçimi okuyup uygun hesabı yapar:
Seçilen Ölçü = SWITCH(SELECTEDVALUE('Ölçü Seçici'[Ölçü], "Satış"), "Satış", [Toplam Satış], "Adet", [Toplam Adet], BLANK())
Üçüncüsü, seçilen değeri hesapta çarpan olarak kullanmaktır. Senaryo tablosundan katsayı seçilir; seçim yoksa çarpanı değiştirmeyen nötr değer kullanılır:
Büyüme Katsayısı = SELECTEDVALUE('Senaryo'[Katsayı], 1) Tahmin Satış = [Toplam Satış] * [Büyüme Katsayısı]
Üç kalıbın ortak noktası, aynı fonksiyonu ve aynı alternatif sonuç mantığını kullanmalarıdır; fark yalnız alternatif sonucun ne olması gerektiğindedir.
Alternatif sonucu doğru seçmek
Alternatif sonuç verilmediğinde ölçü boş döner ve bu genellikle istenen davranış değildir. Bir matriste her satır tek bölgeyi gösterir, ama toplam satırında tüm bölgeler görünür; fonksiyon orada alternatif sonucu verir. Microsoft belgesindeki örnekte de toplam satırı için "No Single Selection" metni dönmektedir.
Alternatif sonucu kullanıcıyı anlamlı bir mesaja yönlendirecek şekilde seçin. Başlıkta "Tüm bölgeler", ölçü seçicide varsayılan ölçü adı, katsayıda nötr çarpan uygundur. Boş bırakmak yalnızca bilinçli olarak "seçim yoksa hiçbir şey gösterme" istediğinizde doğrudur.
Çoklu seçimi listelemek isterseniz SELECTEDVALUE yetmez, çünkü o tek değer bekler. Bunun için CONCATENATEX kullanılır:
Seçilen Bölgeler = IF(ISFILTERED('Bölgeler'[Bölge]), CONCATENATEX(VALUES('Bölgeler'[Bölge]), 'Bölgeler'[Bölge], ", "), "Tüm bölgeler")
ISFILTERED sütunda bir filtre olup olmadığını denetler. Böylece seçim yokken tüm bölgeleri listelemek yerine "Tüm bölgeler" yazılır.
Seçilen yıla göre karşılaştırma
SELECTEDVALUE, seçime bağlı karşılaştırma ölçülerinin de temelidir. Kullanıcı yıl dilimleyicisinde bir yıl seçtiğinde, o yıl ile bir önceki yılı yan yana göstermek istediğinizi düşünün. Önce seçilen yılı ölçüye alırsınız:
Seçilen Yıl = SELECTEDVALUE('Takvim'[Yıl])
Sonra seçilen yılın ve bir önceki yılın satışını hesaplarsınız. Seçim yoksa ya da birden çok yıl seçiliyse Seçilen Yıl boş döner; bu durumda karşılaştırmayı hiç göstermemek en dürüst davranıştır:
Önceki Yıl Satışı = VAR SecilenYil = [Seçilen Yıl] RETURN IF(ISBLANK(SecilenYil), BLANK(), CALCULATE([Toplam Satış], 'Takvim'[Yıl] = SecilenYil - 1))
Seçilen yılın önce bir değişkene alınması bilinçlidir: CALCULATE içindeki basit koşul bir ölçüye doğrudan başvuramaz, değişken ise sabit bir değer gibi kullanılabilir.
Burada alternatif sonuç bilinçli olarak verilmemiştir: boş dönmesi istenen davranıştır. Aynı mantık hedef senaryosu, para birimi ya da dönem seçiciler için de geçerlidir; seçimi tek değere indirgeyebildiğiniz her yerde ölçü kullanıcının tercihini okuyabilir.
Sık hatalar
SELECTEDVALUE'da en sık karşılaşılan sorunlar şunlardır.
- Sütun yerine ifade vermek. Fonksiyon yalnızca var olan bir sütun adı kabul eder; ifade yazmak isterseniz önce hesaplanmış sütun üretin.
- Hesaplanmış sütunda dilimleyici seçimini okumayı beklemek. Hesaplanmış sütun veri yenilendiğinde hesaplanır, rapor etkileşimlerinden habersizdir. Seçime bağlı hesaplar ölçüyle yapılır.
- Alternatif sonucu boş bırakıp toplam satırında boşluk görmek ve bunu hata sanmak.
- Seçilen değeri bir sayıya ya da metne eşit sanıp tür uyuşmazlığına düşmek. Alternatif sonucun türü, sütunun türüyle uyumlu olmalıdır.
- Dilimleyici tablosunu veri modeline bağlayıp beklenmedik filtre etkisi yaratmak. Ölçü seçici gibi yardımcı tablolar ilişkisiz bırakılır.
DirectQuery kipinde SELECTEDVALUE, hesaplanmış sütunlarda ve satır düzeyi güvenlik kurallarında desteklenmez; ölçü içinde kullanımda bu kısıt yoktur.
Bu beceriyi Mindset programlarında nerede çalışırsınız?
Uygulamalı Power BI ile Veri Analitiği ve Görselleştirme Sertifika Programı, DAX analiz dili ve kullanımı ile etkileşimli raporlama teknikleri başlıklarında ölçü yazmayı ve kullanıcı seçimine yanıt veren raporları kapsar. Power BI İleri Düzey ve DAX programı, hesaplama grupları ve ileri kalıplar başlığında bu fonksiyonu içeren dinamik ölçü yapılarına devam eder.
İlgili Mindset programı
Uygulamalı Power BI ile Veri Analitiği ve Görselleştirme Sertifika Programı
Sık sorulan sorular
Toplam satırında neden alternatif sonuç görünüyor?
Toplam satırında filtre bağlamı tüm satırları kapsar; sütunda birden çok tekil değer kalır. SELECTEDVALUE tek değer bulamadığı için alternatif sonucu verir. Bu davranış beklenendir; toplam satırı için anlamlı bir metin ya da değer belirleyebilirsiniz.
SELECTEDVALUE yerine ne zaman HASONEVALUE kullanılır?
Değeri okumanız gerekmiyor, yalnızca "bağlamda tek değer var mı" kontrolü yapmak istiyorsanız. Tipik örnek, bir oran ölçüsünün toplam satırında anlamsız olduğu durumdur: IF(HASONEVALUE(sütun), oran, BLANK()) kalıbı toplam satırında boş döndürür.
Dilimleyici dışındaki filtreler de SELECTEDVALUE sonucunu etkiler mi?
Evet. Fonksiyon dilimleyiciye değil, filtre bağlamına bakar. Sayfa filtresi, görsel filtresi, çapraz vurgulama ya da matristeki satır grubu sütunu tek değere indirirse SELECTEDVALUE o değeri verir. Yani ölçü, seçimin hangi yolla yapıldığına değil, sonuçta bağlamda ne kaldığına bakar.
Çoklu seçimde ilk değeri almak mümkün mü?
SELECTEDVALUE çoklu seçimde alternatif sonuç verir, ilk değeri vermez. Çoklu seçimi işlemek için VALUES ile elde edilen tabloyu CONCATENATEX, MIN ya da MAX gibi işlevlerle tek değere indirgemek gerekir. Hangi değerin anlamlı olduğunu iş mantığınız belirler.
SELECTEDVALUE bir sayıyla alternatif sonuç döndürebilir mi?
Evet, alternatif sonuç herhangi bir skaler değer olabilir: metin, sayı ya da tarih. Katsayı gibi sayısal bir sütunda nötr bir sayı vermek hesabı bozmaz. Dönen değerin türü sütunun türüne uygun olmalıdır, aksi halde sonraki hesaplarda tür hatası oluşabilir.