A cozy workspace featuring a laptop displaying code, a smartphone, and a cute orange plush toy on the desk.
Power BI: Bir Veri Mimarının Saha Notları (Star Schema, DAX ve Kapasite Pazarlığı)

Geçen yıl bir bankada veri ekibinin yanına oturdum. Ekran karşısında, refresh tuşuna basıp kahvelerini yudumluyorlardı. Çünkü bir tane Power BI raporu vardı, açılması üç dakika sürüyordu. “Veri çok büyük” dediler. Açtım baktım — 40 milyon satır değil, 600 bin satır. “Veri çok değil arkadaşlar” dedim, “sizin modeliniz büyük.” Tek bir tablo vardı, içine her şey koyulmuştu: müşteri bilgisi, ürün bilgisi, satış bilgisi, tarih bilgisi, hepsi yan yana. İşte Power BI’la ilgili anlatacağım her şey aslında bu sahnenin etrafında dönüyor.

Power BI, Microsoft’un veri görselleştirme ve iş zekası platformu — biliyorsunuz. Üç parçası var: Desktop dediğimiz masaüstü uygulaması raporu kurduğunuz yer; Service bulutta paylaştığınız ortam; Mobile da telefondan baktığınız yüz. Ama platformun gerçek gücü buralar değil, altta yatan iki şey: veri modeli ve DAX. Onları doğru kurarsanız Power BI uçar; kuramazsanız her seferinde refresh tuşuna basıp kahve içersiniz.

Modeli yıldız gibi düşünmek

Bankada o sabah yaptığım şuydu: tek tabloyu parçaladım. Ortaya bir fact tablo koydum (satışlar — milyonlarca satır olabilir, sadece sayılar ve foreign key’ler var), etrafına dört tane dimension tablo dizdim (müşteri, ürün, tarih, şube). Buna yıldız şema (star schema) deniyor. Hâlâ aynı veri, hâlâ 600 bin satır, ama VertiPaq motoru bu yapıyla çok daha verimli çalışıyor. Refresh süresi 3 dakikadan 6 saniyeye düştü. Hiçbir DAX değişmemişti.

Power BI veri akış mimarisi: kaynaktan dashboard'a
Power BI veri akış mimarisi: kaynaktan dashboard'a

Snowflake (kar tanesi) şema da var ama Power BI’da kullanmamanızı öneririm — özellikle ilk projelerde. Daha normalize ama performans cezası var. Yıldız ile başlayın, gerçekten gerekirse sonra parçalarsınız.

Bir de “calculated column mı yazayım, measure mı?” sorusu var. Pratik kuralım şu: satır bazlı sabit bir değer mi, raporda dilimleyiciye göre değişen bir hesap mı? İlki ise calculated column (modelde kalır, refresh sırasında hesaplanır). İkincisi ise measure (sorgu zamanında, kullanıcı bir slicer’a bastığında çalışır). Acemilik döneminde herkes aşırı calculated column yazıyor — model şişiyor, refresh yavaşlıyor. Measure’a geçince hayatı kurtarıyor.

DAX: Aşk-nefret ilişkisi

DAX’ı sevmiyorum diyemem ama ilk altı ay sevmiştim demek de yalan olur. Excel formüllerine benziyor, oradan geçen birine sahte bir aşinalık veriyor — sonra CALCULATE‘e çarpıyorsunuz ve her şey çöküyor. Çünkü DAX’ın kalbinde “context” kavramı var: filter context ve row context. Bu ikisini gerçekten anlamadan ilerlemeye çalışırsanız, formülünüz neden “yanlış” sonuç verdiğini bir türlü çözemezsiniz.

Geçen ay perakende bir müşteride şu vakayla karşılaştım: ekip aylık satış büyümesini hesaplamaya çalışıyordu. Yazdıkları formül her ay için tablodaki tüm ayların toplamını döndürüyordu. Sebep? SUM‘u FILTER içinde kullanmışlardı ama context’i transition etmediler. CALCULATE sarmalayıcı eksikti. Ekledik, çalıştı. “Bu kadar mı?” dediler. Bu kadarmış.

