Neden ayrı bir tarih tablosu?
- Zaman zekâsı fonksiyonları (
TOTALYTD,SAMEPERIODLASTYEAR…) kesintisiz bir tarih sütunu ister: aralığın her günü bir kez bulunmalı. - Satış olmayan günler de raporda görünebilir (ör. “bu ay satış yok” sıfırı).
- Yıl, Çeyrek, Ay, Hafta günü gibi sütunlar tek yerde tanımlanır;
SatislarveHedefleraynı takvimi paylaşır.
DAX ile oluşturma
Modelleme → Yeni tablo:
Tarih =
ADDCOLUMNS(
CALENDAR(DATE(2022, 1, 1), DATE(2024, 12, 31)),
"Yil", YEAR([Date]),
"AyNo", MONTH([Date]),
"Ay", FORMAT([Date], "MMM"),
"Ceyrek", "Ç" & QUARTER([Date])
)
CALENDAR iki tarih arasındaki her günü tek sütunlu bir tablo olarak döndürür. ADDCOLUMNS bu tabloya yeni sütunlar ekler. Bu uygulamadaki Tarih tablosu aynı mantıkla kuruldu.
Kurulumdan sonra üç ayar
- Tarih tablosu olarak işaretle: Tabloya sağ tık → Tarih tablosu olarak işaretle → tarih sütununu seç. Böylece zaman zekâsı doğru çalışır.
- İlişki kur:
Tarih[Tarih]→Satislar[Tarih](1:*). - Ay sıralaması:
Aysütununu seç → Sütuna göre sırala →AyNo. Yoksa aylar alfabetik dizilir (Ağu, Ara, Eki…).
Aşağıdaki alıştırmada bir DAX sorgusu yazacaksın. Sorgu EVALUATE ile başlar ve bir tablo döndürür; sonucu tablo olarak görürsün.
CALENDAR mı, CALENDARAUTO mu?
İki fonksiyon da tek sütunlu (Date) bir gün listesi üretir. Farkları, aralığın nereden geldiğidir.
| CALENDAR(başlangıç, bitiş) | CALENDARAUTO([mali yıl sonu ayı]) | |
|---|---|---|
| Aralık | Senin verdiğin iki tarih | Modeldeki tüm tarih sütunlarının en küçüğünden en büyüğüne, tam yıllara genişletilmiş |
| Kontrol | Tam sende | Modele eklenen her tarih sütunu aralığı değiştirebilir |
| Ne zaman? | Çoğu üretim modelinde | Hızlı deneme; ya da tüm tarih sütunlarının temiz olduğundan eminsen |
Bu modelde bir deneme yapalım. Satışlar 22 Haziran 2022 ile 31 Aralık 2024 arasında. Ama CALENDARAUTO() çalıştırınca tablo 1 Ocak 2015'te başlar, 31 Aralık 2025'te biter: 4.018 gün. Neden? Calisanlar[IseGiris] sütununda 2015'te işe girmiş bir çalışan, Projeler[BitisPlan] sütununda 2025'te bitmesi planlanan bir proje var. CALENDARAUTO bunları da hesaba katar. Rapordaki yıl dilimleyicisinde satış olmayan sekiz yıl görünür.
Daha güvenli yol, aralığı satış verisinden almak ve tam yıla yuvarlamaktır:
EVALUATE
CALENDAR(
DATE(YEAR(MIN(Satislar[Tarih])), 1, 1),
DATE(YEAR(MAX(Satislar[Tarih])), 12, 31)
)
Sonuç 1.096 gündür: 2022'nin başından 2024'ün sonuna. Bu uygulamadaki Tarih tablosu da tam olarak bu aralıktadır. Mali yılın Haziran'da bittiği bir şirkette CALENDARAUTO(6) yazılırsa aralık Temmuz–Haziran yıllarına genişletilir.
Sıralama sütunlarıyla tam bir tablo
Metin olan her takvim sütununun yanında onu doğru sıraya koyacak bir sayı sütunu olmalı:
EVALUATE
ADDCOLUMNS(
CALENDAR(DATE(2024, 1, 1), DATE(2024, 12, 31)),
"Yil", YEAR([Date]),
"AyNo", MONTH([Date]),
"Ay", FORMAT([Date], "MMM"),
"YilAy", FORMAT([Date], "yyyy-MM"),
"GunNo", WEEKDAY([Date], 2),
"HaftaninGunu", FORMAT([Date], "dddd")
)
| Metin sütunu | Sırala ölçütü | Yapılmazsa |
|---|---|---|
| Ay (Oca, Şub…) | AyNo | Ağu, Ara, Eki… alfabetik |
| HaftaninGunu (Pazartesi…) | GunNo (Pazartesi = 1) | Cuma, Cumartesi, Pazar… alfabetik |
| YilAy (2024-01) | Gerekmez | Yıl-ay biçimi kendiliğinden doğru sıralanır |
Ayarlamak için sütunu seç → Sütun araçları → Sütuna göre sırala → sayı sütunu. WEEKDAY'in ikinci bağımsız değişkeni 2 olunca hafta Pazartesi başlar; Türkiye'deki alışkanlığa uygundur.
İşaretlemeden önce kontrol listesi
Tabloya sağ tık → Tarih tablosu olarak işaretle (ya da tabloyu seçip Tablo araçları şeridindeki aynı komut). Power BI tarih sütununu şu kurallara göre denetler:
- Değerler benzersiz: her gün bir kez.
- Boş değer yok.
- Kesintisiz: başlangıçtan bitişe tek gün eksik değil.
- Sütun türü Tarih ya da Tarih/Saat; Tarih/Saat ise tüm değerlerde saat aynı.
Bu yüzden tarih tablosunu satış tablosundan (ör. VALUES(Satislar[Tarih])) üretmek yanlıştır: bu modelde satış olan gün sayısı 2022'de yalnızca 54, 2023'te 202, 2024'te 277'dir. Takvimde ise 365, 365 ve 366 gün olmalı. Eksik günler zaman zekâsı hesaplarını bozar. Zaman zekâsı fonksiyonları Zaman zekâsı dersinde.