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

Veri modelleyicisi olarak değiştirilen bir filtre bağlamında değerlendirilmesi gereken DAX ifadelerini yazmanız gerekebilir. Örneğin "kar marjı yüksek ürünler" ile ilgili satışları hesaplamak için bir ölçü tanımı yazabilirsiniz. Bu hesaplamayı makalenin ilerleyen bölümlerinde açıklayacağız.

Not

Bu makale özellikle içeri aktarılan tabloları filtreleyen model hesaplamalarıyla ilgilidir.

CALCULATE ve CALCULATETABLE DAX işlevleri, önemli ve kullanışlı işlevlerdir. Bu işlevleri kullanarak filtre ekleyen veya kaldıran ya da ilişki yollarını değiştiren hesaplamalar yazabilirsiniz. Bunun için filtre bağımsız değişkenlerinin Boole ifadeleri, tablo ifadeleri veya özel filtre işlevleri şeklinde geçirilmesi gerekir. Bu makalede yalnızca Boole ve tablo ifadelerini inceleyeceğiz.

Aşağıda yer alan ve tablo ifadesi kullanarak kırmızı renkli ürünlerin satışını hesaplayan ölçü tanımını inceleyin. Bu tanım, Product tablosuna uygulanmış olabilecek tüm filtrelerin yerini alacaktır.

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

CALCULATE işlevi, FILTER DAX işlevi tarafından döndürülen bir tablo ifadesini kabul eder ve Product tablosunun her bir satırı için filtre ifadesini değerlendirir. Bu şekilde doğru sonuca yani kırmızı renkli ürünlerin satış rakamlarına ulaşır. Ancak Boole ifadesi kullanarak bu sonucu çok daha verimli bir şekilde elde etmek mümkündür.

Aşağıda tablo ifadesi yerine Boole ifadesini kullanan geliştirilmiş ölçü tanımı verilmiştir. KEEPFILTERS DAX işlevi Color sütununa eklenmiş mevcut tüm filtrelerin korunmasını ve bunların üzerine yazılmamasını güvence altına alır.

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

Mümkün olduğunca filtre bağımsız değişkenlerini Boole ifadeleri olarak geçmeniz önerilir. Bunun nedeni, içeri aktarılan model tablolarının bellek içi sütun depoları olmasıdır. Bunlar, sütunları bu şekilde filtrelemek üzere özel olarak iyileştirilmiştir.

Ancak filtre bağımsız değişkeni olarak kullanılan Boole ifadeleri için geçerli olan kısıtlamalar vardır. Kısıtlamalar şunlardır:

  • Sütunlar, diğer sütunlarla karşılaştırılamaz
  • Ölçüye başvuru yapılamaz
  • İç içe CALCULATE işlevleri kullanılamaz
  • Bir tabloyu tarayan veya döndüren işlevler kullanılamaz

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

Şimdi farklı bir ölçü tanımını inceleyelim.

High Margin Product Sales =
CALCULATE(
    [Sales],
    FILTER(
        'Product',
        'Product'[ListPrice] > 'Product'[StandardCost] * 2
    )
)

Kar marjı yüksek ürünler, liste fiyatı standart maliyetinin iki katından fazla olan ürünlerdir. Bu örnekte FILTER işlevi kullanılmalıdır. Bunun nedeni, filtre ifadesinin Boole ifadesi için fazla karmaşık olmasıdır.

Burada bir örnek daha vardır. Bu kez satışların hesaplanması gerekir ancak yalnızca kar elde edilen aylar dahil edilmelidir.

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

Bu örnekte FILTER işlevi de kullanılmalıdır. Bunun nedeni, Profit ölçüsünün değerlendirilerek kar elde edilmeyen hariç tutulmasının gerekmesidir. Filtre bağımsız değişkeni olarak kullanılması durumunda Boole ifadelerinde ölçü kullanılamaz.

Ö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 gerekli olduğunda kullanılmalıdır. Bunu, karmaşık filtreye sahip sütun karşılaştırmaları gerçekleştirmek için kullanabilirsiniz. Bu sütun karşılaştırmaları şunları içerebilir:

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

Ayrıca bkz.