Ana içeriğe geç
Kesit Power BI
Temel · Veri Modelleme

Tarih tablosu (date table)

Her modele neden ayrı bir tarih tablosu gerekir; CALENDAR ile oluşturma ve tarih tablosu olarak işaretleme.

Uygulamada aç, 7 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Neden ayrı bir tarih tablosu?

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

  1. 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.
  2. İlişki kur: Tarih[Tarih] → Satislar[Tarih] (1:*).
  3. Ay sıralaması: Ay sütununu seç → Sütuna göre sırala → AyNo. Yoksa aylar alfabetik dizilir (Ağu, Ara, Eki…).
Otomatik tarih/saatPower BI, varsayılan olarak her tarih sütunu için gizli bir tarih tablosu üretir. Kendi tarih tablon varsa Dosya → Seçenekler → Veri Yükleme → Otomatik tarih/saat seçeneğini kapat. Model küçülür ve karışıklık azalır.

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.

Uzmanlaş

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ıkSenin verdiğin iki tarihModeldeki tüm tarih sütunlarının en küçüğünden en büyüğüne, tam yıllara genişletilmiş
KontrolTam sendeModele eklenen her tarih sütunu aralığı değiştirebilir
Ne zaman?Çoğu üretim modelindeHı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ütunuSırala ölçütüYapılmazsa
Ay (Oca, Şub…)AyNoAğu, Ara, Eki… alfabetik
HaftaninGunu (Pazartesi…)GunNo (Pazartesi = 1)Cuma, Cumartesi, Pazar… alfabetik
YilAy (2024-01)GerekmezYı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.

Alıştırmalara geç (7)