İç İçe IF Yerine SWITCH: Okunabilir Koşul Zinciri Nasıl Yazılır?
Beceri rehberi

İç İçe IF Yerine SWITCH: Okunabilir Koşul Zinciri Nasıl Yazılır?

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

SWITCH, bir ifadeyi değerlerle ya da koşullarla sırayla karşılaştırıp ilk uyan sonucu döndürür. SWITCH(TRUE()) kalıbı, uzadıkça okunmaz hale gelen IF zincirlerini düz bir listeye çevirir.

Bir bakışta

  1. Sabit değer için doğrudan eşleştirme yeter. İfade bir kod ya da kategori döndürüyorsa her değeri tek satırda sonuca bağlarsınız.
  2. Aralık ve karşılaştırma için ifade yerine TRUE verilir. Her koşul ayrı bir satırdır; IF zincirindeki parantez kalabalığı ortadan kalkar.
  3. İlk eşleşen koşul kazanır. En dar koşulu en üste yazmazsanız, sonraki koşullar hiç değerlendirilmez.
  4. Bütün sonuçlar aynı veri türünde olmalıdır. Biri metin, diğeri sayı dönerse formül hata verir.

SWITCH ne yapar ve söz dizimi nasıl okunur

SWITCH, DAX'ta bir ifadeyi değer listesine karşı değerlendirip birden çok olası sonuçtan birini döndüren fonksiyondur. Microsoft'un belgesinde de bu fonksiyonun amacı, çok sayıda iç içe IF ifadesini önlemek olarak anlatılır.

Söz dizimi şöyle okunur: önce değerlendirilecek ifade, ardından değer ve sonuç çiftleri, en sonda isteğe bağlı bir varsayılan sonuç gelir. Yani yapı şudur: SWITCH ( ifade, değer, sonuç, değer, sonuç, varsayılan ).

Yapı şu parçalardan oluşur: • ifade: her satırda ya da bağlamda yeniden hesaplanan, tek bir değer döndüren herhangi bir DAX ifadesi • değer: ifadenin sonucuyla eşleştirilecek sabit değer • sonuç: değer eşleşirse hesaplanacak skaler ifade • varsayılan sonuç: hiçbir değer eşleşmezse dönecek ifade

Hiçbir değer tutmaz ve varsayılan da yazılmamışsa fonksiyon BLANK döndürür. Bu yüzden son satıra anlamlı bir varsayılan koymak, raporda boş hücre görmemenin en kolay yoludur. Fonksiyon hesaplanmış sütunda, hesaplanmış tabloda ve ölçüde kullanılabilir.

Sabit değer eşleştirme: kodu etikete çevirmek

En yalın kullanım, bir sütundaki kodları okunur etiketlere çevirmektir. Belgedeki örnek ay numarasını ay adına çevirir; aynı mantıkla bir müşteri tablosunda tip kodunu açık yazıya dönüştürebilirsiniz.

Müşteri Tipi = SWITCH ( Müşteri[Tip Kodu], "K", "Kurumsal", "B", "Bireysel", "Tanımsız" )

Burada ifade sütunun kendisidir. Her satırda kod okunur, ilk eşleşen çiftin sonucu döner, hiçbiri tutmazsa "Tanımsız" yazılır. Aynı işi IF ile yazarsanız her yeni kod için bir parantez daha açmanız gerekir; SWITCH'te ise yeni kod yalnız bir satır ekler.

Bu kalıp özellikle kaynak sistemden gelen kısa kodların raporda kullanıcıya anlaşılır göstermek istendiği yerlerde işe yarar. Etiket tablosu zaten varsa ilişki kurmak daha sağlam bir yoldur; ancak birkaç sabit kod söz konusuysa SWITCH hızlı ve yeterlidir.

Şekil 1

Karşılaştırma türüne göre SWITCH biçimi seçilir

Aynı fonksiyon, farklı kullanım biçimleri

Hangi SWITCH biçimini yazmalıyım?
  1. Tek bir ifadeyi sabit değerlerle eşleştiriyorumSWITCH ( ifade, değer, sonuç, … )Kodu etikete çevirmek gibi birebir eşleşmeler için.
  2. Büyüktür, küçüktür gibi koşullar varSWITCH ( TRUE (), koşul, sonuç, … )Her satır bağımsız bir koşuldur; iç içe IF yerine geçer.
  3. Sonuçlar farklı veri türündeÖnce sonuçları aynı türe getirinBiri metin, biri sayı dönerse formül hata verir.
Kaynak: Microsoft Learn SWITCH belgesi ve sayfa içeriğiMindset Institute

SWITCH(TRUE()) kalıbı: iç içe IF'in yerine

