CALCULATETABLE

Daha önceki CALCULATE yazılarında FILTER, AND ve OR kullanımına ilişkin örnekler yapmıştık. Örnekleri kısaca tekrarlayıp konuyu CALCULATETABLE 'a bağlayacağım.

Satışlar := SUM ('Satışlar'[Tutar])

Contoso markalı siyah ürünlerin satışlarını hesaplamak için aşağıdaki gibi boolean tipinde filtrelerle CALCULATE fonksiyonunu kullanmıştık.

Contoso Siyah := 
CALCULATE (
    [Satışlar];
    'Ürünler'[Marka] = "Contoso";
    'Ürünler'[Renk] = "Siyah"
)

CALCULATE'in filtrelerinin boolean tipi olması durumunda formülün internal açılımının FILTER ( ALL …)  şeklinde olması önemli bir detay, bu yüzden tekrarlayacağım.

Contoso Siyah Açılım := 
CALCULATE (
    [Satışlar];
    FILTER (
        ALL ( 'Ürünler'[Marka]; 'Ürünler'[Renk] );
        AND ( 'Ürünler'[Marka] = "Contoso"; 'Ürünler'[Renk] = "Siyah" )
    )
)

Yani "Marka" ve "Renk" sütunları üzerindeki tüm filtreleri kaldır, Marka için = Contoso, Renk için de =Siyah context'ini yarat.

Aşağıdaki formül ise  mevcut filter context'e uyarak  çalışacaktır.

Contoso Siyah FILTER := 
CALCULATE (
    [Satışlar];
    FILTER (
        'Ürünler';
        AND ( 'Ürünler'[Marka] = "Contoso"; 'Ürünler'[Renk] = "Siyah" )
    )
)


FILTER ile yazdığımız formülü, tüm ürünler tablosunu görecek şekilde ALL ile revize edelim:

Contoso Siyah FILTER ALL := 
CALCULATE (
    [Satışlar];
    FILTER (
        ALL ( 'Ürünler' );
        AND ( 'Ürünler'[Marka] = "Contoso"; 'Ürünler'[Renk] = "Siyah" )
    )
)

Matrise düşürüyorum hepsini:

"Contoso Siyah" metriği ile son yazdığımız formül aynı sonuçları veriyor gibi gözükse de arada ciddi bir fark var: İlki sadece marka ve renk sütunları üzerindeki filtreleri kaldırıyor, diğeri ise tüm ürünler tablosundaki filtreleri kaldırıyor. Matrise marka ve renk haricinde bir sütun düşürdüğümüzde -örneğin Kategoriler gibi- aradaki fark ortaya çıkacaktır.


CALCULATETABLE fonksiyonu, CALCULATE 'in eşleniğidir. Aradaki tek fark birinin sayısal değer döndürmesi, diğerinin ise bir tablo döndürmesidir.

CALCULATE ile yazdığımız "Contoso Siyah" metriğini bir de CALCULATETABLE ile yazalım:

CALCULATETABLE Versiyonu := 
CALCULATE (
    [Satışlar];
    FILTER(
        CALCULATETABLE (
            'Ürünler';
            ALL('Ürünler'[Marka]);
            ALL('Ürünler'[Renk])
        );
        AND(
            'Ürünler'[Marka] = "Contoso";
            'Ürünler'[Renk] = "Siyah"
        )
    )
)

Matrise düşürelim:


CALCULATETABLE  'ın bu kullanım şekli, tablodaki istediğimiz sütunlar üzerindeki filtreleri kaldırıp – ALL('Ürünler'[Marka] gibi –  diğer filtrelerin olduğu gibi kalmasını ya da yeni condition'lar eklememizi sağlıyor.

Bilgisayar kategorisindeki kırmızı ürünlerin olduğu tabloyu CALCULATETABLE ile bulalım: Modelling tabından New Table diyerek aşağıdaki formülü yazıyorum.

Bilgisayar Kategorisindeki Kırmızı Ürünler CALCULATETABLE := 
CALCULATETABLE (
    'Ürünler';
    'Ürünler'[Renk] = "Kırmızı";
    'Ürün Kategorileri'[Kategori] = "Bilgisayarlar"
)


Aynen CALCULATE 'te olduğu gibi, filtreler için birden fazla tablodan sütun çağırabildiğimize dikkatinizi çekerim!

Böylelikle orijinal tablodan yeni bir tablo elde etmiş olduk.

Basit bir örnek olacak ama SUMMARIZE fonksiyonuna da bir giriş örneği yapmış olalım: Ürünler tablosundaki sütunların tamamını değil de sadece bazılarını alalım.

Bilgisayar Kategorisindeki Kırmızı Ürünler SUMMARIZE CALCULATETABLE = 
CALCULATETABLE (
    SUMMARIZE('Ürünler'; 'Ürünler'[Marka];'Ürünler'[Renk];'Ürünler'[Ürün Kodu]);
    'Ürünler'[Renk] = "Kırmızı";
    'Ürün Kategorileri'[Kategori] = "Bilgisayarlar"
)

CALCULATETABLE, bizden parametre olarak bir  tablo isteyen  diğer tüm fonksiyonlarla kullanılabilir.

Örneğin 2008 yılı şatışlarını aşağıdaki gibi bir formülle bulabiliriz.

Satışlar 2008 CALCULATETABLE :=
SUMX ( CALCULATETABLE ( 'Satışlar'; Tarih[Yıl] = 2008 ); 'Satışlar'[Tutar] )

Son olarak, RELATEDTABLE ile CALCULATETABLE bir  row context  altında kullanılması durumunda aynı görevi görüyor. Ürünlerin kaç kez satıldığını, ürünler tablosuna bir  hesaplanmış sütun olarak  her iki fonksiyonla da getirebiliriz.

Kaç Kez Satıldı CALCULATETABLE = COUNTROWS ( CALCULATETABLE ('Satışlar'))
Kaç Kez Satıldı RELATEDTABLE = COUNTROWS ( RELATEDTABLE ('Satışlar'))


Yazıdaki modeli indirebilirsiniz.

Sadece kayıtlı üyeler görebilir. Giriş veya Üyelik için login.

Yaklaşan Power BI Eğitimleri

Uçtan Uca Power BI,  17-18 Aralık
DAX ve Veri Modelleme, 24-25 Aralık