CALCULATE Nasıl Çalışır?
DAX öğrenirken CALCULATE ile karşılaşmamak neredeyse mümkün değildir. Çünkü CALCULATE, bir ifadeyi değiştirilmiş filtre bağlamında değerlendirmeyi sağlar. Özellikle koşullu toplamlar, dönem karşılaştırmaları, oran hesaplamaları ve gelişmiş DAX ölçülerinde temel yapı taşlarından biridir.
Temel CALCULATE kullanımı
Önce temel ölçüyü oluşturalım:
Toplam Satış = SUM(Satis[Tutar])
Belirli bir kategori için satış hesaplamak istersek:
Elektronik Satış = CALCULATE([Toplam Satış], Urun[Kategori] = "Elektronik")
Burada CALCULATE, [Toplam Satış] ölçüsünü kategori filtresi uygulanmış bağlamda değerlendirir.
CALCULATE filtre bağlamını nasıl değiştirir?
CALCULATE içine verilen filtre, mevcut bağlamın üzerine uygulanabilir veya aynı sütun üzerinde mevcut filtreyi değiştirebilir. Bu nedenle bir CALCULATE ifadesini okurken önce mevcut filtre bağlamını, sonra CALCULATE’ın bu bağlamı nasıl değiştirdiğini düşünmek gerekir.
REMOVEFILTERS ile toplamı hesaplamak
Bir kategorinin toplam satış içindeki oranını hesaplamak için paydada kategori filtresini kaldırabiliriz:
Kategori Payı = DIVIDE([Toplam Satış], CALCULATE([Toplam Satış], REMOVEFILTERS(Urun[Kategori])))
Bu yaklaşımda pay mevcut bağlamı kullanırken payda kategori filtresinin kaldırıldığı bağlamı kullanır.
KEEPFILTERS neden önemlidir?
CALCULATE içindeki filtreler bazı durumlarda aynı sütundaki mevcut filtreyi değiştirebilir. KEEPFILTERS, yeni filtreyi mevcut filtreyle birlikte değerlendirmek istediğiniz senaryolarda kullanılabilir.
Context transition nedir?
Filtre argümanı olmadan kullanılan CALCULATE, uygun row context senaryolarında satır bağlamını filtre bağlamına dönüştürebilir. Bu konu özellikle iterator fonksiyonları ve hesaplanmış sütunlarda önem kazanır.
CALCULATE öğrenmenin pratik yolu
Bir ölçüyü yazdıktan sonra şu soruyu sorun: ‘Bu ölçünün hangi filtreleri korumasını, hangilerini değiştirmesini istiyorum?’ Bu soru CALCULATE mantığını kavramayı kolaylaştırır.
Uygulama: filtreyi değiştirmek ile kesiştirmek
Satis[Tutar] işlem tutarını, Urun[Kategori] ürün kategorisini göstersin. Urun tablosunun benzersiz ürün anahtarı Satis tablosundaki ürün anahtarına bire çok, aktif ilişkiyle bağlı olmalıdır. Böylece ürün filtresi satış tablosuna ulaşır. Aşağıdaki ölçüleri ayrı ayrı oluşturun.
Toplam Satış = SUM(Satis[Tutar])
Elektronik Satış =
CALCULATE(
[Toplam Satış],
Urun[Kategori] = "Elektronik"
)
Seçimde Elektronik Satış =
CALCULATE(
[Toplam Satış],
KEEPFILTERS(Urun[Kategori] = "Elektronik")
)
Bir dilimleyicide Mobilya seçiliyken Elektronik Satış, aynı kategori sütunundaki seçimi Elektronik ile değiştirir. Seçimde Elektronik Satış ise Mobilya ve Elektronik koşullarını kesiştirir; ortak kayıt bulunmadığında boş döner. Tarih gibi başka alanlardaki filtreler, ayrıca kaldırılmadıkları sürece etkili kalır. Sonucu kontrol etmek için seçimsiz, Elektronik seçili ve Mobilya seçili üç durumu karşılaştırın.
Değişkeni hangi bağlamda hesapladığınıza dikkat edin
Elektronik Satış VAR =
CALCULATE(
SUM(Satis[Tutar]),
Urun[Kategori] = "Elektronik"
)
Önceden VAR SatisTutari = [Toplam Satış] şeklinde hesaplanmış bir skaler değişkeni CALCULATE içine koymak, değişkenin değerini yeni filtrede yeniden hesaplatmaz. Filtreye göre değişmesini istediğiniz ölçüyü veya ifadeyi CALCULATE içinde değerlendirin. Değişkenin tanımlandığı bağlam, formülün görünüşünden daha önemlidir.
Sonuç
Power BI’da DAX konusunda başarılı olmak, yalnızca fonksiyonları ezberlemekten çok veri modelini ve hesaplama bağlamını anlamayı gerektirir. Gerçek projelerde doğru DAX; doğru model, doğru veri kaynağı ve doğru rapor tasarımıyla birlikte ele alındığında daha sürdürülebilir sonuç verir.
Sık Sorulan Sorular
CALCULATE ne işe yarar?
Bir ifadeyi değiştirilmiş filtre bağlamında değerlendirmeye yarar.
CALCULATE ile CALCULATETABLE aynı mıdır?
Temel mantıkları benzerdir; CALCULATE bir ifade sonucunu, CALCULATETABLE ise tablo ifadesini filtre bağlamında değerlendirir.
CALCULATE neden DAX’ın en önemli fonksiyonlarından biridir?
Çünkü filtre bağlamını değiştirme yeteneği çok sayıda gelişmiş hesaplama senaryosunun temelini oluşturur.
Danışmanlık
Power BI raporlarınızda DAX, veri modeli veya performans sorunları yaşıyorsanız mevcut yapınızı inceleyerek raporlama mimarisi, DAX optimizasyonu ve performans analizi konusunda danışmanlık desteği alabilirsiniz.
Kaynak
Microsoft Learn: calculate-function-dax
Metin SEVİNDİK | İş Zekası ve Veri Danışmanlığı
Power BI ve DAX danışmanlığı için iletişime geçin.
DAX serisinde okumaya devam edin
DAX Nedir, Nasıl Çalışır, Zor mu? · ALL, ALLEXCEPT ve REMOVEFILTERS Arasındaki Farklar · Power BI’da YTD, MTD ve QTD Hesaplamaları