0 212 951 05 08   bilgi@ofisdata.com

Yazılarımız

OfisData

POWER BI VERİ MODELİ: YILDIZ ŞEMASI İLE DOĞRU ANALİZ KURGUSU

Power BI’da “güzel görünen” bir rapor üretmek kolay; ancak doğru çalışan, güvenilir ve sürdürülebilir bir analitik kurgu kurmak, neredeyse her zaman veri modelinde kazanılır. Bir ölçü doğru hesaplanmıyorsa, dilimleyiciler beklenmedik şekilde sonuçları değiştiriyorsa veya sayfa açılışları saniyeleri aşıyorsa, çoğu zaman sorun DAX’tan değil; modelin yapısından, ilişki tasarımından ve tablo granülerliğinden kaynaklanır.

Bu makalede Power BI veri modeli için en pratik ve en sağlam yaklaşım olan yıldız şeması ile doğru analiz kurgusunu adım adım ele alacağız. Amaç, sadece “çalışan” bir model değil; hem iş kullanıcılarının sorularına cevap veren hem de BT tarafında yönetilebilir olan bir yapı kurmak: doğru grain, doğru boyut-fakt ayrımı, doğru ilişki yönleri ve yeniden kullanılabilir ölçüler.

İster yeni bir rapor geliştiriyor olun ister mevcut bir modeli iyileştiriyor olun, burada anlatılanlar size bir “mimarî kontrol listesi” gibi eşlik edecek. Daha derin uygulama pratikleri ve örnekler için Power BI Eğitimi içeriğine de göz atabilirsiniz.

Power BI model görünümünde boyut tabloları merkezdeki satış tablosuna düzenli biçimde bağlanmış durumda

Yıldız şeması nedir ve Power BI’da neden bu kadar kritik?

Yıldız şeması (star schema), merkezde bir veya birkaç fakt tablo (iş olaylarının sayısal kayıtları) ve çevresinde bu olayları açıklayan boyut tabloları (müşteri, ürün, tarih, bölge gibi) olacak şekilde kurulan veri modelidir. Power BI’daki filtreleme mantığı ve DAX değerlendirme bağlamı düşünüldüğünde, yıldız şeması; hem doğruluk hem performans hem de bakım maliyeti açısından “varsayılan doğru seçenek” gibi davranır.

Alternatif olarak, kaynak sistemlerden gelen çok sayıda normalleştirilmiş tabloyu aynen içeri almak (snowflake ya da daha karmaşık yapılar) çoğunlukla şu riskleri büyütür: yanlış ilişki yönleri, belirsiz filtre akışı, DAX’ta aşırı karmaşık hesaplar, performans düşüşü ve kullanıcıların aynı metriği farklı sayfalarda farklı görmesi.

Yıldız şemasının Power BI’daki pratik avantajları

  • Ölçüler (measure) daha kısa, daha okunabilir ve tekrar kullanılabilir olur.
  • Filtre akışı öngörülebilir hale gelir; rapor davranışları tutarlıdır.
  • Model boyutu ve sorgu süreleri kontrol altında tutulur; özellikle büyük veri setlerinde fark belirgindir.
  • Kurumsal yönetişim için “tek doğruluk kaynağı” (single source of truth) yaklaşımını destekler.

Snowflake yapı ne zaman kabul edilebilir?

Bazen boyut tablolarını birleştirmek veri kalitesi veya yönetişim için uygun olmayabilir. Bu durumda snowflake yapıyı tamamen yasaklamak yerine, gerekliliği netleştirmek ve ilişki sayısını minimize etmek gerekir. Örneğin ürün hiyerarşisi (kategori-alt kategori) ayrı tablolar olarak geliyorsa, raporlama katmanında bunları tek boyutta birleştirmek çoğu zaman daha doğrudur. Eğer ayrı tutmak zorundaysanız, filtre akışını basit ve tek yönlü tutacak şekilde düzenlemek önem kazanır.

Ürün, müşteri ve tarih boyutlarının ortadaki satış kayıtlarıyla tek yönlü filtre akışıyla bağlandığı kurgusal örnek

Grain (detay seviyesi) seçimi: Analizin temeli burada atılır

Grain, fakt tablonuzun “her satırının neyi temsil ettiği” sorusunun yanıtıdır. Power BI modelinde en sık yapılan hatalardan biri, grain’i netleştirmeden tablo birleştirmek veya iki farklı grain’i tek fakt tabloda karıştırmaktır. Örneğin satır bazlı satış kayıtları ile günlük özet satışları aynı tabloda taşımak, hem ilişki hem de ölçü tasarımını bozar.