Time intelligence için elinizin altında olması gereken üç fonksiyon var: SAMEPERIODLASTYEAR (geçen yılın aynı dönemi), TOTALYTD (yılbaşından bugüne kümülatif), DATEADD (esnek tarih kaydırma). Bunlar için ayrı bir Date tablonuzun olması şart — auto date/time özelliğini kapatıp kendi takvim tablonuzu kurun. (Auto date/time her tarih sütunu için arka planda gizli bir tablo oluşturuyor — model dosyanızı şişirir, performansı düşürür. Açık olmasın.)

Bir de iteratör fonksiyonlar var: SUMX, AVERAGEX, FILTER. Bunlar satır satır geziyor — küçük tablolarda hiç sorun yok, ama 50 milyon satırlık bir fact’te SUMX yazarsanız hayatınız kararabilir. Mümkünse aggregation fonksiyonlarına (SUM, AVERAGE) çekin. Mümkün değilse, en azından VAR ile ara değerleri tutun, aynı hesabı tekrar tekrar yapmayın.

Veriyi nasıl alıyoruz, nereden bağlıyoruz

Power BI 150’den fazla kaynağa bağlanabiliyor — bu rakam pazarlama açısından güzel ama günlük hayatta çoğunlukla şu üçüyle iş görüyorsunuz: SQL Server / Azure SQL, Excel/CSV, ve bir de REST API. Bağlantı modunda iki seçenek var: Import ve DirectQuery.

Import şudur: Power BI veriyi çeker, sıkıştırır, kendi belleğine alır. Çok hızlıdır. Ama veri tazeliği zorunluğunuz varsa (saatlik, anlık) sıkıntılıdır — refresh planlamanız gerekir. DirectQuery şudur: her sorgu kaynağa gider. Veri her zaman taze ama performans tamamen kaynak veritabanına bağlıdır. Pratikte ben şunu söylerim: Import ile başlayın. Veri büyüklüğü gerçekten bellek sınırlarına dayatıyorsa veya canlılık şartsa DirectQuery düşünün. Ortayı arayanlar Composite model ile karışık kullanabilir ama o ileri seviye bir konu.

Power Query (M dili) kısmı sevdiğim yer. Veriyi alıp temizliyorsunuz: null’ları çeviriyorsunuz, sütun tiplerini düzeltiyorsunuz, pivot/unpivot yapıyorsunuz, koşullu sütun ekliyorsunuz. Görsel arayüzde tıklaya tıklaya yapılan her adım arka planda M koduna çevriliyor. Adımlar kaydediliyor — yani veri yenilendiğinde aynı temizlik otomatik tekrarlanıyor. Excel’den gelen ekipler için bu kısım büyülü gibi.

Görseller ve hikaye

Görselleştirme tarafında Power BI’ın “şu görsel daha iyi” diye sıralayabileceğim bir tarafı yok aslında. Sütun, çizgi, pasta, harita, treemap, scatter, waterfall — hepsi var. AppSource’tan topluluk görselleri var. R ve Python ile tamamen özel görsel yazabiliyorsunuz.

Asıl mesele “hangi görsel” değil, “hangi hikayeyi anlatıyorsunuz”. Bir CFO için tasarladığım bir raporda toplam üç KPI kartı, bir trend çizgisi, bir de bütçe-gerçek karşılaştırma tablosu vardı. Hepsi bu kadar. CFO her sabah üç dakika bakıyor, ihtiyacı bu üç dakikada karşılanıyor. Genç bir analiste tasarlattığım aynı verili rapor 18 görsel içeriyordu — kimse açmıyordu çünkü nereye bakacağını bilemiyordu. Görsel sayısı azaldıkça karar hızlanıyor.

Slicer ve bookmark mekanizmalarını da sevdirin kullanıcılarınıza. Rapor genel görünümle başlasın, drill-through ile detaya inilsin. Hiyerarşi olsun.

Paylaşım, lisans, ve büyük “Pro mu Premium mu” sorusu

Power BI Service’te raporlar workspace’lerde duruyor. Erişim rolleri dört kademeli: Admin, Member, Contributor, Viewer. Çoğu kurumsal senaryoda Member ve Viewer iki kademe yeter. Row-Level Security (RLS) çok kıymetli bir özellik — aynı raporu farklı kullanıcılar açtığında farklı veriler görüyor. Bölge müdürü kendi bölgesini, GM hepsini.

