FILTER’ı bir filtre bağımsız değişkeni olarak kullanmaktan kaçınma

Veri modelleyicisi olarak, değiştirilmiş bir filtre bağlamında değerlendirilmesi gereken DAX ifadeleri yazmanız yaygın olarak görülür. Örneğin, "yüksek marjlı ürünler" için satışları hesaplamak için bir ölçü tanımı yazabilirsiniz. Bu hesaplamayı bu makalenin ilerleyen bölümlerinde açıklayacağız.

Dekont

Bu makale özellikle İçeri Aktarma tablolarına filtre uygulayan model hesaplamaları için geçerlidir.

CALCULATE ve CALCULATETABLE DAX işlevleri önemli ve kullanışlı işlevlerdir. Filtreleri kaldıran veya ekleyen ya da ilişki yollarını değiştiren hesaplamalar yazmanıza olanak sağlar. Boole ifadeleri, tablo ifadeleri veya özel filtre işlevleri olan filtre bağımsız değişkenleri geçirilerek yapılır. Bu makalede yalnızca Boole ve tablo ifadelerini ele alacağız.

Tablo ifadesi kullanarak kırmızı ürün satışlarını hesaplayan aşağıdaki ölçü tanımını göz önünde bulundurun. Product tablosuna uygulanabilecek filtrelerin yerini alır.

Red Sales =
CALCULATE(
    [Sales],
    FILTER('Product', 'Product'[Color] = "Red")
)

CALCULATE işlevi, FILTER DAX işlevi tarafından döndürülen ve Product tablosunun her satırı için filtre ifadesini değerlendiren bir tablo ifadesi kabul eder. Doğru sonucu elde eder; kırmızı ürünler için satış sonucu. Ancak Boole ifadesi kullanılarak çok daha verimli bir şekilde elde edilebilir.

Burada tablo ifadesi yerine Boole ifadesi kullanan geliştirilmiş bir ölçü tanımı yer alır. KEEPFILTERS DAX işlevi, Color sütununa uygulanan mevcut filtrelerin korunmasını ve üzerine yazılmamasını sağlar.

Red Sales =
CALCULATE(
    [Sales],
    KEEPFILTERS('Product'[Color] = "Red")
)

Mümkün olduğunda filtre bağımsız değişkenlerini Boole ifadeleri olarak geçirmeniz önerilir. Bunun nedeni, İçeri aktarma modeli tablolarının bellek içi sütun depoları olmasıdır. Sütunları bu şekilde verimli bir şekilde filtrelemek için açıkça iyileştirilmiştir.

Ancak, filtre bağımsız değişkenleri olarak kullanıldıklarında Boole ifadelerine uygulanan kısıtlamalar vardır. Bunlar:

  • Birden çok tablodaki sütunlara başvuru yapılamıyor
  • Ölçüye başvurulamaz
  • İç içe CALCULATE işlevleri kullanılamaz
  • Tablo tarayabilen veya döndüren işlevler kullanılamaz

Bu, daha karmaşık filtre gereksinimleri için tablo ifadelerini kullanmanız gerektiği anlamına gelir.

Şimdi farklı bir ölçü tanımı düşünün. Bu gereksinim, yalnızca kar elde eden aylar için satışları hesaplamaktır.

Sales for Profitable Months =
CALCULATE(
    [Sales],
    FILTER(
        VALUES('Date'[Month]),
        [Profit] > 0)
    )
)

Bu örnekte FİlTRE işlevi kullanılmalıdır. Bunun nedeni, kar elde etmeyen ayları ortadan kaldırmak için Kar ölçüsünün değerlendirilmesi gerektiğidir. Filtre bağımsız değişkeni olarak kullanıldığında Boole ifadesinde ölçü kullanmak mümkün değildir.

Öneriler

En iyi performans için mümkün olduğunca filtre bağımsız değişkenleri olarak Boole ifadelerini kullanmanız önerilir.

Bu nedenle FILTER işlevi yalnızca gerektiğinde kullanılmalıdır. Karmaşık sütun karşılaştırmalarını filtrelemek için bunu kullanabilirsiniz. Bu sütun karşılaştırmaları şunları içerebilir:

  • Ölçümler
  • Diğer sütunlar
  • OR DAX işlevini veya OR mantıksal işlecini (||) kullanma