DAX formüllerinizi geliştirmek için değişkenleri kullanma
Veri modelleyicisi olarak bazı DAX hesaplamaları yazmak ve hata ayıklamak zor olabilir. Karmaşık hesaplama gereksinimleri genellikle bileşik veya karmaşık ifadeler yazmayı kapsar. Bileşik ifadeler birçok iç içe işlevlerin kullanılmasını ve muhtemelen ifade mantığının yeniden kullanılmasını içerebilir.
DAX formüllerinizde değişkenleri kullanmak daha karmaşık ve verimli hesaplamalar yazmanıza yardımcı olabilir. Değişkenler performansı, güvenilirliği, okunabilirliği artırabilir ve karmaşıklığı azaltabilir.
Bu makalede, yıldan yıla (YoY) satış büyümesi için örnek bir ölçü kullanarak ilk üç avantajı göstereceğiz. (YoY satış büyümesi formülü, dönem satışlarından geçen yılın aynı dönemine ait satışlar çıkarılıp, çıkan sonuç tekrar geçen yılın aynı dönemine ait satışlara bölünerek hesaplanır.)
Aşağıdaki ölçü tanımıyla başlayalım.
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)
Ölçü doğru sonucu verir, ancak şimdi nasıl geliştirilebileceğini görelim.
Performansı geliştirme
Formülün "geçen yılın aynı dönemini" hesaplayan ifadeyi yinelediğini unutmayın. Power BI'ın aynı ifadeyi iki kez değerlendirmesi gerektirdiğinden bu formül verimsizdir. Ölçü tanımı, VARbir değişken kullanılarak daha verimli hale getirilebilir.
Aşağıdaki ölçü tanımı bir iyileştirmeyi temsil eder. "Geçen yılın aynı dönemi" sonucunu salesPriorYear adlı bir değişkene atamak için bir ifade kullanır. Değişken daha sonra RETURN ifadesinde iki kez kullanılır.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
Ölçü doğru sonucu üretmeye devam eder ve bunu sorgu süresinin yaklaşık yarısında yapar.
Okunabilirliği geliştirme
Önceki ölçü tanımında değişken adı seçiminin RETURN ifadesinin anlaşılmasını nasıl daha kolay hale getirdiğine dikkat edin. İfade kısa ve kendi kendine açıklayıcıdır.
Hata ayıklamayı basitleştirme
Değişkenler formülde hata ayıklamanıza da yardımcı olabilir. Bir değişkene atanan bir ifadeyi test etmek için, değişken çıkışı için RETURN ifadesini geçici olarak yeniden yazarsınız.
Aşağıdaki ölçü tanımı yalnızca SalesPriorYear değişkenini döndürür. RETURN ifadesinin nasıl yorum satırı haline getirildiğine dikkat edin. Bu teknik, hata ayıklama işlemi tamamlandıktan sonra kolayca geri döndürmenizi sağlar.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear
Karmaşıklığı azaltma
DAX'nin önceki sürümlerinde değişkenler henüz desteklenmiyordu. Dış filtre bağlamlarına başvurmak için EARLIER veya EARLIESTDAX işlevlerini kullanmak için yeni filtre bağlamları getiren karmaşık ifadeler gerekiyordu. Ne yazık ki, veri modelleyicileri bu işlevleri anlamak ve kullanmakta zor buldu.
Değişkenler her zaman RETURN ifadenizin uyguladığı filtrelerin dışında değerlendirilir. Bu nedenle, değiştirilen filtre bağlamında bir değişken kullandığınızda, EARLIEST işleviyle aynı sonucu elde eder. Bu nedenle EARLIER veya EARLIEST işlevlerinin kullanılması önlenebilir. Bu, artık daha az karmaşık ve anlaşılması daha kolay formüller yazabileceğiniz anlamına gelir.
Alt Kategorisi tablosuna eklenen aşağıdaki hesaplanmış sütun tanımını göz önünde bulundurun. Alt Kategori Satışları sütun değerlerine göre her ürün alt kategorisi için bir derecelendirme değerlendirir.
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1
Hesaplanan sütun tanımı, EARLIER işlevi yerine bir değişken kullanılarak geliştirilebilir.
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
İlgili içerik
- VAR DAX makale
- Öğrenme yolu: Power BI Desktop'ta DAX kullanma
- Soru? Power BI Topluluğu'na sormayı deneyin