Grain’i netleştirmek için 3 kontrol sorusu

  1. Bir satır, tek bir işlem satırını mı (ör. fatura satırı) temsil ediyor?
  2. Bir satır, belirli bir gün/mağaza/ürün gibi özet bir seviyeyi mi temsil ediyor?
  3. Bir satırın benzersiz anahtarı nedir ve kaynağın iş kuralları bu anahtarı garanti ediyor mu?

Yanlış grain’in tipik sonuçları

Yanlış grain, ölçülerin beklenmedik şekilde şişmesine (double counting), dilimleyicilerle çelişen sonuçlara ve “neden toplam ile alt kırılım toplamı tutmuyor?” sorusuna yol açar. Bu tür problemleri DAX ile yamamak mümkündür; ancak sürdürülebilir değildir. Önce model, sonra ölçü yaklaşımı daha güvenlidir.

Fakt tablo tasarımı: Sayılar ve olaylar merkezde

Fakt tabloları; satış tutarı, adet, maliyet, süre gibi sayısal metrikleri ve bu metrikleri açıklayan anahtarları taşır. İyi bir fakt tablo tasarımı, hem doğru ölçü üretir hem de boyutlarla ilişkiyi sadeleştirir.

Fakt tablolarda olması gerekenler

  • Ölçüye dönüşecek sayısal kolonlar (tutar, miktar, süre).
  • Boyut anahtarları (CustomerKey, ProductKey, DateKey gibi).
  • Gerekliyse iş sürecine özel “degenerate dimension” alanları (Sipariş No gibi), ancak dikkatli kullanılır.

Fakt tablolarda kaçınmanız gerekenler

Boyut niteliği taşıyan metin alanları (müşteri adı, ürün adı) fakt içinde kaldıkça model şişer, tekrarlar artar ve filtre mantığı zorlaşır. Bu alanları boyut tablolarına taşıyarak hem model boyutunu küçültür hem de tekil değer avantajı elde edersiniz.

Boyut tablo tasarımı: Filtreleme ve anlam katmanı

Boyut tabloları, kullanıcıların raporda gördüğü “anlamlı” alanların evidir: ürün adı, marka, müşteri segmenti, bölge, tarih hiyerarşisi gibi. Boyut tablolarda hedef, mümkün olduğunca tekil (unique) anahtarlar, okunabilir nitelikler ve tutarlı hiyerarşiler sağlamaktır.

Surrogate key ve natural key yaklaşımı

Kurumsal veri ambarı mantığında çoğu senaryoda surrogate key (türetilmiş sayısal anahtar) tercih edilir. Ancak Power BI’da kaynak sistem natural key ile geliyorsa ve tekillik güvenilir biçimde sağlanıyorsa, dönüşüm maliyetini artırmadan natural key kullanılabilir. Kritik olan, boyut tablonun “1” tarafında gerçekten tekil bir anahtar sunmasıdır.

Rol yapan boyutlar: Tek tarih tablosuyla çok senaryo

Satış tarihi, sevkiyat tarihi, fatura tarihi gibi farklı zaman perspektifleri olduğunda, aynı tarih boyutunu rol yapan boyut (role-playing dimension) olarak kullanmak en iyi pratiktir. Power BI’da bunun iki yolu vardır: tarih tablosunu kopyalamak (fiziksel) veya DAX’ta USERELATIONSHIP ile pasif ilişkileri ölçülerde etkinleştirmek (mantıksal). Kurumsal standartlarda genellikle tek tarih tablosu + pasif ilişkiler yaklaşımı daha ölçeklenebilir olur.

Modelde bir tarih boyutunun satış tarihi ve sevkiyat tarihi için iki farklı ilişkiyle kullanıldığı senaryo

İlişki yönetimi: Cardinality, filtre yönü ve belirsizliği önleme

Power BI veri modelinde ilişki tasarımı, analitik doğruluğun en hassas noktasıdır. Kardinalite (1:* ya da *:*), ilişki aktif/pasif durumu ve filtre yönü birlikte değerlendirilmelidir. Yıldız şemasında ideal ilişki; boyuttan fakta doğru tek yönlü, 1:* ilişkidir.

Tek yönlü filtre akışı neden güvenlidir?

Tek yönlü filtre; boyutlardan fakta doğru net bir akış oluşturur. Çift yönlü (both) filtreleme ise hızlı çözüm gibi görünse de, özellikle birden fazla fakt tablo veya köprü tablo olduğunda belirsiz filtre yolları (ambiguity) yaratabilir. Bu da bazı görsellerde beklenmedik toplamlar, bazı ölçülerde “neden sonuç değişti?” soruları üretir.

Many-to-many senaryoları: Köprü tablo ile kontrol

