Aracılığıyla paylaş


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

işlevi, geçerli satır bağlamıiçinde sütun değeri olan Alt Kategori Satışları'na başvurmak için kullanılır.

Hesaplanan sütun tanımı, EARLIER işlevi yerine bir değişken kullanılarak geliştirilebilir. CurrentSubcategorySales değişkeni,geçerli satır bağlamında Alt Kategori Satışları sütun değerini depolar ve RETURN ifadesi, bunu farklı bir filtre bağlamı içinde kullanır.

Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
    COUNTROWS(
        FILTER(
            Subcategory,
            CurrentSubcategorySales < Subcategory[Subcategory Sales]
        )
    ) + 1