Karşılaştırma gereken durumlarda ilk argüman olarak TRUE verilir. Bu durumda her "değer" yerine bir koşul yazarsınız ve DAX, ifadesi doğru çıkan ilk satırın sonucunu döndürür. Belge bu kullanımı, stok güvenlik düzeyi ile yeniden sipariş noktasını karşılaştıran bir risk etiketi örneğiyle gösterir.

Kurgusal bir hedef takibi ölçüsü düşünün. Önce iç içe IF ile yazılışı:

Durum = IF ( [Gerçekleşen] >= [Hedef], "Hedefte", IF ( [Gerçekleşen] >= [Uyarı Eşiği], "Yakın", "Geride" ) )

Aynı mantığın SWITCH(TRUE()) ile yazılışı:

Durum = SWITCH ( TRUE (), [Gerçekleşen] >= [Hedef], "Hedefte", [Gerçekleşen] >= [Uyarı Eşiği], "Yakın", "Geride" )

Koşul sayısı arttıkça fark büyür: IF zincirinde her seviye bir parantez daha kapatmayı gerektirir ve hangi koşulun hangi dala ait olduğunu gözle izlemek zorlaşır. SWITCH(TRUE()) ile her koşul kendi satırındadır, yeni bir eşik eklemek bir satır eklemekten ibarettir ve gözden geçiren kişi koşulları yukarıdan aşağı okur.

Boş değer kontrolleri de bu listeye girer. Belgedeki örnek, ISBLANK ile tanımsız durumları ayrı etiketlerle yakalar. Böylece "veri henüz girilmedi" ile "hedefin altında" farklı mesajlara dönüşür.

Koşulların sırası sonucu belirler

SWITCH ilk eşleşen satırda durur; sonraki satırlar değerlendirilmez. Belge bunu açıkça belirtir ve en kısıtlayıcı koşulların daha az kısıtlayıcı olanlardan önce yazılmasını ister.

Hatayı görmek için ürün maliyetini sınıflayan bir ölçüyü düşünün. Üstteki satır "büyük eşiğin altında", hemen altındaki satır "küçük eşiğin altında" diyorsa, küçük eşiğin altındaki her değer zaten üstteki satırı da sağladığı için alttaki satıra hiç ulaşılmaz. Belgenin kendi örneğinde de bu yüzden ara etiket hiçbir zaman dönmez; sonuç hep üstteki ya da varsayılan etiket olur.

Doğru sıra daima dardan genişe doğrudur: • en sıkı koşul (en küçük aralık ya da en kritik durum) en üstte • gittikçe gevşeyen koşullar altında • hiçbirini sağlamayanlar için varsayılan sonuç en altta

Bir formülü teslim etmeden önce sınır değerleri tek tek deneyin: eşiğin tam üstünde, tam altında ve eşitte olan satırlar beklenen etikete gidiyor mu, kontrol edin.

Veri türü, BLANK ve çıktı kontrolü

Bütün sonuç ifadeleri ile varsayılan ifade aynı veri türünde olmalıdır. Belgede, bir dalı metin ("Large"), diğer dalı sayı döndüren bir SWITCH'in hata verdiği gösterilir. Pratikte bu, bir etiket formülünde "Yok" yazmak yerine sayısal bir sıfır koymanın ya da sayısal bir ölçüde metin etiketi bırakmanın hataya yol açtığı anlamına gelir.

Çözüm basittir. Etiket üretiyorsanız bütün dalları metin yapın, sayı üretiyorsanız bütün dalları sayı yapın. Hesaplama sonucunu bir kartta sayı olarak, aynı ölçünün etiketini ise ayrı bir ölçüde göstermek çoğu zaman daha temizdir.

Varsayılan sonucu atlayabilirsiniz, ancak bu BLANK dönmesini kabul etmek demektir. Matris ve kartlarda boş hücre bırakmak bilinçli bir tercih olmalı. Bırakılacaksa bile hangi durumda boş çıktığını ölçü adının yanındaki açıklama alanına yazmak, aylar sonra formüle bakan kişiye zaman kazandırır.

Son olarak okunabilirlik: uzun koşul listelerinde her satırı girintiyle ve tek koşul tek satır olacak biçimde yazın. Aynı ara hesabı birden çok koşulda kullanıyorsanız, VAR ile tek bir değişkene alın; yinelenen ifade hem yavaşlatır hem de bakım yükü getirir.

Sık hatalar ve düzeltmeleri

SWITCH'le çalışırken tekrar eden hatalar şunlardır. Her birinin düzeltmesi küçüktür, ancak fark etmek kolay değildir; çünkü formül genellikle hata vermeden yanlış etiket döndürür.

