Power BI’da önemli yapı taşlarından bir tanesi de modele harici bir Tarih Tablosu eklemektir. Konu ne olursa olsun hemen hemen her makalede, her webinarda mutlaka “Projelerinize Tarih tablosu ekleyerek başlayın” uyarısı yapıyorum. Nedir bu Tarih Tablosu, Neden var olan tarih sütunları ile yetinemeyip modele Tarih tablosu ekleriz? Bu makalede Direkt olarak Tarih Tablosu eklemeyi göstermek yerine, eklemediğimizde yaşanabilecek hataları da göreceğiz.
Tarih Tablosunu kısaca tanımlayalım; belirteceğimiz iki tarih arasındaki tüm tarihlerin gün/ay/yıl olarak bulunduğu ve tarihlerin tekrar etmediği, özetle ardışık ve tekrarsız bir tarih sütunu barındıran tablodur. Power BI’da bir modelin olmazsa olmazıdır. Modeldeki görevini vurgulamak için kabaca 5 sebep söyleyerek başlayalım yazımıza. Bu yazıda birkaçını detaylandıracağım. Devamı diğer yazılarda gelecek.
- Tarihe dair gerekli olan diğer gün/ay/yıl/haftanın günü/ yılın haftası/gün adı vb. diğer bilgilerin en minimum boyutta saklanması için yani dosya boyutunu gereksiz arttırmamak için modelimizde bir Tarih Tablosu bulunmalıdır.
- Farklı tablolardaki değerlerin ortak bir tarih slicer’ından seçilen tarihe göre filtrelenebilmesi için Tarih Tablosunun olması şarttır.
- 2.madde ile aynı mantıkla, üretim ve satış adetlerini ya da satış ile bütçe verilerini tek bir grafikte kıyaslamak istersek, veri kaçırmadan doğru sonuçları görebilmek için tarih tablosu kullanmak şarttır.
- Time Intelligence Fonksiyonlarının çalışması için fonksiyonların Tarih Tablosu üzerinden yazılması şarttır.
- Örneğin bir fabrikanın üretim raporunda, tezgah bazında üretim adetlerine bakarken, üretim yapılmamış zamanları da göstermek gerektiğinde, Tarih Tablosu üzerinden hazırlanmalıdır.
Aslında burada saydığım maddelerin bir kısmı Dimension Table ve Fact Table konuları ile de ilgili. Tarih tablosu, bir yandan da elimizdeki Tarihlere dair gün adı, haftanın kaçıncı günü vb. ekstra tanımlayıcılar barındırdığı için aslında bir Dimension Table’dır. Yani Dimension Table ile ilgili tüm bilgileriniz, Tarih Tablosu için de geçerlidir. Yazının, bu kavramları bilmeyenler için de anlaşılır olması için bu kavramlardan bahsetmeden anlatacağım.
Tablolarınızdaki her tarih formatlı sütun için, modele otomatik olarak gizli Yıl/Çeyrek/Ay/Gün sütunları eklendiğini biliyor musunuz?
Power Bı Desktop uygulamasını açtığımızda bazı ayarlar default olarak açık gelir. Bunlardan bir tanesi Otomatik Date Table’dır. Bizim ekleyeceğimiz Tarih Tablosundan önce bu Oto Date Table’dan haberdar olmamız önemli.
File / Options & Settings / Options menüsünün Global bölümünün Time Intelligence alanındaki check işareti, modelinize Power BI tarafından Otomatik Date table ekleneceği anlamına gelir.
Resim – 1
Yani tablolardaki her tarih sütunu için modele ekstra birer Tarih tablosu ekleniyor ve bu tarih tablosu da Yıl/Ay/Çeyrek ve Gün sütunları içeriyor. İşin çok başında olanlar için rapordaki tarihlere, yıl, çeyrek, ay, gün kırılımlarının otomatik gelmesi güzel bir özellik gibi dursa da profesyonel bir projede yetersiz kalıyor ve gereksiz bir data yığıntısına dönüşüyor. Bu tablolar, gizli olduğu için son kullanıcılar bu tabloları görüp silemiyor.
Şimdi amatörce denemelere başladığımızı düşünelim. Aşağıda bir satış tablomuz var. Tabloda tarihle ilgili olarak satışların tarihini gösteren Tarih sütunumuz var. Açtığımız dosyanın “Auto Date Time” özelliği de açık.
Resim-2
Auto Date Time açık olduğu için, raporumuzda rapor görünümüne tarih sütununu getirdiğinizde Tarih hiyerarşik olarak bu 4 değere kırılıyor. Bunu gizli olarak tuttuğu tarih tablosu sayesinde yapıyor.
Resim-3
Gizli tabloları Dax Studio ile Pbix dosyamızı açtığımızda kolayca görebiliriz.
Resim-4
İşin çok başında olanlar için rapordaki tarihlere, yıl, çeyrek, ay, gün kırılımlarının otomatik gelmesi güzel bir özellik. raporlarını bu kırılımlarda rahatlıkla görebilirler. Ancak modelde gördüğü her tarih sütunu için bir tablo eklemesi esasen kötü bir durum. Firmaların projelerini düşünelim,; tarihle ilgili olarak üretim tarihi, teslimat tarihi, satış tarihi, fatura tarihi vb. birçok sütun oluyor… Bu gizli eklenen tablolar yüzünden dosya boyutunuz siz farkında olmadan hayli artıyor!
Otomatik eklenen tarih tablosu raporumuzdaki tarih ile ilgili tüm ihtiyaçlarımızı karşılıyor mu?
Bi yandan dosya boyutunu arttırırken diğer yandan bizim rapor içerisindeki ihtiyaçlarımızı da karşılamakta hayli yetersiz kalıyor. Bu nedenle de bizim harici olarak Tarih Tablosu ekleme ihtiyacımız doğuyor.
Örneğin raporda haftanın günlerine göre satış adetlerini göstermek istersek, mevcut 4 kırılım bilgisi yetersiz kalacak. Mecburen bu bilgiyi, satış tablosuna yeni hesaplanmış sütun olarak eklememiz gerekecek. Satış Tablosu başlı başına satır sayısı yüksek bir tablodur. Ayrıca aynı tarihte birçok satış yapılabileceği için, aynı tarihten birçok kez bulunur. Bu tabloya yeni hesaplanmış sütun eklemek demek, her satırdaki her tarih için tek tek haftanın kaçıncı günü olduğunu gereksiz yere hesaplatmak olur. Modele eklenen hesaplanmış sütunlar, her refreshte yeniden satır satır hesaplanır. Ayrıca bu sütun veri modelinize eklendiği için dosyada yer kaplar. Bu düzgün bir proje için doğru bir yaklaşım değildir. Bu yaklaşım ile ilerlersek, günün adı, yılın kaçıncı haftası, haftanın hangi günü vb. bilgiler gerekli oldukça tek tek sütun oluşturulmak gerekecek, her bir sütun zaten hayli yüklü olan satış,üretim ya da finans tablonuza yük bindirmeye devam edecek. Performans problemlerinin yanı sıra, proje ilerledikçe Power BI’ın bazı kabiliyetleri kilitlenecek.
Şimdi modele kendi tarih tablomuzu eklemeden satış ve üretim adetlerini tek grafikte göstermeyi deneyelim;
Satışlar tablosundaki haftanın kaçıncı günü sütunu oluşturalım ve yine satışlar tablosundan adet sütununu grafiğe bırakalım. Görüldüğü gibi haftanın 7.gününde satış yokmuş bu nedenle grafiğin aksisinde “7” yok.
Resim-5
Şimdi de bu grafik üzerinde aynı zamandaki üretim adetlerine ait değerleri de göstermek istersek ne olacak?
Aşağıdaki şekilde üretim tablosunun üretim adedi bilgileri, haftanın günlerine göre filtrelenemediği için, tüm günlerin sütunları “toplam üretim adedini” gösteriyor.
Resim-6
İşte en sık duyduğumuz, “benim bazı slicerlarım bazı grafiklerdeki değerleri değiştiremiyor, benim grafiğimde her iki değer aynı anda gösteremiyor” sorunu doğdu !
Burada aslında veri modelleme eğitiminden bir hatırlatma yapmamız gerekiyor. İlişkileri hatırlayalım. Satış ve Üretim tablosu arasında bir ilişki yok. O halde, satışlar tablosundaki bir değere göre(haftanın günü sütununa göre), Üretim tablosunu nasıl filtreleyebilsin ki, değil mi?
Elimizde henüz bir tarih tablosu yok, bu nedenle çoğu amatör kullanıcının yaptığı gibi devam edelim; Üretim tablosu ile Satış tablosunu satış tarihi ve üretim tarihi üzerinden bağladım.
Resim-7
Bu durumda, rapordaki grafik çalışmış gibi görünüyor (dikkat)
Resim-8
Şimdi dikkat edin lütfen, X aksisin değerleri satışlar tablosundan geliyor. Yani hangi tarihte/hangi günlerde satışlar varsa satışlar tablosundan yalnızca o değerler geliyor. Dolayısı ile üzerine getirdiğiniz değerler, aksiste görünen değerlere göre filtrelenecek, yani üretim tablosunda yalnızca o tarihe dair filtre uygulanacak ve sadece o tarihlerdeki değerler gelecek. Grafikte de görüyoruzki, Haftanın 7. Gününde satış yapılmamış, o nedenle X aksiste haftanın 7.günüyok, peki ya haftanın 7.günüde üretim var ise, onu görmemiz gerekmez mi?
Kontrol etmek için üretim tablosuna da haftanın kaçıncı günü formülünü ekleyip aşağıdaki şekilde rapora bırakıyorum. İşte 7.gündeki üretim olduğu görünüyor!
Resim-9
Ne Anlamalıyız?
Raporlarımızda filtreleyici görevindeki verilerin; Slicer’lar, tablolardaki veriler, diğer tablolardaki veriler vb. hepsinin filtrelemesi gereken kayda ait tüm değerleri kapsıyor olması gerekir. Yani burada Tarihi Üretim ya da Satış Tablosundaki tarihten almamalı, tüm tarihleri içeren başka bir tablodan alınmalıdır. Bu durum bize açıkça hadi artık modele Tarih Tablosu ekle diyor.
Aşağıdaki kodu, Modeling Sekmesi > New Table butonuna basınca açılan formül alanına yapıştırınız. (Çalışmıyorsa, noktalı virgülleri virgül ile değiştiriniz)
Date = ADDCOLUMNS ( CALENDAR (DATE(2000;1;1); DATE(2025;12;31)+365); "DateAsInteger"; FORMAT ( [Date]; "YYYYMMDD" ); "Year"; YEAR ( [Date] ); "Monthnumber"; FORMAT ( [Date]; "MM" ); "YearMonthnumber"; FORMAT ( [Date]; "YYYY/MM" ); "YearMonthShort"; FORMAT ( [Date]; "YYYY/mmm" ); "MonthNameShort"; FORMAT ( [Date]; "mmm" ); "MonthNameLong"; FORMAT ( [Date]; "mmmm" ); "DayOfWeekNumber"; WEEKDAY ( [Date];2 ); "WeekNumber"; WEEKNUM ( [Date];2 ); "DayOfWeek"; FORMAT ( [Date]; "dddd" ); "DayOfWeekShort"; FORMAT ( [Date]; "ddd" ); "Quarter"; "Q" & FORMAT ( [Date]; "Q" ); "YearQuarter"; FORMAT ( [Date]; "YYYY" ) & "/Q" & FORMAT ( [Date]; "Q" ) )
Bir sonraki adım olarak; Model bölümüne geçip Tarih Tablosundaki Date sütunuyla, satışlar ve üretim tablosundaki tarih sütunları arasında ilişkileri oluştururuz. Bu ilişkinin doğru çalışması için, ilişkilendirdiğiniz tüm tarihlerin aynı veri tipinde olması gerektiğini unutmayınız.
Resim-10
Bu modeli kurduktan sonra, tarihle ilgili herşey, slicer ve grafiklere tarih tablosundan getirilmelidir ki tarih tablosu ilişkili diğer tabloları da ilişki okları üzerinden filtreleyerek ilgili değerleri getirebilsin. Böylece hem satışların doğru adetlerini, hem de üretimin doğru adetlerini görebiliriz. Aşağıda görsel de görüldüğü üzere, Tarih tablosu olmadan yaptığımızda grafik haftanın 7.günündeki üretim adedini gösteremiyordu. Ancak Grafiğin Axis değerini tüm tarihleri içeren tarih tablosundan aldığımızda 7. günü de yakalayabildi. Aslında bu bir “Shared Dimension” konusu. Bu konu ile ilgili daha detaylı bilgiyi “Shared Dimension” mantığını anlattığım makalede bulabilirsiniz.
Resim-11
Bu gibi durumlarda Harici Date Table eklemeyi düşünmeyen kullanıcılar, iki veriyi ayrı grafiklerde göstermek gibi yollara gidilebiliyor. Bu hem rapor görünümü için istenmeyen kötü kullanıcı deneyimlerine sebep olur, Hem de her iki tabloya, sürekli olarak tarihle ilgili yeni hesaplanmış sütunlar eklemek zorunda kalınmış oluyor. Dahası da, daha ileri konularda çok önemli bazı hesaplamaları yapamamamıza sebep olacak. Görüyorsunuz ki modelde bir tarih tablosu olmadığında sorunlar ardışık geliyor ve büyüyor.
unutmadan, Date Table ekledikten sonra küçük bir adım daha var, henüz etkilerini görmeyeceğiz, bir sonraki makalede Date Table’ı Time Intelligence konusu ile birlikte işlerken farkedeceğiniz bir özellik ama yine de şimdiden o özelliği de aktif hale getirelim. Henüz Power BI dosyanız, uygulamaya eklediğimiz Date Table’ı benimsemedi, kontrol etmedi. Bunu sağlamak için aşağıdaki adımları takip ediniz.

Şimdilik son olarak, makalenin en başında bahsettiğimiz Auto Date Time’in açık olup olmadığını kontrol ediniz. Açıksa kapatalım ki, tarihler için gereksiz gizli tablolar eklenmesin modelimize.
Makalenin başında saydığım gibi, bu önemli özelliği atlamamanız için daha bir çok hayati sebep var.
“Power BI’ya neden tarih tablosu ekleriz” makale serisinin devamında hepsini inceleyeğiz,
Sevgi ve Sağlıcakla Kalın
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
TAGs: bi castle, Business intelligence, data, dax, powerbi
Bahar Hanım,
Bilgi veren yazınızdan dolayı teşekkür ederim. Aylar İngilizce şeklinde rapora geliyor. Bölgesel ayarlar Türkiye olmasının dışında farklı bir şey yapmamız gerekiyor mu?