Bir müşterinin birden fazla segmente, bir ürünün birden fazla etikete ait olması gibi durumlarda many-to-many kaçınılmaz olabilir. Bu tip senaryolarda doğrudan *:* ilişki kurmak yerine, köprü (bridge) tablo kullanmak ve filtre akışını yönetmek daha doğrudur. Köprü tablo, ilişkiyi deterministik hale getirir ve DAX tarafında daha öngörülebilir sonuçlar üretir.

DAX ölçü tasarımı: “Kolon” değil “ölçü” odaklı düşünmek

Kurumsal raporlamada hedef, hesaplamaları görsel seviyesine yaymak yerine, ortak metrikleri ölçü olarak merkezileştirmektir. Yıldız şeması sayesinde ölçüler daha sade kalır ve doğru filtre bağlamında çalışır. Hesap sütunu (calculated column) ile çözülebilecek bazı senaryolar olsa da, çoğu metrik için ölçü yaklaşımı hem performans hem yönetim açısından daha iyidir.

Temel ölçüler ve oranlar için örnek DAX

-- Toplam Satış
Total Sales :=
SUM ( 'FactSales'[SalesAmount] )

-- Toplam Maliyet
Total Cost :=
SUM ( 'FactSales'[CostAmount] )

-- Brüt Kâr
Gross Profit :=
[Total Sales] - [Total Cost]

-- Brüt Kâr Marjı
Gross Margin % :=
DIVIDE ( [Gross Profit], [Total Sales] )

-- Aktif ilişki yoksa (pasif ilişkiyi ölçüde etkinleştirmek)
Sales by Ship Date :=
CALCULATE (
  [Total Sales],
  USERELATIONSHIP ( 'DimDate'[DateKey], 'FactSales'[ShipDateKey] )
)

Burada dikkat edilmesi gereken iki nokta var: (1) oran hesaplarında DIVIDE kullanarak sıfıra bölme gibi hataları yönetmek, (2) alternatif tarih senaryolarında pasif ilişkiyi ölçü düzeyinde kontrollü biçimde açmak. Böylece model tarafındaki ilişki karmaşası artmadan kullanıcı ihtiyacı karşılanır.

Ölçü isimlendirme ve klasörleme standardı

Kurumsal ekiplerde ölçü sayısı hızla büyür. İsimlendirme standardı (ör. “Sales - Total”, “Sales - Margin %” gibi) ve Display Folder kullanımı, rapor geliştiriciler arasında ortak dil sağlar. Ayrıca aynı metriğin farklı varyantlarının üretilmesini engelleyerek tutarlılığı artırır.

Power Query ile model hazırlığı: Boyutları temizle, fakta odaklan

Yıldız şemasını Power BI Desktop içinde kurarken Power Query (M) tarafı, “modeli raporlama için uygun hale getirme” aşamasıdır. Burada hedef; gereksiz kolonları atmak, veri tiplerini düzeltmek, boyut tablolarını tekilleştirmek ve anahtar alanlarını standardize etmektir. Bu adımlar, hem model boyutunu azaltır hem de DAX’ın daha kolay yazılmasını sağlar.

Örnek Power Query (M): Boyut tablosunu tekilleştirme ve anahtar üretme

let
  Source = Sql.Database("DWH01", "SalesMart"),
  DimCustomerRaw = Source{[Schema="dbo", Item="DimCustomerRaw"]}[Data],
  #"Removed Columns" = Table.RemoveColumns(DimCustomerRaw, {"Phone2", "Fax", "LegacyCode"}),
  #"Trim Text" = Table.TransformColumns(#"Removed Columns", {{"CustomerName", Text.Trim, type text}, {"Segment", Text.Trim, type text}}),
  #"Filtered Rows" = Table.SelectRows(#"Trim Text", each [IsActive] = true),
  #"Distinct Customers" = Table.Distinct(#"Filtered Rows", {"CustomerNaturalKey"}),
  #"Added Key" = Table.AddIndexColumn(#"Distinct Customers", "CustomerKey", 1, 1, Int64.Type),
  #"Reordered Columns" = Table.ReorderColumns(#"Added Key", {"CustomerKey","CustomerNaturalKey","CustomerName","Segment","Country","City"})
in
  #"Reordered Columns"

Bu örnekte veri setine göre değişebilecek bir yaklaşım görülüyor: natural key üzerinden tekilleştirme, gereksiz kolonları kaldırma ve surrogate key üretme. Eğer kurumunuzda anahtar yönetimi veri ambarında çözülüyorsa, burada index ile key üretmek yerine mevcut surrogate key’i taşımak daha doğru olabilir.

Power Query ekranında müşteri boyutunun kolon azaltma ve tekilleştirme adımlarıyla sadeleştirildiği akış

Performans: Model boyutu, ilişki sayısı ve ölçü maliyeti