Şimdi finans ekibinin gözleri parlayan kısma geliyoruz: lisanslama. Power BI Free bireysel — paylaşamıyorsunuz, anlamsız. Power BI Pro kullanıcı başı ayda yaklaşık 10 USD; küçük-orta ekipler için doğrudur. Power BI Premium Per User (PPU) yaklaşık 20 USD/kullanıcı; AI özellikleri, daha büyük dataset’ler, deployment pipeline’ı geliyor. Power BI Premium kapasite bazlı — ayda yaklaşık 5.000 USD’den başlar. Genel kabul: 500 kullanıcı eşiği. Altındaysanız Pro veya PPU hesaplayın; üstündeyseniz Premium kapasite genelde matematik olarak avantajlı.

Bir telekom müşterisinde 1.200 raporlama kullanıcısı vardı. Pro ile yıllık maliyet ~144.000 USD; Premium kapasite (P1) ile yıllık ~60.000 USD. Geçişle paranın yarısından fazlasını kazandırdık. Tabii AI özellikleri, paginated reports, XMLA endpoint gibi bonuslar da geldi.

Refresh ve incremental

Büyük tablolarda incremental refresh açın. Açmazsanız her gece 50 milyon satırı baştan çekiyorsunuz; açarsanız sadece son birkaç günü çekiyor. Refresh süresi saatlerden dakikalara iner. Premium veya PPU lisansta tam yetenekleriyle çalışıyor. Pro lisanstaki kısıtlı versiyon da var ama esas verim Premium’da.

On-prem veriniz varsa (banka, sigorta — hâlâ çok yaygın) on-premise data gateway kurun. Kurumsal versiyonu (enterprise) tercih edin — birden fazla geliştirici ortak kullanabilsin. Kişisel gateway, geliştirme için, üretime sokmayın.

Yapay zeka tarafı: kullanıyor muyuz?

Q&A, Quick Insights, Smart Narratives, Anomaly Detection — vitrindeki AI özellikleri. Pratikte: Q&A’yı orta düzey yöneticiler kullanıyor (“geçen ayın en çok satan ürünleri” yazıyorlar, görsel çıkıyor). Anomaly Detection zaman serilerinde işe yarıyor. Smart Narratives raporun başına bir paragraf yazdırıyor, hoş ama bağlayıcı değil. Quick Insights’ı çok rağbet görmedim.

Genel intibam: AI özellikleri Power BI için bir tamamlayıcı, ana satış argümanı değil. Lisansı bunlar için almazsınız ama varsa kullanırsınız.

Sık sorulan üç soru

“Pro mu Premium mu” diye sordular, cevap? 500 kullanıcı altıysa Pro/PPU; üstündeyseniz Premium kapasite hesaplayın. Bireysel premium yetenek istiyorsanız (AI, büyük model, paginated) PPU 20 USD ile uygun.

Gerçek zamanlı mümkün mü? Evet ama “gerçek zamanlı” tanımına bağlı. DirectQuery ile her sorguda kaynaktan; streaming dataset ile Event Hub/Stream Analytics üzerinden saniyelik akış; push dataset ile uygulamadan REST API’ye veri itme. Operasyon dashboard’ları için streaming çok kullanışlı.

On-prem’e nasıl bağlanacağız? On-premise data gateway. Kuralım: kişisel değil, enterprise versiyonu. Outbound bağlantı kurar — firewall’da port açmıyorsunuz. Bir kez kurulur, birçok rapor için kullanılır.

Sonuç

Power BI ile yapılan en yaygın hata teknik değil, kavramsal: insanlar Excel uzantısı sanıyor onu. Hâlbuki bir analitik motor. Yıldız şema, DAX context, doğru measure tasarımı — bu üç şeyi çözen ekip Power BI’la inanılmaz işler çıkarıyor. Çözmeyen ekip ise refresh tuşuna basıp kahve içiyor. Hangi ekipte olmak istediğinize karar verirken benim önerim: ilk hafta DAX bilgisini değil, model bilgisini güçlendirmek.

CloudSpark veri analitiği ve Power BI hizmetlerimiz kapsamında model tasarımı, DAX optimizasyonu ve Premium geçiş planlaması konularında ekiplerle çalışıyoruz.

🇹🇷 Türkçe🇬🇧 English🇩🇪 Deutsch🇫🇷 Français🇸🇦 العربية🇷🇺 Русский🇪🇸 Español