- Tarih tablosu neden gerekir?
- Tarih tablosunun taşıması gereken koşullar
- Dört yol: hangisini seçmeli?
- DAX ile takvim yazmak: CALENDAR ve CALENDARAUTO
- Sütunları eklemek ve ilişkiyi kurmak
- Tarih tablosu olarak işaretlemek ve sık hatalar
- Bu beceriyi Mindset programlarında nerede çalışırsınız?
- Sık sorulan sorular
Tarih Tablosu Kurulumu: Zaman Zekasının Altyapısı
Power BI'da DAX ile tarih tablosu kurma: CALENDAR ve CALENDARAUTO, tam yıl koşulu, ilişki, sıralama ve tarih tablosu olarak işaretleme adımları.
Tarih tablosu neden gerekir?
Tarih tablosu, modelde her gün için tek satır tutan ve yıl, çeyrek, ay gibi dönemlere göre filtreleme ya da gruplama imkânı veren tablodur. Microsoft'un tasarım rehberi onu analizlerde en sık kullanılan tablo olarak tanımlar. Satış, fatura, stok, destek talebi gibi olay tablolarının hepsinin kendi tarih sütunu vardır; bu sütunları ayrı ayrı gruplamak yerine hepsini tek bir takvime bağlamak hem tutarlılık hem de zaman zekası fonksiyonları için şarttır.
Rehberdeki ifadeyle, DAX zaman zekası fonksiyonlarıyla çalışabilmek için modelde en az bir tarih tablosu bulunmalıdır. Yılbaşından bugüne, önceki yıl ve aynı dönem karşılaştırması gibi ölçüler bu tabloya dayanır. Tarih tablosu olmadan bu ölçüler ya hiç çalışmaz ya da yalnızca olay tablosunda gerçekten satış olan günlerle sınırlı, delikli bir takvim üzerinde yanlış sonuç verir.
Dolayısıyla tarih tablosu "olsa iyi olur" değil, zaman bazlı hesapların altyapısıdır; kuruluşta tek biçimde tanımlanması da önerilir.
Tarih tablosunun taşıması gereken koşullar
Rehberde sayılan gereklilikler, iyi bir takvimin kontrol listesidir:
- Tarih ya da tarih/saat veri tipinde bir sütun bulunmalı (tarih sütunu).
- Sütundaki değerler benzersiz olmalı; aynı gün iki kez geçmemeli.
- Sütunda boş (BLANK) değer olmamalı.
- Eksik gün olmamalı; ilk ve son tarih arasındaki her gün tabloda yer almalı.
- Tarih aralığı tam yılları kapsamalı. Yıl, mutlaka ocak-aralık takvim yılı olmak zorunda değildir; mali yıl da olabilir.
Son koşul sık atlanır. Satışlar yılın ortasında başlıyorsa ve takvimi ilk satış gününden başlatırsanız, ilk yılın başı eksik kalır; "yılbaşından bugüne" ve "önceki yıl" hesapları tutarsız çıkar. Takvimi her zaman ilk olay yılının ocak ayından, son olay yılının aralık sonuna kadar kurun.
Önemli bir ayrım da vardır: Klasik zaman zekası fonksiyonlarını kullanıyorsanız tabloyu tarih tablosu olarak işaretlemek zorundasınız. Önerilen takvim tabanlı (calendar-based) zaman zekasında ise bu işaretleme, belirli durumlar dışında gerekmez.
Dört yol: hangisini seçmeli?
Rehber tarih tablosu eklemek için birkaç teknik sayar. Seçim, kaynağınıza göre yapılır.
Kaynakta zaten tarih boyutu varsa: Veri ambarına bağlanıyorsanız çoğunlukla hazır bir tarih boyut tablosu bulunur. Rehberin önerisi onu Power Query ile modele almaktır; böylece kuruluşta zaman için tek doğru kaynak kullanılır. DirectQuery modelde kaynakta tarih tablosu yoksa, tabloyu kaynağa eklemenizi güçlü biçimde önerir.
Kendiniz üretecekseniz: Power Query ile üretebilir ya da DAX ile hesaplanmış tablo yazabilirsiniz. Rehber, DAX'ın bu iş için yerleşik zekâ içerdiğini, genellikle daha kolay ve daha rahat olduğunu söyler.
Auto date/time: Ayrı tablo kurmadan, gizli tarih tabloları üreten otomatik seçenek. Rehber, bunun yalnızca takvim dönemleriyle çalışırken, modelin zaman ihtiyacı basitken ve keşif amaçlı hızlı modellerde kullanılmasını önerir; çünkü birden çok tabloya yayılan tek bir tarih tablosu tasarımını desteklemez.
Kuruluş genelinde ise rehberin ek önerisi şudur: Tek bir tarih tablosu içeren bir Power BI Desktop şablonu hazırlayıp tüm modelleyicilerle paylaşmak ya da Power Query ile bir veri akışı (dataflow) yayımlayıp herkesin takvimi oradan almasını sağlamak.
DAX ile takvim yazmak: CALENDAR ve CALENDARAUTO
DAX ile takvim, hesaplanmış tablo olarak yazılır. Rehber iki fonksiyon önerir.
CALENDAR, başlangıç ve bitiş tarihini siz verirsiniz. Değerler başka DAX fonksiyonlarından gelebilir. Örneğin sipariş tablosundaki en küçük ve en büyük sipariş tarihini vererek aralığı veriden çıkarabilirsiniz:
Tarih = CALENDAR ( MIN ( Sales[OrderDate] ), MAX ( Sales[OrderDate] ) )
CALENDARAUTO, aralığı modeldeki tüm tarihleri kapsayacak biçimde kendisi belirler. Rehbere göre tam yılları döndürdüğü için işaretlenebilir tarih tablosunun koşulunu kendiliğinden karşılar; üstelik veri yenilendiğinde tablo yeniden hesaplanır ve yeni yılın tarihleri yüklenmişse aralık otomatik uzar. Yılınız takvim yılı değilse, tek isteğe bağlı parametreyle yılın bitiş ayını verirsiniz. Takvim yılı için parametresiz yazılır:
Tarih = CALENDARAUTO ()
Dikkat edilecek nokta, CALENDARAUTO'nun modeldeki tüm tarih sütunlarına baktığıdır. Doğum tarihi gibi alakasız, çok eski tarihler varsa takvimi gereksiz uzatabilir; bu durumda CALENDAR ile elle aralık vermek daha kontrollüdür.
Her iki fonksiyon tek sütunlu tablo döndürür. Gerisi sizin işinizdir: hesaplanmış sütunlarla yıl, ay numarası, ay adı, çeyrek, hafta gibi alanlar eklenir.
Sütunları eklemek ve ilişkiyi kurmak
Takvimden sonra raporlarda gerçekten kullanacağınız sütunları ekleyin. Örnek hesaplanmış sütunlar:
Yıl = YEAR ( 'Tarih'[Date] ) Ay No = MONTH ( 'Tarih'[Date] ) Ay Adı = FORMAT ( 'Tarih'[Date], "MMMM" )
Burada iki kural işe yarar. Birincisi, ay adı sütununu ay numarasına göre sıralayın (Sort by column); aksi halde aylar alfabetik dizilir ve ocak yerine nisan başa gelir. İkincisi, ay adı bilgisayarın ya da raporun bölgesel ayarına göre çıkar; Türkçe ay adı bekliyorsanız bölgesel ayarı denetleyin. Sütunlara anlamlı adlar verin ve kullanılmayan teknik sütunları rapordan gizleyin.
Sonra ilişki: Takvimin tarih sütunu ile olay tablosunun tarih sütunu arasında birden çoğa (takvim tarafı bir) ilişki kurun. Olay tablosundaki sütun tarih/saat ise saat bileşeni takvimdeki günle eşleşmeyi bozar; ilişkide kullanılan sütun yalnızca tarih olmalıdır. Bir olay tablosunun birden fazla tarihi varsa (sipariş, teslim, fatura) rehber iki yol sunar: Her tarih için takvimi çoğaltmak ya da tek takvimde etkin olmayan ilişkileri USERELATIONSHIP ile gerektiğinde açmak.
Takvimi çoğaltmak için hesaplanmış tablo ifadesine mevcut tablonun adını yazmak yeterlidir (örneğin Teslim Tarihi = 'Tarih'). Belgenin uyarısına göre bu yöntem yalnızca sütunları kopyalar; biçim, açıklama gibi model özelliklerini ve hiyerarşileri kopyalamaz.
Tarih tablosu olarak işaretlemek ve sık hatalar
Klasik zaman zekası kullanıyorsanız tabloyu işaretleyin. Microsoft belgesinde yol şöyledir: Alanlar bölmesinde tabloya sağ tıklayıp Mark as date table > Mark as date table seçilir; aynı seçenek Table tools şeridinde de vardır. Ardından Date table settings ile hangi sütunun tarih sütunu olduğu belirtilir. Power BI Desktop bu sırada sütunun benzersiz, boşsuz ve ardışık olduğunu doğrular; tarih/saat tipindeyse her değerin aynı zaman damgasına sahip olması gerekir.
İşaretlemenin yan etkisi önemlidir: Kendi tablonuzu belirlediğinizde Power BI otomatik hiyerarşileri üretmeyi bırakır, yerleşik (otomatik) tarih tablosunu kaldırır ve onlara dayanan görseller ile DAX ifadeleri düzgün çalışmayabilir. İşaretlemeyi zorunlu kılan başlıca durumlar: ilişkiler tam sayı biçimli tarih anahtarlarına (örneğin yıl-ay-gün biçiminde tek sayı) dayanıyorsa ve Excel PivotTable ya da PivotChart içinde gelişmiş tarih filtreleri istiyorsanız.
Sık hatalar: • Takvimin tam yılları kapsamaması. • Kendi takviminizi kurduktan sonra otomatik tarih/saat seçeneğini açık bırakıp iki ayrı takvimle çalışmak. • İlişkinin tarih/saat sütununa kurulması. • Ay adı sütununu sıralamamak. • İşaretledikten sonra eski otomatik hiyerarşileri kullanan görselleri kontrol etmemek.
Bu beceriyi Mindset programlarında nerede çalışırsınız?
Tarih tablosu, model kuran herkesin ilk işidir; özellikle zaman karşılaştırmalı raporlama yapan finans, satış ve operasyon ekipleri için gereklidir.
Power BI Veri Modelleme programı yıldız şema ve boyut modelleme ile "Ölçüler, Hesaplanan Sütunlar ve Model Temizliği" başlıklarında bu temeli ele alır. Power BI İleri Düzey ve DAX programı ise tarih tablosunun üstüne zaman zekası ve dönem analizini ("Zaman Zekası ve Dönem Analizi" modülü) kurar. Önce veri modeli, sonra DAX sırası, takvimi neden başta kurduğunuzu da açıklar.
İlgili Mindset programı
Power BI Veri Modelleme
Sık sorulan sorular
Auto date/time açık kalabilir mi?
Basit ve keşif amaçlı modellerde kalabilir. Microsoft rehberi, yalnızca takvim dönemleriyle çalışırken ve zaman ihtiyacı sade olduğunda önerir. Birden çok olay tablosunu tek takvimle filtrelemeniz, mali yıl kullanmanız ya da kuruluş standardı oluşturmanız gerekiyorsa kendi tarih tablonuzu kurmanız daha doğrudur.
CALENDAR mı CALENDARAUTO mu kullanmalıyım?
Aralığı kendiniz belirlemek istiyorsanız CALENDAR, modeldeki tüm tarihleri kapsayacak tam yılları otomatik almak istiyorsanız CALENDARAUTO uygundur. CALENDARAUTO yenilemede tabloyu yeniden hesaplayıp yeni yıl eklendiğinde aralığı uzatır. Alakasız eski tarih sütunları varsa CALENDAR ile elle sınır vermek daha güvenli olur.
Tarih tablosunu işaretlemek zorunlu mu?
Klasik zaman zekası fonksiyonlarını kullanıyorsanız evet. Önerilen takvim tabanlı zaman zekasında ise belirli durumlar dışında gerekmez. İlişkiler tarih/saat dışı, örneğin tam sayı anahtarlarla kuruluysa ya da Excel PivotTable içinde gelişmiş tarih filtresi isteniyorsa işaretleme gerekir.
Aynı modelde birden fazla tarih alanı nasıl yönetilir?
İki yaklaşım vardır. Sipariş, teslim ve fatura tarihi gibi alanlar için takvimi hesaplanmış tabloyla çoğaltabilirsiniz; her çoğaltma ayrı bir rol oynar. Alternatif olarak tek takvime etkin olmayan ilişkiler kurup ölçüde USERELATIONSHIP ile gerektiğinde açarsınız. Çoğaltma raporda daha okunaklıdır.
İlgili rehberler
İlgili eğitimler
Kategori: Veri Analitiği ve İş Zekası