İki tür tablo
| Olgu (fact) tablosu | Boyut (dimension) tablosu | |
|---|---|---|
| Ne tutar? | Olayları ve sayıları: satış satırı, ödeme, ziyaret | Olayları tanımlayan nitelikleri: ürün, müşteri, tarih |
| Satır sayısı | Çok (milyonlar) | Az (yüzler, binler) |
| Sütunlar | Anahtarlar + sayısal değerler | Tek bir anahtar + metin nitelikler |
| Bu modelde | Satislar, Hedefler | Urunler, Musteriler, Tarih, Kategoriler |
Yıldız şema
Olgu tablosu ortada durur, boyutlar çevresinde dizilir. Her boyut olguya bire-çok (1:*) ilişkiyle bağlanır: bir ürünün çok satış satırı vardır. Diyagram bir yıldıza benzer. Anadolu Market modeli sayfasında bu modelin diyagramını görebilirsin.
Urunler süzülür → ilişki üzerinden Satislar yalnızca kitap satırlarına iner → ölçü bu satırlar üzerinde hesaplanır. Tablolar az, ilişkiler net olduğunda hem DAX basitleşir hem motor hızlanır.İlişkinin özellikleri
- Kardinalite: Bire-çok (en yaygın ve önerilen), bire-bir (genelde iki tablonun birleştirilmesi gerektiğine işaret), çoka-çok (dikkatli kullanılmalı).
- Çapraz filtre yönü: Tek (boyuttan olguya; varsayılan ve önerilen) ya da Her ikisi (çift yönlü; belirsizlik ve performans sorunu yaratabilir).
- Etkin / pasif: İki tablo arasında yalnızca bir ilişki etkin olabilir. Pasif ilişkiler kesik çizgiyle görünür ve DAX'ta
USERELATIONSHIPile çağrılır (ör. Sipariş Tarihi ve Teslim Tarihi).
Anahtarlar
Boyut tablosundaki anahtar (Urunler[UrunNo]) benzersiz olmalıdır. Olgu tablosundaki yabancı anahtar (Satislar[UrunNo]) tekrar edebilir. Boyut anahtarında tekrar varsa Power BI ilişkiyi çoka-çok yapar; bu genellikle veride bir sorun olduğunu gösterir.
Kaçınılacak desenler
- Tek dev tablo: Her şeyi tek tabloya birleştirmek ilk başta kolay gelir ama DAX'ı zorlaştırır ve modeli şişirir.
- Kar tanesi (snowflake) aşırılığı: Boyutu boyuta, onu da başka boyuta bağlamak. Mümkünse Power Query'de boyutları düzleştir. (Bu modeldeki
Kategorilerbilinçli bir istisnadır, derslerde kategori eksenini hepKategoriler[Kategori]’den alırız;Urunler[Kategori]ilişki anahtarıdır: hem ürünleri hem hedefleri bağlayan ortak bir boyut.) - Gereksiz çift yönlü ilişkiler.
Kardinaliteyi veriyle oku
Kardinalite, bir ilişkinin iki ucunda kaç satırın eşleştiğini söyler. Ezberlemek yerine veriye bakarak bulabilirsin. Urunler ile Satislar ilişkisini ele alalım:
| Soru | Urunler[UrunNo] | Satislar[UrunNo] |
|---|---|---|
| Kaç satır? | 40 | 1.620 |
| Kaç farklı değer? | 40 (her ürün bir kez) | 38 (ürünler tekrar ediyor) |
| Sonuç | “Bir” tarafı | “Çok” tarafı |
Satır sayısı ile farklı değer sayısı eşitse o sütun benzersizdir ve ilişkinin bir tarafı olabilir. Satislar'da 38 farklı ürün var; demek ki katalogdaki iki ürün hiç satılmamış. Bu bir hata değil, bir bilgidir. Model görünümünde ilişki çizgisinin ucunda 1 ve * işaretleri bu durumu gösterir.
Kontrol etmenin kolay yolu: Tablo görünümünde sütunu seç; Power Query'de ise Görünüm → Sütun profili ile “farklı” ve “benzersiz” sayılarını gör. Boyut tablosunda farklı sayısı satır sayısından azsa yinelenen anahtar vardır ve önce onu temizlemen gerekir.
Filtre yönünü bir örnekle izle
İlişkiler tek yönlüyken filtre bir tarafından çok tarafına akar. Bunu iki basit ölçüyle görebilirsin:
Katalog Ürün Sayısı = COUNTROWS(Urunler) Satılmış Ürün Sayısı = DISTINCTCOUNT(Satislar[UrunNo])
| Kırılım | Katalog Ürün Sayısı | Satılmış Ürün Sayısı | Neden? |
|---|---|---|---|
| Kategori: Elektronik | 8 | 8 | Kategoriler → Urunler → Satislar yolu var; ikisi de süzülür. |
| Kategori: Hediye | 2 | 1 | İki hediye ürününden biri hiç satılmamış. |
| Yıl: 2022, 2023, 2024 | 40, 40, 40 | 36, 38, 38 | Tarih yalnızca Satislar'ı süzer; Urunler'e geri akmaz. |
| Segment: Premium | 40 | 38 | Musteriler → Satislar akar, Satislar → Urunler akmaz. |
“Premium müşterilerin aldığı ürün sayısı” isteniyorsa yanlış yol ilişkiyi çift yönlü yapmaktır. Doğru yol, sayımı olgu tablosu üzerinden yapmaktır: DISTINCTCOUNT(Satislar[UrunNo]). Olgu tablosu her boyuttan filtre alır; sayımı orada yaparsan çift yönlü ilişkiye ihtiyaç kalmaz.
İlişkiyi adım adım kurmak
- Model görünümünde bir tarafındaki sütunu (Urunler[UrunNo]) çok tarafındaki sütunun (Satislar[UrunNo]) üzerine sürükle.
- Açılan pencerede kardinaliteyi (Bire çok), çapraz filtre yönünü (Tek) ve “Bu ilişkiyi etkin yap” kutusunu kontrol et.
- İki sütunun veri türü aynı olmalı. Biri metin “27”, diğeri tam sayı 27 ise ilişki kurulmaz ya da eşleşme olmaz; türü Power Query'de eşitle.
- Kurduktan sonra bir tablo görselinde Kategoriler[Kategori] ile [Net Satış]'ı yan yana koy; boş (BLANK) bir kategori satırı görürsen olgu tablosunda boyutta karşılığı olmayan anahtarlar var demektir.