POWER BI DAX NEDİR?

Power BI sarı logosu ve DAX measure formül kartı görseli

Excel'de yıllarca SUM, VLOOKUP yazdınız; Power BI'a geçtiğinizde aynı mantığı bekliyorsunuz ama sonuçlar beklediğiniz gibi gelmiyor. Neden basit bir toplam, filtre değiştiğinde bambaşka bir değer döndürüyor? Cevap DAX'ın çalışma şeklinde — hücre değil, tablo ve bağlam üzerinden düşünen bir dil ile karşı karşıyasınız.

DAX Nedir, Hangi İhtiyaçtan Doğdu?

DAX (Data Analysis Expressions), Microsoft'un Power BI, Power Pivot ve SSAS Tabular ürünleri için geliştirdiği formül ve sorgu dilidir. 2009'da Power Pivot ile birlikte Excel dünyasına girdi. Amaç netti: ilişkisel veri modelleri üzerinde Excel kullanıcısının tanıdığı fonksiyon sözdizimiyle hesap yapmasını sağlamak, ama SQL'in tablo bakışını da arkaya almak.

DAX bir programlama dili değildir; deklaratif bir ifade dilidir. Yani "şu sonucu istiyorum" yazarsınız, motor "nasıl üreteceğini" kendi planlar. Bu yüzden DAX yazarken algoritma değil, filtre bağlamı ve satır bağlamı düşünmek zorundasınız. Dilin tüm fonksiyon imzalarını ve davranışlarını resmi başvuru kaynağında inceleyebilir, tartışmalı noktalarda buraya geri dönebilirsiniz.

DAX, Excel Formülünden Nasıl Farklıdır?

Excel'de formül bir hücreye yazılır ve o hücredeki diğer hücreleri referans alır: =A2*B2. DAX'ta hücre kavramı yoktur. Onun yerine sütun ve tablo vardır. Bir DAX ifadesi her zaman bir bağlam içinde değerlendirilir.

Üç temel farkı netleştirmek gerekir:

  • Referans birimi: Excel hücre, DAX sütun ya da tablo üzerinden çalışır.
  • Bağlam: Excel'de A2 her zaman A2'dir. DAX'ta aynı measure, raporun farklı görselinde farklı sonuç verir; çünkü filtre değişmiştir.
  • İlişkiler: Excel'de tablolar arası bağ kurmak için VLOOKUP gerekirken DAX, model ilişkilerini doğrudan kullanır. RELATED() tek satır cevabı verir.

Bir örnek üzerinden bakalım. Excel'de toplam ciro için =SUM(F2:F1000) yazarsınız. DAX'ta karşılığı şudur:

Toplam Ciro = SUM(Satislar[Tutar])

İlk bakışta benzer görünür. Ama Power BI raporunda bu measure'ı yıla göre kırdığınızda, motor sizin için filtreyi otomatik uygular. Excel'de bunu yapmak için PivotTable veya SUMIFS gerekirdi. DAX'ta tek satır yeter.

DAX filtre bağlamı ile Excel hücre referansı arasındaki farkın karşılaştırması

Calculated Column ve Measure: Hangisi Ne Zaman?

Yeni başlayanların en sık karıştırdığı ayrım budur. İkisi de DAX ile yazılır ama davranışları taban tabana zıttır.

Calculated Column (Hesaplanmış Sütun)

Veri yüklendiğinde bir kez hesaplanır, modelin içine fiziksel olarak yazılır ve modelin boyutunu artırır. Satır bağlamında çalışır — her satır için ayrı bir sonuç üretir.

Tipik kullanım: Kar = Satislar[Tutar] - Satislar[Maliyet]. Bu sütun, her satış kaydı için kâr değerini saklar.

Measure (Ölçü)

Önceden hesaplanmaz. Raporda kullanıldığı her seferde, o anki filtre bağlamına göre yeniden hesaplanır. Modelin boyutunu büyütmez, sadece tanım olarak saklanır.

