Power BI’da zaman bazlı analiz yapıyorsanız (geçen yılla karşılaştırma, yılbaşından bugüne toplam, hareketli ortalama) modelinizde ayrı bir tarih tablosu olmalı. Bu yazıda neden gerekli olduğunu ve DAX ile birkaç dakikada nasıl kurulacağını anlatıyorum.
Neden ayrı bir tarih tablosu?
- Zaman zekâsı fonksiyonları (
TOTALYTD,SAMEPERIODLASTYEAR,DATEADDvb.) kesintisiz, her günü içeren bir tarih sütunu bekler. Satış tablosunda satış olmayan günler yoktur; bu yüzden olgu tablosundaki tarih sütunu bu iş için uygun değildir. - Birden fazla olgu tablosu (satış, stok, bütçe) tek bir ortak tarih boyutu üzerinden filtrelenir.
- Yıl, ay, hafta, çeyrek gibi sütunlar bir kez tanımlanır ve tüm raporlarda tutarlı kullanılır.
- Power BI’ın her tarih sütunu için arka planda oluşturduğu gizli otomatik tarih tablolarına ihtiyaç kalmaz; model küçülür.
DAX ile tarih tablosu oluşturmak
Modelleme → Yeni tablo seçip aşağıdaki ifadeyi yapıştırın. CALENDARAUTO() modeldeki tüm tarih sütunlarına bakıp tam yılları kapsayan bir aralık üretir.
Tarih =
ADDCOLUMNS (
CALENDARAUTO (),
"Yil", YEAR ( [Date] ),
"Ceyrek", "Ç" & QUARTER ( [Date] ),
"AyNo", MONTH ( [Date] ),
"Ay", FORMAT ( [Date], "mmmm" ),
"YilAy", FORMAT ( [Date], "yyyy-MM" ),
"HaftaNo", WEEKNUM ( [Date], 2 ),
"HaftaGunuNo", WEEKDAY ( [Date], 2 ),
"HaftaSonuMu", WEEKDAY ( [Date], 2 ) >= 6
)
Aralığı kendiniz belirlemek isterseniz CALENDARAUTO() yerine CALENDAR ( DATE ( 2020, 1, 1 ), DATE ( 2026, 12, 31 ) ) kullanabilirsiniz. WEEKNUM ve WEEKDAY fonksiyonlarındaki 2 parametresi haftayı pazartesi başlatır.
Tarih tablosu olarak işaretleyin
Tabloyu seçip Tablo araçları → Tarih tablosu olarak işaretle deyin ve Date sütununu seçin. Bu adım zaman zekâsı fonksiyonlarının doğru çalışmasını garanti eder. Ardından Ay sütununu AyNo‘ya göre sıralayın (Sütun araçları → Sütuna göre sırala); yoksa aylar alfabetik dizilir.
İlişkiyi kurun ve ölçüleri yazın
Model görünümünde Tarih[Date] ile olgu tablonuzdaki tarih sütunu arasında bire-çok ilişki kurun. Artık zaman zekâsı ölçüleri tek satırla yazılabilir:
Toplam Satış = SUM ( Satis[Tutar] )
Satış YTD = TOTALYTD ( [Toplam Satış], Tarih[Date] )
Satış Geçen Yıl = CALCULATE ( [Toplam Satış], SAMEPERIODLASTYEAR ( Tarih[Date] ) )
Yıllık Değişim % =
DIVIDE ( [Toplam Satış] - [Satış Geçen Yıl], [Satış Geçen Yıl] )
Son bir ipucu
Tarih tablosu kurduktan sonra Dosya → Seçenekler → Geçerli dosya → Veri yükleme altındaki Otomatik tarih/saat seçeneğini kapatabilirsiniz. Böylece Power BI her tarih sütunu için gizli tablo üretmez ve dosya boyutu küçülür. Raporlarda tarih filtrelerini ve eksenleri her zaman yeni Tarih tablosundan kullanmayı unutmayın.
Sık yapılan hatalar
- Saat bilgisi içeren tarih sütunu: Olgu tablosundaki sütun tarih + saat ise (
2026-03-01 14:35), tarih tablosuyla eşleşmez ve rakamlar eksik görünür. Sütunu Power Query’de Tarih tipine çevirin. - Boşluklu ya da tekrar eden tarihler: “Tarih tablosu olarak işaretle” adımı için tarih sütunu benzersiz olmalı ve aralıkta hiçbir gün eksik olmamalı.
- Filtreleri olgu tablosundan almak: Dilimleyici ve eksenlerde satış tablosundaki tarihi kullanırsanız zaman zekâsı ölçüleri yanlış sonuç verir. Her zaman tarih tablosunu kullanın.
- Mali yılı unutmak: Şirketiniz mali yıl kullanıyorsa
TOTALYTDfonksiyonunun son parametresiyle yıl sonunu belirtin, örneğinTOTALYTD([Toplam Satış], Tarih[Date], "06-30").
Sık sorulan sorular
Tarih tablosunu DAX ile mi, Power Query ile mi oluşturmalıyım?
İkisi de çalışır. Tek bir rapor için DAX hızlıdır. Aynı tabloyu birden çok raporda ya da dataflow’larda kullanacaksanız Power Query (ya da veri ambarındaki bir tarih tablosu) daha yönetilebilir.
Ay adları neden İngilizce çıkıyor?
FORMAT modelin dil ayarını kullanır. Türkçe ay adlarını garanti etmek için yerel ayar parametresini verin: FORMAT([Date], "mmmm", "tr-TR").
İlgili yazılar
- DAX’ta Yeni Dönem: Kullanıcı Tanımlı Fonksiyonlar (UDF)
- Fabric’te Direct Lake: Import ile DirectQuery Arasındaki Üçüncü Yol
- SQL Server’da Pencere Fonksiyonları
HABERDAR OL
Yeni rehberler, kategorilere ayrılmış tek bir e-postada.
Her pazartesi, o hafta yayımlanan yazılar konu başlıklarına göre derlenmiş olarak gelen kutunda. Yeni yazı yoksa e-posta da yok.