Sık görülenler: TRUE yazmayı unutup koşulları ilk argümanın yerine koymak (koşullar bir değerle eşleşecek diye beklenir ve hiçbir satır tutmaz), geniş koşulu dardan önce yazmak, farklı veri türlerinde sonuç döndürmek ve eşitlik durumunu hiçbir satıra yazmamak. Sonuncusunda, yalnız büyüktür ve küçüktür satırları varsa tam eşit olan değer varsayılana düşer.

Aşağıdaki karşılaştırma, aynı hedef takibi ölçüsünün sorunlu ve düzeltilmiş halini kısaca gösterir. Düzeltme, koşul sırasının dardan genişe olması, eşitliğin bir satıra bağlanması ve bütün sonuçların metin olmasıdır.

Şekil 2

Sıra ve tür düzeltilince etiketler doğru çıkar

Sorunlu yazım ile düzeltilmiş yazım

Sorunlu
Düzeltilmiş
Geniş koşul en üstte, dar koşul sonraya yazılmış
En dar koşul en üstte, genişler altta
Eşit olan değer için satır yok
Eşitlik büyük eşit ile bir satıra bağlı
Bir dal metin, bir dal sayı döndürüyor
Bütün dallar metin etiketi döndürüyor
Kaynak: Microsoft Learn SWITCH belgesindeki sıra ve veri türü uyarılarıMindset Institute

Bu beceriyi Mindset programlarında nerede çalışırsınız

Power BI İleri Düzey ve DAX programında "Sıralama, Sınıflandırma ve Karmaşık Analizler" ile "DAX Diline Derinlemesine Giriş" başlıkları, koşullu sınıflama ve etiket üretme ihtiyacına doğrudan temas eder. Raporlama ekiplerinde bu, performans durumu, müşteri segmenti ya da risk etiketi gibi alanların tek bir okunabilir ölçüde toplanması anlamına gelir.

Uygulamalı Power BI ile Veri Analitiği ve Görselleştirme Sertifika Programı ise "DAX Analiz Dili ve Kullanımı" başlığıyla bu fonksiyonları tablo, kart ve matris çıktılarıyla birlikte çalışmak isteyen analistler için daha geniş bir temel sunar.

İlgili Mindset programı

Power BI İleri Düzey ve DAX

Sık sorulanlar

Sık sorulan sorular

SWITCH ile IF arasındaki fark nedir?

IF tek bir koşulu sınar ve doğru ile yanlış için birer sonuç döndürür; çok durum gerekiyorsa iç içe yazılır. SWITCH ise bir ifadeyi sırayla birçok değerle ya da TRUE ile birçok koşulla karşılaştırır ve ilk eşleşeni döndürür. Davranış aynıdır; SWITCH uzun listelerde daha kolay okunur ve yeni durum eklemek bir satırla biter.

SWITCH(TRUE()) yerine neden yalnız TRUE yazılıyor görüyorum?

Microsoft belgesinde örnekler TRUE biçiminde yazılmıştır; DAX'ta TRUE ile TRUE() aynı mantıksal değeri üretir. Önemli olan ilk argümanın doğru çıkan koşulu bulabilmesidir. Ekibinizde tek bir yazım biçimi seçip tüm ölçülerde tutarlı kullanmanız, formüllerin karşılaştırılmasını kolaylaştırır.

SWITCH bir sütun yerine ölçüde de kullanılır mı?

Evet. Belgeye göre SWITCH hesaplanmış sütunda, hesaplanmış tabloda ve ölçüde çalışır. Ölçüde koşulların genellikle başka ölçüleri karşılaştırdığını unutmayın; her bağlam için yeniden hesaplandığından, bağlama bağlı sonuçlar üretir. Sütunda ise sonuç satır başına bir kez hesaplanır ve veri yenilemede güncellenir.

Hiçbir koşul tutmazsa ne döner?

Varsayılan sonuç yazdıysanız o döner. Yazmadıysanız SWITCH BLANK döndürür. Bu, kartlarda boş görünmesine yol açabilir. Raporu kullanan kişinin "veri yok" ile "formül bozuk" arasındaki farkı anlayabilmesi için son satıra açıklayıcı bir varsayılan etiket koymak iyi bir uygulamadır.

Sonuçlar neden aynı veri türünde olmak zorunda?

DAX bir ifadenin tek bir veri türü döndürmesini bekler. Belge, bir dalı metin, diğerini sayı döndüren SWITCH'in hata verdiğini gösterir. Çözüm olarak bütün dalları aynı türe getirin: etiket istiyorsanız metin, hesap istiyorsanız sayı. Gerekirse sayı ve etiket için ayrı ayrı ölçüler tutun.

DAX SWITCH Fonksiyonu ve SWITCH(TRUE) Kalıbı