POWER BI DAX ÖLÇÜ KÜLTÜRÜ
Power BI projelerinin %70'i ilk altı ay içinde "ölçü çorbası"na dönüşür. 200 ölçü, hepsinin adı benzer, hangisinin hangi raporda kullanıldığı belirsiz, biri değiştirilince başka rapor kırılıyor. Bu sonuç araç eksikliği değil — kültür eksikliği. Power BI bilgisi olan kullanıcılar DAX yazıyor ama ölçü mimarisi düşünmüyor.
DAX ölçü kültürü, raporun teknik temeli kadar onun kalıcılığıni de belirleyen şey. İyi kurulmuş bir ölçü hiyerarşisi yıllar boyu çalışıyor; kötü kurulmuş olanı altı ay sonra tüm rapor takımının vaktini emiyor.
Temel ile Türev Ölçü Ayrımı
İyi bir DAX kültürünün ilk kuralı: temel ölçüler ile türev ölçüleri ayır. Temel ölçü doğrudan tablo kolonundan hesaplanır:
Toplam Satış = SUM('Satış'[Tutar])
Toplam Maliyet = SUM('Satış'[Maliyet])
Sipariş Sayısı = COUNTROWS('Satış')Türev ölçü diğer ölçüleri kullanır:
Brüt Kâr = [Toplam Satış] - [Toplam Maliyet]
Kâr Marjı = DIVIDE([Brüt Kâr]; [Toplam Satış])
Ortalama Sepet = DIVIDE([Toplam Satış]; [Sipariş Sayısı])Bu disiplin neden kritik? Temel ölçü tek bir yerden hesaplanıyor; tüm türevler ondan besleniyor. "Satış tutarı" tanımı bir gün değişirse (örnek KDV dahil/hariç) tek yerde güncelleme yapıldığında 30 türev ölçü doğru rakamı veriyor. Tek tek formüllerde değişiklik yapmaya gerek yok.
İsimlendirme Disiplini
200 ölçülü modelde isimlendirme kaos veya düzen demek. Sahada işe yarayan pratik:
- Ölçü adı iş diline uygun: "Toplam Satış", "Brüt Kâr", "Aktif Müşteri" — Sum_Sales gibi teknik adlar değil
- Türkçe karakter dahil, normal başlık formatı (her kelimenin baş harfi büyük değil; ilk kelime büyük)
- Birim varsa parantezde: "Toplam Satış (₺)", "Marj (%)"
- Time intelligence ölçüleri sonuna sufiks: "Toplam Satış YTD", "Toplam Satış GY" (geçen yıl)
- Display Folder kullanılır: ölçüler kategorik klasörlerde toplanır
Display Folder pratiği özellikle önemli. Veri Modeli sekmesinde ölçü seçilip Properties'ten "Display folder" alanına klasör adı yazılır. 100+ ölçü 8-10 klasörde gruplandığında kullanıcı aradığı metriği hızla buluyor.
Filter Context
DAX'ın en önemli kavramı: bir ölçü çağrıldığı bağlama göre farklı sonuç verir. Aynı "Toplam Satış" ölçüsü, raporda yıl filtresi varken yıllık toplamı verir; ay seviyesindeyken aylık toplamı verir. Bu kavrama "filter context" deniyor.
CALCULATE fonksiyonu filter context'i değiştirir. Bir ölçü, üzerine uygulanan filtreleri yok sayıp veya değiştirip yeniden hesap yapar:
Yıllık Satış = CALCULATE([Toplam Satış]; ALL('Tarih'[Ay]))Bu ölçü "ay filtresini kaldır, yıllık toplamı ver" diyor. Rapor ekranı ay seviyesindeyken bile yıllık toplam görünüyor. Bu güçlü bir araç ama dikkatsiz kullanıldığında raporu kırılgan yapıyor.
Time Intelligence
Zamansal kıyaslama (geçen yıl, yıl başından bugüne, aylık değişim) DAX'ın güçlü olduğu alan. Konunun resmi ve ayrıntılı anlatımı Power BI resmi belgelerinde bulunur. Önkoşul: bir tarih tablosu (dim_tarih veya calendar table) modelde olması.
Pratikte sık kullanılan formüller:
Toplam Satış YTD = TOTALYTD([Toplam Satış]; 'Tarih'[Date])
Toplam Satış GY = CALCULATE([Toplam Satış];
SAMEPERIODLASTYEAR('Tarih'[Date]))
YoY Değişim = DIVIDE([Toplam Satış] - [Toplam Satış GY];
[Toplam Satış GY])
YoY Tutar Farkı = [Toplam Satış] - [Toplam Satış GY]Bu yapı kurulduğunda dashboard'da "Geçen yılın aynı ayına göre %X değişim" kartları tek formülle çalışıyor. Excel'de manuel hesaplanması gereken bu kıyaslama Power BI'da otomatik akıyor.

