Power BI’da DAX, Metrik ve Hesaplanmış Sütun Kavramları
Herkese merhaba. Power BI ile ilgili üçüncü yazımızda DAX dili nedir, bu dil ile neler yapabiliriz, metrik nedir, hesaplanmış sütun nedir gibi kavramlara değineceğiz. Bu yazıyı okumadan önce Power BI’a giriş yaptığımız ve veri dönüştürme işlemlerini anlattığımız yazıları okumanızı tavsiye ederim.
DAX, açılımı Data Analysis Expressions olan ve Excel Power Pivot, Power BI Desktop ve tabular modellerin sorgu dilidir. DAX, Excel formüllerinde kullanılan bazı işlevleri ve ilişkisel verilerle çalışmak ve dinamik toplama gerçekleştirmek için tasarlanmış ek işlevleri içerir. Burada şunu belirtmekte fayda var. DAX bir programlama dili değildir, bir formül ve sorgulama dilidir.
Peki DAX kullanarak neler yapabiliriz? Hesaplanmış sütun, metrik, hesaplanmış tablolar, hesaplama grupları, tabular modellerde rol tabanlı güvenlik için filtre ifadeleri ve satır düzeyi güvenlik için filtre ifadeleri yazabiliriz. Bu yönüyle veri modellemede işimizin olmazsa olmaz parçalarından biridir.
DAX’ta tablolarla ve sütunlarla çalışırız. Sütunların veri tiplerini anlamamız, uygun DAX formülleri yazmamıza olanak sağlar. Bu veri tiplerini kısaca aşağıdaki gibi özetleyebiliriz.
- Integer (8 bayt): Ondalık basamak içermeyen sayılardan oluşur. Tamsayılar pozitif veya negatif olabilir, (-2^63) ve (+2^63-1) arasında değer alabilir.
- Decimal (8 bayt): Ondalık basamak içeren sayılardan oluşur. Anlamlı basamakların sayısı 15 ile sınırlıdır.
- Currency (money): Para birimi veri türü. Dört ondalık basamak hassasiyete sahip -2^63 ve +2^63 arasındaki değerlere izin verir.
- Date (DateTime): Tarih ve saatten oluşan veri tipidir. Geçerli tarih aralığı 1 Ocak 1900’den başlar.
- True/False (Boolean): Sadece Doğru veya Yanlış değerlerini döndüren veri tipidir. Mantıksal operatörlerle yapılan işlemlerin sonucu bu veri tipindedir.
- String (Text): Unicode karakter dizisindeki karakterlerden oluşur. Metin biçimindeki veriler bu tiptedir.
- Blank (Boşluk): DAX dilindeki Blank’in SQL’deki karşılığı Null’dır. Blank değerini kullanarak boş bir değer atayabilir ve bu değer ile ilgili ISBLANK fonksiyonunu kullanarak çeşitli işlemler yapabiliriz.
DAX dili Excel formüllerine çok benzer. Bir tane oluşturmak için, bir eşittir işareti, ardından bir ifade adı ve bu ifadenin çalıştırılması için gereken değişken, sütun veya tablo ismi yazarız. Excel’den ayrıldığı en önemli noktalardan biri, Excel’de hücreye referans verebilirken DAX’ta sütuna veya tabloya başvururuz. Diğer bir deyişle, DAX’ta ya tablo ismi ya da tablo+sütun ismi çağırırız. Burada hesaplanmış sütun ve metrik kavramlarını da tanıtmakta fayda var, çünkü bunları oluştururken DAX ifadeleri kullanıyoruz.
Hesaplanmış sütun, Power BI’daki tablolarımızda yer alan sütunlar gibidir, tek farkı Power BI içindeyken hesaplanmış olmalarıdır ve bir tabloya aittir, yeri değiştirilemez. Sütun değerlerini tanımlamak için bir DAX ifadesi yazılır. Hesaplanan sütunlardaki formüller, Excel’deki formüllere çok benzer. Ancak Excel’den farklı olarak, bir tablodaki farklı satırlar için farklı formüller oluşturamayız, DAX formülü otomatik olarak tüm sütuna uygulanır. Bir sütun formül içerdiğinde, değer her satır için hesaplanır. Hesaplanmış sütunlar çok büyük modellerde kullanışlı değildir. Aynen diğer normal sütunlar gibi olduğundan hafızada yer kaplar. Hesaplanmış sütunların hesaplandığı an, dosyanın yenilendiği andır ve tablodaki her bir satır için hesaplanır. Bu yüzden yenilenme süresi daha uzundur. Tablodaki diğer sütunlar gibi olduğundan dosya büyüklüğünü de arttırır.
Şimdi bir örnek sütun oluşturalım. Bir önceki yazımızda kullandığımız AdventureWorks2016 veritabanından “SalesOrderHeader” adlı tabloda yer alan OrderDate ile ShipDate arasındaki gün farkını hesaplayalım. Power BI’da sütun oluşturmanın yolu, tablo görünümündeyken tablonun sağındaki “…” simgesine tıklayıp “Yeni Sütun” tıklamaktır. Diğer bir yol olarak önceki yazımızda bahsettiğimiz şekilde “Veri Dönüştürme” ekranından da yeni sütun tanımlanabilir.
Gün farkını hesaplamak için DAX ifadelerinden Datediff’i kullanacağız. Bu ifade aynı zamanda SQL’de de aynı şekilde kullanılıyor. İzlediğimiz adımlar şu şekilde olmuştur. İlk önce sütun adını verdik, ardından eşittir simgesi koyup “datediff” ifadesini yazarak bu komutun aldığı parametreleri verdik. Bu fonksiyon iki adet tarih ister ve biz de “OrderDate” ve “ShipDate” sütunlarını verdik, ardından farkın gün, ay, yıl vs. hangi türden olmasını istiyorsak onu belirtiyoruz son olarak.
Hesaplanmış sütunlar bu şekilde hesaplanmaktadır. Metrik kavramına da göz atacak olursak, bir ifade formülünün sonucunu hesaplar. Metrikler tanımlanırken DAX ifadeleri kullanılır. Hesaplanırken işlemciyi kullanır. İşlemci hafızadan daha hızlıdır. Hesaplanmış sütunlar gibi “refresh” esnasında her bir satır için değil, anlık olarak ve rapordaki filtrelerden kalan veriler üzerinden hesaplanır. Metrikleri, herhangi bir tabloya ait olmayan hesaplamalar olarak düşünebiliriz.
Hesaplanmış sütun oluşturduktan sonra bir örnek metrik oluşturalım. “SalesOrderDetail” tablosunda yer alan “OrderQty” alanına ait bir metrik oluşturarak toplam sipariş miktarını hesaplayacağız. Metriği hesaplamak için yine tablo görünümünde iken tablonun sağındaki “…” tıklayıp “Yeni Ölçü” diyoruz.
Açılan formül ekranında metriğe isim verip eşittir simgesinin ardından formülümüzü yazıyoruz. Metrik hesapladığımızda Power BI’da tablonun içinde hesap makinesi simgesi ile görünür, hesaplanmış sütun ise daha farklı bir simge ile görünür, ayrımlarını buradan da yapabiliriz.
DAX ifadelerinin kullanıldığı bir diğer alan ise hesaplanmış tablolar oluşturulmasıdır. Kullandığımız DAX ifadesine göre yeni bir tablo oluşturup bu tabloyu hem veri modeline dahil edebiliriz, hem de görsellerde kullanabiliriz. Örnek olarak hesaplanmış bir tablo oluşturalım. Bunun için Modelleme kısmına gelip “Yeni Tablo” diyoruz.
Açılan formül penceresinde hesaplanmış tabloyu oluşturmak için DAX ifadesini yazıyoruz. Burada “Summarize” deyiminden faydalanacağız. Summarize, belirttiğimiz tabloyu kaynak alarak verdiğimiz sütunlara göre gruplandırma işlemi yapar ve yeni sütunlar hesaplamamıza imkan tanır. İlk önce hangi tabloyu referans göstereceksek onu belirtiyoruz, burada “SalesOrderDetail” tablosunu yazdık. Ardından hangi sütuna göre gruplama yapacaksak onu belirtiyoruz, burada “ProductID” kolonuna göre gruplama yapacağız. Oluşturacağımız yeni sütunun adını veriyoruz (Toplam Sipariş Miktarı) ve ardından fonksiyonu yazıyoruz, “OrderQty” sütununu topladık. Ardından bir sütun daha oluşturup sütun ismini “Ortalama Ürün Fiyatı” verdik ve bu sütunun nasıl hesaplanması gerektiğini yazdık. Kabaca, ilk önce kaynak tabloyu veriyoruz, ardından gruplanacak sütunları belirtiyoruz. Yeni sütunlar oluşturacaksak ilk önce isim verip ardından hangi fonksiyon ile hesaplanacaksa onu belirtiyoruz.
Özetleyecek olursak, Power BI’da DAX’ın kullanıldığı dört alan var.
- Metrikler (Measure)
- Hesaplanmış Sütunlar (Calculated Columns)
- Hesaplanmış Tablolar (Calculated Tables)
- Satır Bazlı Güvenlik (Row Level Security)
Bu alanlardan ilk üçünü tanıttık. Sonuncusunu ayrı bir yazıda anlatacağız.
Bir sonraki yazımızda Power BI’da örnek metrikler, hesaplanmış sütunlar ve hesaplanmış tablolar hesaplayıp bunları görselleştireceğiz.
Bir sonraki yazıda görüşmek üzere.
KAYNAKLAR
https://en.wikipedia.org/wiki/Data_analysis_expressions
https://powerzeka.com/power-bi-dax/power-bi-dax-fonksiyonlari
https://powerbi.istanbul/hesaplanmis-sutun-vs-metrik/