Power BI performansı sadece görsel sayısı ile ilgili değildir. Asıl belirleyiciler; modelin sıkıştırılabilirliği, kolon kardinalitesi, ilişki sayısı, hesaplamaların karmaşıklığı ve sorguların storage engine / formula engine dengesidir. Yıldız şeması, bu parametrelerin çoğunda doğal avantaj sunar.

Performansı en çok etkileyen 7 pratik kural

  • Gereksiz kolonları modelden kaldırın; özellikle yüksek kardinaliteli metin alanlarını boyutlara taşıyın.
  • Boyut anahtarlarını sayısal tutun; metin anahtarlar sıkıştırmayı zayıflatır.
  • Çift yönlü filtreyi “varsayılan çözüm” olarak kullanmayın; belirsizlik ve maliyet üretir.
  • Ölçüleri sade tutun; tekrar eden CALCULATE zincirleri yerine temel ölçülerden türetin.
  • Yüksek detaylı faktları ayrı tutun; raporda gerekmeyen granülerlik model boyutunu büyütür.
  • Gerekiyorsa agregasyon tabloları ile hızlı özet sorguları destekleyin.
  • Modeli büyütmeden önce kullanım senaryolarını netleştirin: hangi kırılımlar gerçekten kullanılıyor?

Composite model ve DirectQuery kullanırken yıldız şeması

Composite model veya DirectQuery senaryolarında da yıldız şeması mantığı geçerlidir. Ancak burada ek olarak veri kaynağındaki indeksler, ilişki alanlarının veri tipleri ve sorgu itme (query folding) gibi unsurlar önem kazanır. Boyutların mümkün olduğunca Import, faktın DirectQuery olduğu hibrit kurgular, belirli durumlarda iyi bir denge sunabilir; ama yönetimi daha dikkat ister.

Yaygın hatalar ve hızlı düzeltmeler: Sahada en çok görülenler

Kurumsal ekiplerde tekrar tekrar karşılaşılan bazı hatalar var. Bunlar genellikle “hızlı bir rapor çıkarma” baskısı ile başlıyor ve zamanla teknik borca dönüşüyor. Aşağıdaki maddeler, mevcut modelinizi değerlendirirken iyi bir başlangıç noktasıdır.

Fakt içine boyut alanı koymak

Müşteri adı, ürün adı gibi nitelikler fakt içinde kaldığında, hem model büyür hem de ilişki tarafında “tek kaynak” bozulur. Çözüm: bu nitelikleri boyuta taşıyın, fakt içinde sadece anahtarlar kalsın.

Birden fazla tarih tablosu ile tutarsız zaman analizi

Farklı sayfalarda farklı tarih tabloları kullanmak, aynı KPI’ın farklı sonuç üretmesine yol açar. Çözüm: tek tarih boyutu standardı ve gerektiğinde pasif ilişki + USERELATIONSHIP yaklaşımı.

Many-to-many’yi doğrudan ilişkiyle çözmeye çalışmak

Doğrudan *:* ilişki, bazı basit durumlarda çalışsa da kurumsal senaryolarda hızla kontrol kaybı yaratır. Çözüm: köprü tablo, doğru ilişki yönü ve ölçü bazlı hesaplama stratejisi.

Uygulanabilir bir kontrol listesi: Modeli yayına almadan önce

Modeli “yayına hazır” saymadan önce kısa bir kontrol listesi, özellikle ekip içi kaliteyi yükseltir. Aşağıdaki liste, yıldız şeması yaklaşımını operasyonel hale getirmek için pratik bir çerçeve sunar.

Yayın öncesi kontrol listesi

  1. Her fakt tablonun grain’i yazılı olarak tanımlandı mı?
  2. Her boyut tablo “1” tarafında tekillik sağlıyor mu?
  3. İlişkiler çoğunlukla 1:* ve tek yönlü mü?
  4. Ölçüler temel metriklerden türetiliyor mu, tekrar eden hesaplar azaltıldı mı?
  5. Modelden gereksiz kolonlar kaldırıldı mı, veri tipleri doğru mu?
  6. Alternatif tarih senaryoları pasif ilişki + ölçü ile yönetiliyor mu?
  7. Rapor sayfaları örnek kullanıcı senaryolarıyla doğrulandı mı?

Özetle: Power BI’da analitik doğruluk ve hız, çoğu zaman DAX maharetinden önce veri modeli disiplinine bağlıdır. Yıldız şeması; kurumsal raporlamada sürdürülebilirlik, performans ve ortak metrik dili için en sağlam temel yaklaşımdır. Modeli basit, ilişkileri deterministik ve ölçüleri yeniden kullanılabilir tuttuğunuzda; raporlarınız hem daha hızlı açılır hem de karar vericilerin güvenini daha kolay kazanır.

 OFİS DATA