DAX’ın bazı fonksiyonları çok yaratıcı formüller yazmaya imkan sağlıyor: SWITCH fonksiyonu bunlardan biri. Özellikle başka fonksiyonlarla birlikte kullanıldığında, yaptığı iş neredeyse orijinal kullanım amacını aşıyor.
MSDN’e göre SWITCH fonksiyonunun orijinal kullanımı şöyle:
SWITCH (deyim;
değer ; sonuç ;
değer ; sonuç ;
... ;
hiçbiri değilse sonuç)
Yani, tek bir deyimi (expression) farklı değerler altında test edip, hangi “condition” doğru ise (true) ise o duruma ait sonucu döndürmemizi sağlıyor.
Bu açıdan iç içe geçmiş (nested) IF fonksiyonuna benziyor. Örneklemek gerekirse, Tarih tablosuna İngilizce ay isimlerini eklemek istediğimizi varsayalım;
IF ile yazarsak
=
IF ([Ay #] = 1; "Ocak";
IF ([Ay #] = 2; "Şubat";
IF ([Ay #] = 3; "Mart";
IF ([Ay #] = 4; "Nisan";
IF ([Ay #] = 5; "Mayıs";
IF ([Ay #] = 6; "Haziran";
IF ([Ay #] = 7; "Temmuz";
IF ([Ay #] = 8; "Ağustos";
IF ([Ay #] = 9; "Eylül";
IF ([Ay #] = 10; "Ekim";
IF ( [Ay #] = 11; "Kasım";
IF ( [Ay #] = 12; "Aralık";
"Ay Bilinmiyor" ))))))))))))
SWITCH ile yazarsak
=
SWITCH (
[Ay #];
1; "Ocak";
2; "Şubat";
3; "Mart";
4; "Nisan";
5; "Mayıs";
6; "Haziran";
7; "Temmuz";
8; "Ağustos";
9; "Eylül";
10; "Ekim";
11; "Kasım";
12; "Aralık";
"Ay Bilinmiyor"
)
Bu açıdan SWITCH fonksiyonu, iç içe geçmiş IF yapısının biraz daha kolay yazımı gibi. Tabiri caizse “sugar synxtax” ‘ı.
Bir başka örnek yapalım:
Gerçekleşen satışlarla bütçeyi karşılaştıran bir [Realizasyon %] metriğimiz olsun ve gerçekleşme yüzdesine göre sonuçun nasıl olduğuna karar veriyor olalım:
Bütçe Değerlendirme :=
IF ([Realizasyon %] >= 0,8; "İyi";
IF ( [Realizasyon %] >= 0,7; "Orta";
IF ( [Realizasyon %] >= 0,6; "Kötü";
"Çok Kötü" ) ))
** İç içe geçmiş IF yapısında “conditionlar” sırayla test edilir ve doğru olan (true olan) ilk condition sonucu geri döndürülür.
Aynı metriği SWITCH ile yazmaya çalışalım;
Bütçe Değerlendirme :=
SWITCH (
[Realizasyon %] >= 0,8;"İyi";
[Realizasyon %] >= 0,7;"Orta";
[Realizasyon %] >= 0,6;"Kötü";
"Çok Kötü"
)
Bu metriği bir matrise düşürdüğümüzde hata mesajı alırız.: Çünkü tek bir deyimi değil, birden fazla deyimi test ediyoruz. Realizasyon %’sini farklı deyimler olarak yazdık.
SWITCH bizden ilk parametre olarak tek bir deyim istiyor. Fonksiyonu kandırmak için TRUE() ile birlikte kullanalım
TRUE(), tek başına kullanıldığında “True” değerini döndüren basit bir fonksiyon.
Bütçe Değerlendirme :=
SWITCH (
TRUE();
[Realizasyon %] >= 0,8; "İyi";
[Realizasyon %] >= 0,7; "Orta";
[Realizasyon %] >= 0,6; "Kötü";
"Çok Kötü"
)
SWITCH’e istediği tek deyimi vererek, ki her zaman “True” değerini döndürür, farklı “condition” ‘lara göre farklı değerler döndürebildik.
Bu durumda MSDN tanımına şöyle bir ekleme yapılabilir:
:=
SWITCH (
TRUE ();
deyim 1; değer 1;
deyim 2; değer 2;
deyim 3; değer 3;
hiçbiri değilse sonuç)
Yukarıdaki kalıp, içiçe geçmiş IF’ler yazmaktan daha kolaydır, daha kolay debug edilir.
SWITCH fonksiyonunun VALUES(), SELECTED() ve UNICHAR() ile olan kombinasyonları da son derece kullanışlı.
Bunlardan UNICHAR() ile olana bir örnek yapalım:
Bütçe Durum :=
SWITCH (
TRUE();
[Realizasyon %] >= 0,8; UNICHAR(128077);
[Realizasyon %] >= 0,7; UNICHAR(128528);
[Realizasyon %] >= 0,6; UNICHAR(128681);
UNICHAR(9940)
)
Realizasyon %’sine göre farklı karakterler döndürdük! Daha başka karakterler göstermek isterseniz gerekli unichar değerlerini bu sitede bulabilirsiniz.
Bir varyasyon daha yapalım benzer mantıkta, bu sefer içi dolu ve içi boş yıldız karakterlerini değere göre tekrarlayalım ve birleştirelim:
Yıldız :=
REPT ( UNICHAR ( 9733 ); [Realizasyon %] * 5 )
& REPT ( UNICHAR ( 9734 ); 10 - [Realizasyon %] * 5 )
REPT fonksiyonu, ilk parametresinde verilen karakteri, ikinci parametresinde bulduğu sayı kadar tekrarlayan bir fonksiyon. “&;” ile de bulduğu boş ve dolu yıldızları birleştirmiş olduk.
Yazıda kullanılan modeli ekteki linkten indirebilirsiniz.
Sadece üyeler görebilir. Hızlı üyelik için sosyal medya hesabınızla giriş yapabilirsiniz!