Yeni DAX Fonksiyonları – REMOVEFILTERS, CONVERT, Eylül Yenilikleri, Temalar

Power BI 'a Eylül ayı içerisinde gelen güncellemeler arasında yeni iki tane DAX fonksiyonu var: CONVERT ve REMOVEFILTERS.

DAX 'ın ilk versiyonu PowerPivot'un da ilk çıkış yılı olan 2011'de çıktı. DAX v2, yani ikinci versiyonu aşağı yukarı bundan üç yıl sonra çıktı. Bu tarihten sonra ara ara yeni fonksiyonlar eklendi, ekleniyor. Bunların bazıları hakikaten versiyon 1 ve 2 'deki eksiklikleri büyük ölçüde kolaylaştırmak üzere tasarlanmış. Daha önceki yazılarda bahsettiğim, parent-ratio hesaplamaları için kullanılan ISINSCOPE bunlardan biri. Bir de COMBINEVALUES gibi sırf belli bir amaca -ki bu da performans oluyor genelde- hizmet eden fonksiyonlar çıkıyor.

DAX olgunlaşmaya doğru giden bir dil, bundan sonra eklenecek fonksiyonların ve yeni yapıların gene bir Microsoft teknolojisi olan MDX'e yakınlaştırmak için olacağını tahmin ediyorum. Yakın bir zamanda çıkan -ama şu an sadece Azure Analysis Service ve SQL 2019 'da olan- calculation group da bunlardan biri. Çok radikal değişiklikler olmasını beklemiyorum dil yapısında bu saatten sonra, ama DAX'ı yeni öğrenmeye başlayanların anlamasını ve uygulamasını kolaylaştıracak -sugar syntax- veya ne yaptığı daha kolay anlaşılır olan fonksiyonlar eklenebilir.

REMOVEFILTERS -adından da anlaşılacağı üzere- filter context'i modifiye etmek, filtreleri tamamen kaldırmak için tasarlanmış bir fonksiyon. İşlevi ALL ile aynı, tek farkı, ALL bir tablo fonksiyonu iken, yani döndürüğü şey bir tablo iken, bu fonksiyonun böyle bir işlevinin olmayışı.

Sadece CALCULATE ile birlikte kullanılabilecek bir fonksiyon.

** ALL ve ekürileri için yazılara bakmak isterseniz buradan: 1, 2.


REMOVEFILTERS'a parametre olarak 4 farklı şekilde argüman verebiliriz:

  • Tek bir sütun ismi, ilgili sütundaki tüm filtreleri kaldırır
  • Tek bir tablo ismi, ilgili tablodaki tüm filtreleri kaldırır
  • Aynı tablodan gelen birden fazla sütun ismi, ilgili sütunların tamamındaki filtreleri kaldırır
  • Hiçbir şey vermeyebiliriz, REMOVEFILTERS( ) gibi,  bu durumda modeldeki tüm filtreleri kaldırır.

Tek sütundaki filtreleri örneklendirmek üzere, 'Ürünler'[Renk] sütunu üzerinden aşağıdaki metrikleri ekliyorum:

Renk_REMOVEFILTERS := 
CALCULATE( [Satışlar] ; 
    REMOVEFILTERS( 'Ürünler'[Renk] )
)
Renk_ALL := 
CALCULATE( [Satışlar] ;
   ALL( 'Ürünler'[Renk] )
)

Her iki metrik de -beklendiği üzere- aynı şeyi gösteriyor.


Ve her ikisi de -gene beklendiği üzere- renk filtrelerindeki değişimlere aldırış etmiyor.


Fakat diğer sütunlardan gelen filtrelere riayet ediyorlar.


Diğer argüman tiplerine de tek tek örnek vermeye gerek yok, mantık aynı, REMOVEFILTERS ( 'Satışlar' ) ile ALL ( 'Satışlar' ), REMOVEFILTERS () ile ALL () aynı! Tek farkları, ALL versiyonlu olanlar, argümana neyi verdiysek döndürdüğü "şey" bir tablo oluyor. REMOVEFILTERS'ın ise böyle bir işlevi yok.

Dolayısıyla aşağıdaki gibi bir metriği ALL ile yazabilirken REMOVEFILTERS ile yazamayız!

CountRows_ALL := COUNTROWS( ALL( 'Ürünler'[Renk] ))

CountRows_REMOVEFILTERS := COUNTROWS( REMOVEFILTERS( 'Ürünler'[Renk] ))



CONVERT -gene adından anlaşılacağı üzere- bir ifadenin sonucunun veri tipini değiştirmek üzere kullanılabilecek bir fonksiyon. Modelde tamsayı olarak tanımlı [Satışlar] metriğinin veri tipini para birimine (CURRENCY) çevirebiliriz mesela.

Convert_Satışlar := CONVERT( [Satışlar] ; CURRENCY )


Fonksiyonun ilk parametresi tipini değiştirmek istediğimiz ifadeyi, ikinci parametresi ise çevrilmesini istediğimiz veri tipini gösteriyor. Veri tipleri, BOOLEAN (True/False), CURRENCY (para birimi ), DATETIME, INTEGER, STRING gibi değerler alabilir.

Çevrim işlemleri için aslında benzer işlevlere sahip farklı fonksiyonlar daha önce de vardı, CURRENCY ve INT gibi mesela. Bu yeni fonksiyon hepsini bir arada toplayan biraz daha universal bir şey olmuş.

Müşteriler tablosunda her bir müşterinin yaşını bulmak için aşağıdakine benzer formüller yazabiliriz.

Yaş = INT( YEARFRAC( 'Müşteriler'[Doğum Tarihi] ; TODAY() ; 1 ))
Yaş_Convert = CONVERT( YEARFRAC( 'Müşteriler'[Doğum Tarihi] ; TODAY() ; 1 ) ; INTEGER )

** IntelliSense' e veri tiplerinin bazılarını eklemişler ama hepsini eklememişler henüz ! Bu kadar hızlı uygulama geliştirmeyle olur böyle şeyler diyeyim artık!

Eylül versiyonundaki önemli değişikliklerden biri de Custom Formatting için gelen yenilikler. Modelling görünümündeyken herhangi bir -nümerik- sütunun görünümünü aynen Excel'de olduğu gibi farklı şekillerde göstermemize müsade ediyor.


Dokümantasyonu henüz tam hazır değil, nümerik alanlarla ilgili örnekler için Chris Webb şimdiden bir yazı yazmış, arkasını da getirecek gibi görünüyor.

Bir başka değişiklik, gene görünümle ilgili: Temalar! Sıfırdan tasarlanmış gayet şık ve güzel temalar gelmiş. Eski temalar da duruyor ama yenileri oldukça beğendim! Kişisel (custom) temalar için JSON formatında dosya oluşturup kullanabiliyorduk, şimdi bu dosyalarda kullanabileceğimiz parametre sayısı da oldukça arttırılmış. En çok sevindiğim ise gridlerdeki font büyüklüğünün arttırılması oldu! Her seferinde font büyüklüklerini arttırmaktan -kendi adıma- kurtuldum. Renk seçimleri ve kombinasyonları da görselliği daha yüksek hale gelmiş.

Aşağıdaki görüntüyü hiç bir görünüm ayarıyla uğraşmadan elde edebildim.