DIVIDE: Sıfıra Bölme Koruması
"X / Y" yazmak yerine DIVIDE(X, Y) kullanmak DAX'ın küçük ama kritik bir disiplini. DIVIDE sıfıra bölme durumunda hata vermek yerine BLANK döndürür; raporda boş hücre olur. Üçüncü parametreyle alternatif değer verilebilir:
Kâr Marjı = DIVIDE([Brüt Kâr]; [Toplam Satış]; 0)Bu küçük disiplin, raporun "#DIV/0" hatalarıyla dolu görünmesini engelliyor. Pivot tabloda boş hücre veya 0 görünüyor; yöneticide "rapor bozuk" hissi oluşmuyor.
Ölçü vs Hesaplanmış Sütun
Power BI'da "yeni hesap" eklemenin iki yolu var: Calculated Column (hesaplanmış sütun) ve Measure (ölçü). İkisi farklı işler yapar; karıştırılması en yaygın hata.
- Calculated Column: Tabloya yeni bir kolon ekler. Her satır için hesaplanır, RAM'de saklanır. Filtre/satır seviyesinde kullanılır.
- Measure (Ölçü): Belleğe sığmaz, sorgu anında hesaplanır. Toplama-özetleme için kullanılır.
Genel kural: aggregation gerektiren her şey (SUM, AVG, COUNT) Measure olarak. Satır seviyesinde kategori veya etiket üretmek gerekiyorsa Calculated Column. Yanlış seçim ya performans sorunu yaratır ya doğru sonucu vermez.
Ölçü Dokümantasyonu
"Bu ölçü ne hesaplıyor" sorusu altı ay sonra herkesin sorduğu soru. Power BI'da her ölçüye Description (açıklama) eklenebilir. Properties → Description alanına 1-2 cümlelik özet yazılır.
Bu küçük disiplin altı ay sonra çok değer kazanıyor. Ekip değiştiğinde, yeni katılan kişi modeli açıyor, ölçü üzerine geliyor, tooltip'te açıklamayı görüyor. Excel'de hücre yorumu gibi — küçük ama kurtarıcı.
Birden Fazla Veri Modeli Riski
Bir kurumda Power BI yayıldıkça farklı ekipler kendi modellerini kuruyor. "Satış raporu" üç farklı modelde üç farklı sonuç veriyor. Bu kabusu engellemek için "shared dataset" pratiği:
Tek bir Power BI veri modeli ortak çalışma alanında yayınlanır. Diğer ekipler bu modele "Live Connection" ile bağlanır; kendi raporlarını çıkarır ama temel ölçüler aynı kalır. Toplam Satış her yerde aynı sayıyı veriyor. Bu mimari öğrenme eğrisi gerektirir ama kurumsal kalitenin temelidir. DAX disiplini ve veri modeli pratiğini birlikte oturtmak için kapsamlı Power BI eğitimi filter context, time intelligence ve model standartlarını uygulamalı örneklerle bir araya getiriyor.
Sıkça Sorulan Sorular
DAX öğrenmek için ne kadar zaman ayırmak gerekir?
Temel ölçüler (SUM, COUNT, IF) ve görselleştirme için 1-2 hafta yeterli. CALCULATE ve filter context kavramının oturması 4-6 hafta. <strong>Time intelligence</strong> ve karmaşık iş senaryoları 8-12 haftaya yayılıyor. Pratiğe gerçek raporlarla başlamak teorik çalışmadan daha verimli.
Calculated Column ile Measure arasında nasıl seçim yapılır?
Aggregation gerektiren her şey (SUM, AVG, COUNT, DISTINCTCOUNT) Measure olur. Satır seviyesinde kategori, etiket veya sınıflandırma gerekirse Calculated Column. Yanlış seçim Measure gibi davranan Column performansı düşürür; Column gibi davranan Measure doğru sonucu vermez. Genel kural: önce Measure dene, gerçekten sütun gerekiyorsa Column.
DAX'ta DIVIDE neden tercih edilmeli?
Sıfıra bölme korunuyor. DIVIDE([Pay]; [Payda]; 0) yazıldığında payda sıfırsa hata değil 0 döner. Klasik / operatörü hata verir; rapor #DIV/0 hatalarıyla dolar. Üç parametre opsiyoneldir — BLANK döndürmek istenirse atlanır, alternatif değer atanmak istenirse yazılır.
Filter context neden kafa karıştırıcı?
Excel'de bir formül sabit yerde çalışır, sabit sonuç verir. DAX'ta aynı ölçü çağrıldığı bağlama göre değişiyor — pivot tablodaki satır, sütun, dilimleyici filtreler tümü ölçüye etki ediyor. Bu paradigma değişikliği oturuncaya kadar 2-3 hafta zaman alıyor. CALCULATE pratiği yapmak filter context'i en hızlı oturtuyor.
Tarih tablosu (dim_tarih) zorunlu mu?
Time intelligence fonksiyonları için zorunlu. Olay tablosundaki tarih kolonu yerine ayrı bir tarih tablosu kurulur; gün, hafta, ay, yıl, çeyrek, mali yıl kolonları içerir. Bu tablo Mark as Date Table olarak işaretlenir. TOTALYTD, SAMEPERIODLASTYEAR gibi fonksiyonlar bu tabloyla çalışıyor; olmadan zaman bazlı kıyaslamalar zorlaşıyor.
Bir ölçünün doğru olduğunu nasıl test ederim?
Birkaç pratik var. Pivot tabloda farklı seviyelerde toplam tutarlılığı kontrol edilir. Excel ile manuel hesap yapılır, sonuçlar karşılaştırılır. Edge case'ler — boş tarih, sıfır miktar, eksik veri — test edilir. Karmaşık ölçülerde DAX Studio veya Performance Analyzer ile çalışma şekli ve performans incelenir.
Shared dataset pratiği ne zaman gerekli?
Birden fazla ekibin Power BI rapor ürettiği kurumsal yapılarda neredeyse zorunlu. Aksi halde aynı KPI farklı modellerde farklı sonuç veriyor; yöneticiler hangi sayıya inanacağını bilmiyor. Shared dataset ile tek model merkezi olarak yayınlanır, raporlar 'Live Connection' ile bağlanır. Ölçü tutarlılığı sağlanıyor, performans iyileşiyor.



