Gerçek bir raporda veri tek yerden gelmez. Anadolu Market’te satış satırları şirket içindeki SQL Server’da, hedefler finansın SharePoint’teki Excel dosyasında, bayi raporları ortak klasördeki CSV’lerde, döviz kuru ise merkez bankasının sitesinde. Birden çok kaynağı bağlamak kolaydır; zor olan, hangi işi nerede yapacağına karar vermektir. Bu ders dört kaynağı tek modele indirirken sorulması gereken soruları ve yanlış kararın sonuçlarını anlatır.
Üç yol: ekle, birleştir, ilişkilendir
| Yol | Ne yapar? | Ne zaman? | Yanlış kullanılırsa |
|---|---|---|---|
| Sorguları ekle (Append) | Aynı yapıdaki tabloları alt alta koyar; satır sayısı artar. | Ocak ve Şubat dosyaları, şube dosyaları | Sütun adı farklıysa (“Şehir” ve “Sehir”) iki sütun oluşur, boşluklar null kalır. |
| Sorguları birleştir (Merge) | Bir anahtarla yan yana getirir; sütun sayısı artar. | Boyutu düzleştirmek, olguya tek bir öznitelik eklemek | Sağ tabloda anahtar yinelenirse satırlar çoğalır, toplamlar şişer. |
| Model ilişkisi | Tablolar ayrı kalır; filtre ilişkiden akar. | Olgu ve boyut, farklı taneciklikte hedef tablosu | Anahtar türleri uyuşmazsa ilişki kurulmaz; yetim satırlar boş satırda toplanır. |
Kural: yeni bir olgu satırı geliyorsa ekle; bir boyutu ya da özniteliği tamamlıyorsan önce model ilişkisini düşün, ancak tablo gerçekten tek bir boyuta inecekse birleştir. Yıldız şemanın nedeni “Veri modelleme” dersinde. Join türleri “Power Query: join türleri, dizin sütunu ve gruplu sıra” dersinde.
Önce temizle, sonra birleştir
Merge eşleşmesi büyük/küçük harfe ve boşluğa duyarlıdır. Bayi raporunda “ ANKARA ” yazıyorsa SharePoint listesindeki “Ankara” ile eşleşmez; sorgu hata vermez, sütun sessizce null gelir. Bu en sık yapılan çoklu kaynak hatasıdır: rapor açılır, görünür hiçbir sorun yoktur, ama bölge kırılımında büyük bir “(Boş)” satırı çıkar.
- İki taraftaki anahtarın türünü eşitle (metin ve sayı karışmasın).
- Kırp, harf biçimini tekleştir, görünmeyen karakterleri temizle.
- Sağ tablonun anahtarını yinelenenlere karşı kontrol et.
- Birleştirmeden sonra eşleşmeyen satırları say: sol karşıt (left anti) birleştirme tam bu sayıyı verir.
Power Query Lab’de bu akışı gerçekten yapacaksın: alıştırmalarda ikinci kaynak olarak SharePoint listesi ve Şubat CSV dosyası var.
Gizlilik düzeyi ve Formula.Firewall
Farklı kaynaklı iki sorgu birleşince Power Query bir kaynağın verisini ötekine gönderebilir. Gizlilik düzeyleri (Özel, Kuruluş, Genel) bunu sınırlar; ayarın yeri “Veri alma ve bağlantı modları” dersinde. Üç sonuç genelde atlanır:
- Sorgu katlama kırılabilir. Özel düzeyli bir CSV ile SQL Server tablosu birleşiyorsa motor filtreyi SQL’e gönderemez; bütün tabloyu çeker, sonra yerelde birleştirir. Yenileme yavaşlar.
- Masaüstü ayarı Service’e taşınmaz. Microsoft Learn, Desktop’taki gizlilik ayarlarının yayımlanmadığını söyler. Yayımdan sonra anlam modeli ayarlarında (ağ geçidi varsa ağ geçidi bağlantısında) yeniden ver.
- “Yok say” Service’te seni kurtarmaz. Desktop’ta gizlilik düzeylerini yok sayarak çalışan sorgu Service’te hata verebilir.
Yenileme açısından çoklu kaynak
Her kaynağın yenileme yolu farklıdır, ama bir anlam modeli yalnız bir ağ geçidi bağlantısı kullanır. Aynı sorguda şirket içi SQL ile SharePoint Online birleşiyorsa bulut kaynağı da ağ geçidinden geçmek zorundadır: ağ geçidinde bulut kaynağı için bir veri kaynağı tanımı eklenir ya da “kullanıcının bulut veri kaynaklarının bu ağ geçidi kümesinden yenilenmesine izin ver” seçeneği açılır. Ayrıntı “On-premises data gateway” dersinde.
| Kaynak | Kimlik bilgisi nerede? | Ağ geçidi? |
|---|---|---|
| Şirket içi SQL Server | Ağ geçidi bağlantısı | Evet |
| SharePoint Online Excel | Anlam modeli ayarları, Veri kaynağı kimlik bilgileri | Hayır (aynı sorguda şirket içiyle birleşiyorsa evet) |
| Ağ klasöründeki CSV | Ağ geçidi bağlantısı | Evet |
| Web sayfası | Anlam modeli ayarları | Hayır |
Pratik sonuç: ağ klasöründeki dosyayı SharePoint’e taşımak çoğu zaman bir ağ geçidi bağımlılığını ortadan kaldırır. Dinamik adresli kaynaklar da Service’te yenilenmeyebilir; web kaynağında Web.Contents ile RelativePath ya da Query kullan.
Bileşik model ne zaman?
Her kaynağı Import etmek zorunda değilsin. Satışlar DirectQuery, hedefler Import olabilir; bu bir bileşik modeldir. Ama farklı kaynak gruplarındaki tablolar arasındaki ilişki sınırlı ilişki olur. Tablo tablo karar “Kurumsal model” dersinde. Başlangıç kuralı: veri yeterince küçükse hepsini Import et, karmaşıklığı ancak bir gereksinim zorlarsa ekle.
Kaynaklar arası mutabakat
İki kaynak birleşince “hangi sayı doğru?” sorusu çıkar. Excel’den gelen bir tabloyu modele bağlamadan önce DAX sorgu görünümünde sınayabilirsin. Aşağıdaki sorgu, Excel’den gelmiş gibi küçük bir hedef tablosunu sanal ilişkiyle (TREATAS) modele bağlar:
EVALUATE
VAR ExcelHedef =
DATATABLE("Kategori", STRING, "Plan", INTEGER, {{"Kitap", 150000}, {"Elektronik", 350000}, {"Giyim", 200000}})
RETURN
ADDCOLUMNS(ExcelHedef, "Net", CALCULATE([Net Satış], TREATAS({[Kategori]}, Kategoriler[Kategori])))
Sonuçta Kitap 151.882 ₺, Elektronik 339.304 ₺ gelir. Excel’de “Kitaplar” yazsaydı o satır boş kalırdı; sorun rapora çıkmadan görülürdü.