- VAR ve RETURN ne işe yarar?
- Söz dizimi ve ilk örnek
- Değişken ne zaman, hangi bağlamda hesaplanır?
- Performans: değişken her zaman hızlandırır mı?
- Hata ayıklamada VAR kullanımı
- Tablo değişkenleri ve hesaplanmış sütunlarda VAR
- Sık hatalar
- Bu beceriyi Mindset programlarında nerede çalışırsınız
- Sık sorulan sorular
DAX'ta değişken tanımlama: VAR ve RETURN nasıl çalışır
DAX'ta VAR ve RETURN söz dizimi, değişkenlerin ne zaman hesaplandığı, okunabilirlik ve performans kazancı, filtre bağlamı tuzağı ve örnek ölçüler.
VAR ve RETURN ne işe yarar?
DAX ölçüleri uzadıkça aynı alt hesap birkaç kez tekrar yazılır. Bir toplam, bir oran paydası ya da geçen yılın değeri ölçünün içinde defalarca geçer. Bu hem okumayı zorlaştırır hem de motorun aynı ifadeyi tekrar tekrar hesaplamasına yol açabilir.
VAR ile bir ifadeyi adlandırıp bir değişkene atarsınız, RETURN ile de sonucu kuran ifadeyi yazarsınız. Değişken bir kez hesaplanır, sonra ölçünün geri kalanında adıyla kullanılır. Böylece şu kazançları sağlarsınız: okunabilirlik, bakım kolaylığı ve çoğu durumda tekrarlı hesabın azalması.
Bir değişken ölçü ya da sütun adı gibi davranır ama bir model nesnesi değildir. Yalnızca tanımlandığı ifadenin içinde yaşar. Ölçü bittiğinde değişken de kaybolur, başka ölçüden çağrılamaz.
Söz dizimi ve ilk örnek
Genel yapı şöyledir:
Ölçü Adı = VAR DeğişkenAdı = ifade RETURN sonuç ifadesi
Bir örnek: bu yılın satışının geçen yıla göre değişimi.
Yıllık Değişim = VAR BuYıl = [Toplam Satış] VAR GeçenYıl = CALCULATE([Toplam Satış], SAMEPERIODLASTYEAR(Takvim[Tarih])) RETURN DIVIDE(BuYıl - GeçenYıl, GeçenYıl)
Burada iki değişken tanımlanmıştır. RETURN içinde her ikisi de hem çıkarmada hem bölmede kullanılır. Değişken olmasaydı CALCULATE ifadesini iki kez yazmanız gerekirdi. Okuyan kişi ise ölçünün ne yaptığını isimlerden anlar: bu yıl, geçen yıl, aradaki fark oran olarak.
Bir ölçüde istediğiniz kadar VAR yazabilirsiniz; bir değişken kendinden önce tanımlanmış değişkenleri kullanabilir. Sıra bu yüzden önemlidir: bir değişkeni tanımlamadan önce çağıramazsınız. RETURN ise ölçünün sonunda tek bir kez bulunur.
Değişken ne zaman, hangi bağlamda hesaplanır?
Bu bölüm VAR konusunun en önemli noktasıdır. Bir değişken, tanımlandığı satırda ve tanımlandığı filtre bağlamında hesaplanır. RETURN içinde CALCULATE ile bağlamı değiştirseniz bile değişkenin değeri değişmez. Sabitlenmiştir.
Örnek:
Pay = VAR Toplam = CALCULATE([Toplam Satış], ALL(Ürünler)) RETURN DIVIDE([Toplam Satış], Toplam)
Burada Toplam değişkeni tüm ürünler üzerinden hesaplanır. Görseldeki satırlar ürün ürün gezerken payda sabit kalır, pay ise her satır için değişir. Aynı ifade RETURN içinde yazılsaydı da aynı sonuç çıkardı, ama değişkenin avantajı payda hesabının bir kez yapılması ve ölçünün okunur olmasıdır.
Tuzak tersidir: bir değişkeni filtre bağlamı değişecek biçimde tanımlarsanız beklenen sonucu alamazsınız. Örneğin bir değişkeni CALCULATE içinde yeniden hesaplanmasını umarak tanımlarsanız, o değişken zaten bağlam değişmeden önce hesaplanmış olur. Bağlam değişimi gerekiyorsa değişkenin içinde CALCULATE kullanmalısınız. Bu davranış, filtre bağlamı ve bağlam geçişi konularına hakim olmayı gerektirir; CALCULATE sayfası bu temeli anlatır.
Performans: değişken her zaman hızlandırır mı?
Yaygın bir inanç, VAR'ın ölçüyü hızlandırdığıdır. Gerçek daha ayrıntılıdır. Aynı alt ifade ölçüde birden çok kez geçiyorsa, değişken motorun bunu yalnızca bir kez hesaplamasını sağlar ve belirgin kazanç sunabilir. İfade yalnızca bir kez kullanılıyorsa fark yoktur; okunabilirlik kazancı kalır.
Bir başka incelik, değişkenin değerinin ilk kullanıldığı yerde hesaplanmasına karşın tanımlandığı bağlamı taşımasıdır. Bu yüzden koşullu bir dalda (IF içinde) yalnızca belli şartta kullanılan bir değişken, o dal çalışmazsa genellikle hesaplanmaz; ama bu davranış motorun iç optimizasyonlarına bağlıdır. Motorun optimizasyonları sürümlere göre değiştiği için kesin bir kural yerine ölçüm yapmak gerekir.
Ölçüm için Performans Analizörü ve DAX Studio kullanılır. Ölçünün iki sürümünü, değişkenli ve değişkensiz, aynı sayfada çalıştırıp sorgu sürelerini karşılaştırın. Karar sezgiye değil sonuca dayanmalıdır.
Hata ayıklamada VAR kullanımı
Değişkenlerin bir başka faydası, karmaşık ölçüleri adım adım denemenizi sağlamasıdır. Ölçü yanlış sonuç verdiğinde RETURN satırını geçici olarak bir değişkene çevirip ara değerleri görebilirsiniz.
Örneğin yukarıdaki yıllık değişim ölçüsü beklenen sonucu vermiyorsa, RETURN'den sonra yalnızca GeçenYıl değişkenini yazıp ölçüyü bir tabloda izleyin. Boşsa sorun tarih tablosu ilişkisindedir. Doluysa RETURN'deki hesaplamaya geçin ve sonraki değişkeni deneyin.
Bu yöntem, uzun ölçülerin hata aramasını kısaltır. Yorum satırları da (çift eğik çizgiyle başlayan) değişkenlerin yanına eklenebilir; kendi niyetinizi açıklamak, ölçüyü aylar sonra tekrar açtığınızda size yardımcı olur.
Bir ölçünün ortasında VAR kullanmak da mümkündür: ifadenin içinde, bir fonksiyonun argümanı olarak VAR RETURN bloğu yazabilirsiniz. Bu kullanım yaygın değildir ama bir iç hesabı yerel olarak adlandırmak gerektiğinde işe yarar.
Tablo değişkenleri ve hesaplanmış sütunlarda VAR
Değişken yalnızca skaler değer tutmaz, tablo da tutabilir. Örneğin ilk N ürünü bir değişkende saklayıp sonra hem toplamını hem sayısını hesaplayabilirsiniz:
İlk Ürünler Satışı = VAR SeçilenÜrünler = TOPN([Seçilen N], ALL(Ürünler[Ürün Adı]), [Toplam Satış]) RETURN CALCULATE([Toplam Satış], SeçilenÜrünler)
Burada tablo, bir kez hesaplanıp CALCULATE'e filtre olarak verilir. Aynı tabloyu başka bir hesapta da kullanabilirsiniz, örneğin satır sayısını COUNTROWS ile almak için.
Hesaplanmış sütunlarda da VAR kullanılır. Bu durumda değişken satır bağlamında çalışır; bir satırın birkaç alanından türetilen ara değerler adlandırılır. Ancak bir hesaplanmış sütundaki ağır değişken veri yenilemede çalışır ve modeli büyütür, bu yüzden ölçülerle karıştırmamak gerekir.
Adlandırma konusunda tutarlılık önemlidir: değişken adlarının anlamlı olması (BuYıl, GeçenYıl, Payda) ve ölçü adlarıyla çakışmaması kodun okunmasını sağlar. Ölçü ve sütun adlarıyla aynı isimde değişken tanımlamaktan kaçının.
Sık hatalar
- Değişkeni RETURN'den sonra kullanmaya çalışmak: değişkenler yalnızca RETURN öncesinde tanımlanır.
- Bağlam değişimini göz ardı etmek: bir değişken filtre bağlamı dışında tutulduğunda dışarıdaki bağlamı taşır, CALCULATE içinde farklı sonuç beklemeyin.
- Her şeyi değişkene çevirmek: tek kullanımlık, kısa ifadeleri değişkene atmak ölçüyü okunmaz hâle getirebilir.
- Aynı adla iki değişken tanımlamak: aynı kapsamda tekrar edilen ad hata verir.
- Değişkeni görselde göstermeye çalışmak: değişkenler model nesnesi değildir, sütun gibi görsele eklenemez.
Kontrol listesi: ölçünün ilk satırında amacı yorumla belirtin, değişkenleri mantık sırasıyla dizin, RETURN'ü olabildiğince kısa tutun ve değişkenli ölçüyü hem toplam satırında hem tek satırda test edin.
Bu beceriyi Mindset programlarında nerede çalışırsınız
VAR ve RETURN, Power BI İleri Düzey ve DAX eğitiminde 'DAX Diline Derinlemesine Giriş' modülünde ele alınan DAX söz diziminin parçasıdır; bağlam davranışı için 'CALCULATE ve Filtre Bağlamında Ustalaşmak' modülü tamamlayıcıdır. Karmaşık ölçüleri devralıp okunur hâle getirmesi gereken BI geliştiricileri ve finans raporlama analistleri için uygundur.
Kurumsal ekiplerde ölçü yazım standardı oluşturmak isteyenler, değişken adlandırma kuralını ortak bir rehbere bağlayarak ölçü devrini kolaylaştırabilir.
İlgili Mindset programı
Power BI İleri Düzey ve DAX
Sık sorulan sorular
VAR ile tanımlanan değişken başka ölçüde kullanılabilir mi?
Hayır. Değişken yalnızca tanımlandığı ifadenin içinde geçerlidir. Başka ölçüde aynı değere ihtiyaç varsa o hesabı ayrı bir ölçü olarak tanımlayıp iki yerde de çağırmanız gerekir. Aynı ölçü içinde ise bir değişken, kendisinden sonra tanımlanan değişkenlerde kullanılabilir; böylece hesabı adım adım kurabilirsiniz.
Değişken filtre bağlamı değişince yeniden hesaplanır mı?
Hayır. Değişken tanımlandığı bağlamda bir kez hesaplanır ve değeri sabitlenir. RETURN içinde CALCULATE ile bağlamı değiştirseniz bile değişkenin değeri aynı kalır. Bağlam değişimini istiyorsanız hesabı CALCULATE içinde yazın. Bir iteratörün içinde tanımlanan değişken ise her satır için ayrı hesaplanır.
Tek bir RETURN içinde birden fazla değer döndürülebilir mi?
Ölçü tek bir değer döndürür. Birden fazla sonuca ihtiyaç varsa her biri için ayrı ölçü yazın ya da metin biçiminde birleştirin. Tablo döndürmek isterseniz ölçü yerine hesaplanmış tablo ya da sorgu kullanılır.
VAR kullanmak sorguyu her zaman hızlandırır mı?
Hayır. Aynı ifade birkaç kez geçiyorsa kazanç olabilir; tek kullanımda genelde fark yoktur. Ağır bir ifade yalnızca bir dal için gerekiyorsa değişkene atmak aksine maliyet de getirebilir. Performans Analizörü ile ölçmek en güvenilir yoldur.
İlgili rehberler
Kategori: Veri Analitiği ve İş Zekası