Kardinalite, tekil değer sayısı olarak tanımlanabilir. Power BI özelinde, bir sütundaki tekil değer sayısı ne kadar çoksa kardinalitesi o kadar yüksek demektir. Sütunlardaki tekil değer sayısının yüksekliği, Power BI dosya büyüklüğünü en çok tetikleyen etken! Ne kadar az tekil değer, o kadar düşük dosya büyüklüğü.
Aşağıdaki örneklerde 2 farklı Power BI dosyası var: Biri tek sütunluk 6 tablodan oluşuyor, her bir tablo kabaca 2 milyar satır içeriyor. Toplamda 12 küsür milyar satır içeren bir dosya! Diğeri hepi topu 2 satır ve 4 sütun içeren tek bir tablodan oluşuyor
12 milyar satır içeren dosya, hepi topu 2 satır 4 sütun içeren dosyadan daha küçük!
12 milyar satır 88 KB’ta nasıl sığar? Eğer sütunlardaki tekil değer sayısı çok azsa sığar! Tablolardaki sütunlarda 12 milyar satır var belki ama her sütunda sadece 2 farklı tekil değer var!
Diğer dosyada tarih bilgisi içeren sütunlardan birindeki değer 31 Aralık 9999! Standart ürün fiyatının geçerli olduğu bir başlangıç ve bitiş tarihi var. Yeni bir standart fiyat belirlenene kadar mevcut fiyatın sonsuza kadar! geçerli olması için tasarlanmış!
Aradaki inanılmaz satır sayısı farkına rağmen dosya büyüklüklerinin tam tersi olmasının iki sebebi var bu örnekte: En önemlisi kardinalite; ilk dosya 12 milyar satır da içerse, sütunlarda sadece 2 tekil değer bulunduğu için (yani kardinalitesi çok düşük olduğu için) Power BI ‘ın analitik motoru Vertipaq son derece yüksek bir oranda veriyi sıkıştırabilmiş.
Diğer sebep ise “by default” açık gelen “Auto Date/Time” özelliği! İkinci dosyanın Auto Date/Time opsiyonu açık, hepi topu 2 satır 4 sütun da olsa, 31 Aralık 9999 değeri dosyanın daha büyük olmasına yol açmış.
Auto Date/Time, eğer modelinizde nizami bir tarih tablosu yoksa ve tablolarınızdaki sütunlar date/time tipinde değerler içeriyorsa otomatik Yıl-Çeyrek-Ay gibi hiyerarşileri yaratmanızı sağlayan bir özellik! Power BI opsiyonlarında iki yerde geçiyor, biri global tüm dosyalar için, diğeri lokal açık olan PBI dosyası için. Faydalı bir özellik gibi gözükse de yaptığı aslında şu, arka tarafta bizim görmediğimiz gizli tarih tabloları oluşturuyor.
İlgili Power BI dosyasına DAX Studio ile bağlandığınızda bu gizli tarih tablolarını görebilirsiniz! Hepi topu 2 satır 4 sütunluk tek tablo olmasına rağmen tarih bilgisi içerdiği için ve Auto Date/Time kapatılmadığı için dosya büyüklüğü 12 milyar satırlı dosyadan daha yüksek!
Eğer Auto Date/Time opsiyonunu kapatırsanız dosya büyüklüğü epey azalacaktır.
Bu haliyle bile 12 milyar satır nerede 2 satır nerede!
Dediğim gibi, dosya büyüklüğünü tetikleyen en önemli şey kardinalite; sütunlardaki tekil değer sayısının azlığı-çokluğu.
Modelinizde hangi sütunlarda ne kadar tekil değer var, hangi sütunlar dosya büyüklüğüne en çok katkıyı sağlıyor bunu gene DAX Studio ile görmek mümkün. Advanced menüsü altındaki “View Metrics” ‘ten Cardinality, Table Size ve Col(umn) Size size bu sütunları gösterecektir!
Power BI Pro lisansında publish edilebilecek bir dosyanın maksimum büyüklüğü 1GB olabilir. Eğer belli kurallara uyarsak bu 1 GB altına dünyalar sığar!
Bu bulgular üzerinden dosya büyüklüğünü küçültmek için uygulamamız gereken “best practice” ‘lere geçelim!
Power BI Dosya Büyüklüğü Nasıl Azaltılır?
- Her modelinizde istisnasız nizami bir tarih tablosu olmalı. Ve Auto Date/Time özelliği global olarak kapatılmalı! Tarih tablosu için bu yazıya göz atmak isteyebilirsiniz.
- Belki lazım olur düşüncesiyle modelinize gereksiz sütun almayın! Her sütun, özellikle yüksek tekil değer içeren sütunlar dosya büyüklüğünüzü arttırır. Mevcut modellerinizde ne metriklerde ne de rapor sayfalarında hiç kullanılmayan sütunları Power BI Helper gibi external araçlarla bulabilirsiniz. Gerekli olan / olmayan sütunları nasıl seçelim sorusu için bu yazıya göz atmak isteyebilirsiniz.
- Hesaplanmış sütunlar, Vertipaq tarafından orijinal veride olan sütunlar gibi sıkıştırılamıyor! Hesaplanmış sütun lazımsa bunu olabiliyorsa veri kaynağında, olamıyorsa Power Query tarafında eklemeyi tercih edin.
- Gün (date seviyesinde) bir detay size rapor ihtiyaçlarınız için yeterliyse, bu tür tarih bilgisi içeren sütunları Power Query tarafında DateTime olarak değil Date olarak işaretleyin.
- Gün/Saat/Dakika seviyesinde tarih sütunlarınız varsa, “dakika” bilgisine ihtiyacınız yoksa bunu uçurun. Saat seviyesine gerçekten ihtiyacınız varsa Gün/Saat bilgisini içeren sütunu Gün ve Saat olarak iki ayrı sütuna ayırın. Eğer ayırmazsanız, ilgili sütundaki tekil değer sayısı daha fazla olur, dosya büyüklüğünüz artar. Ayırırsanız, Date tipindeki sütunun kardinalitesini, her yıl için en fazla 365’e, saat sütununu 24’e düşürmüş olursunuz.
- Granularity -hangi detay seviyesindeki veriye ihtiyacınız var- sorusu için verilerinizi gruplamayı düşünebilirsiniz. Eğer gün değil de ay seviyesindeki bir veri sizin için yeterliyse verilerinizi gruplayarak getirin. Ay seviyesindeki bir transactional veriye referans bir tarih sütunu eklerseniz tüm time intelligence grubu metrikleri de sorunsuz yazarsınız.
Yazıdaki örnekleri -bloga üyeyseniz- indirebilirsiniz.
Sadece üyeler görebilir. Hızlı üyelik için sosyal medya hesabınızla giriş yapabilirsiniz!