Tipik kullanım: Toplam Kar = SUMX(Satislar, Satislar[Tutar] - Satislar[Maliyet]). Hangi yılı, müşteriyi, ürünü seçerseniz seçin, ona göre toplanır.

Pratik bir karar kuralı şöyle özetlenebilir:

  1. Sonucu satır bazında görmek istiyorsanız ve bu değer dilimleyiciye bağımlı değilse → calculated column.
  2. Sonuç toplam, ortalama, oran gibi bir aggregate ise ve filtreye göre değişmesi gerekiyorsa → measure.
  3. Hem column hem measure ile yazılabiliyorsa, neredeyse her zaman measure tercih edilir; performans ve esneklik kazandırır.

Temel DAX Fonksiyon Aileleri

DAX'ta yüzlerce fonksiyon var ama büyük çoğunluğunu birkaç aile altında düşünmek öğrenmeyi kolaylaştırır:

  • Aggregate: SUM, AVERAGE, MIN, MAX, COUNTROWS — temel toplamalar.
  • Iterator (X'li olanlar): SUMX, AVERAGEX, MAXX — satır satır gezip sonra toplar. Calculated column mantığını measure içinde verir.
  • Filtre: CALCULATE, FILTER, ALL, REMOVEFILTERS — filtre bağlamını değiştirir. DAX'ın kalbidir.
  • Time Intelligence: TOTALYTD, SAMEPERIODLASTYEAR, DATEADD — tarih tabloları üzerinde dönem karşılaştırması yapar.
  • İlişki: RELATED, RELATEDTABLE, USERELATIONSHIP — model ilişkilerini DAX seviyesinde kontrol eder.

Bu fonksiyonlar arasında CALCULATE tek başına ayrı bir başlığı hak eder; çünkü filtre bağlamını değiştirebilen tek fonksiyondur ve neredeyse her ileri DAX ifadesi bir noktada onu çağırır.

DAX calculated column ile measure davranış farkını gösteren karşılaştırma

DAX Öğrenirken Tipik Hatalar

DAX'a yeni başlayanların düştüğü tuzaklar genellikle aynıdır:

  • Her şeyi calculated column ile çözmeye çalışmak — model şişer, performans düşer.
  • Measure içinde SUM beklerken implicit conversion yüzünden hata almak; iterator gereken yerde aggregate kullanmak.
  • CALCULATE içinde filtre yazmadan ALL kullanmak ve toplamı bütün modele yaymak.
  • Tarih tablosu olmadan time intelligence fonksiyonlarını çağırıp boş sonuç almak.
  • İki yönlü ilişki açıp filtre yönünü kaybetmek.

Bu hatalardan kaçınmanın en sağlam yolu, modelin yıldız şema (star schema) prensibiyle kurulmuş olması ve measure'ların açık bir tarih tablosu üzerinden çalışmasıdır.

Nereden Başlamalı?

DAX öğrenirken sırasıyla şu konuların üstünden geçmek tutarlı bir öğrenme eğrisi sağlar: önce veri modelleme ve ilişkiler, ardından temel aggregate fonksiyonları, sonra CALCULATE ve filtre bağlamı, en son time intelligence ve gelişmiş iteratörler. Yapılandırılmış bir öğrenme süreci için Power BI eğitimi içeriklerinden yararlanabilirsiniz; özellikle DAX bölümlerini sırayla takip etmek bağlam kavramının oturmasına yardımcı olur.

DAX, ilk hafta yorucu görünür; ama filtre bağlamı zihninizde oturduktan sonra, daha önce SUMIFS labirentlerinde kaybolduğunuz raporları tek satırlık measure'larla kurduğunuzu fark edersiniz. Excel formülünden DAX'a geçiş bir sözdizimi değişimi değil, bir düşünce biçimi değişimidir; ve bu değişim Power BI ile gerçek anlamda verimli çalışmanın eşiğidir.