“Veri alma ve bağlantı modları” dersinde İçeri aktarma ile DirectQuery farkını gördük. Bu ders bir bağlantının yaşam döngüsüne bakıyor: Desktop’ta nasıl kurulur, hangi bilgileri saklar ve rapor yayımlandıktan sonra Service’te neden bazen yenilenmez.
Verinin yolculuğu ve üç dil
- Kaynak: SQL Server, Excel, SharePoint, bir API…
- Power Query: verinin alınması ve temizlenmesi. Dil: M.
- Anlam modeli (semantic model): tablolar, ilişkiler, ölçüler. Dil: DAX.
- Rapor: görseller ölçüleri çağırır.
- Service (Power BI Service): yayımlanan model zamanlanmış olarak yenilenir, rapor paylaşılır.
| Dil | Nerede çalışır? | Ne için? |
|---|---|---|
| SQL | Kaynak veritabanında | Veriyi kaynağında süzmek, birleştirmek. Power Query çoğu adımı kendisi SQL’e çevirir (sorgu katlama); istersen elle de yazarsın. |
| M | Power Query’de, yenileme sırasında | Bağlanmak, şekillendirmek, temizlemek. |
| DAX | Modelde, rapor açıkken | Ölçüler, hesaplanmış tablolar ve sütunlar, güvenlik kuralları. |
Bir veritabanına bağlanmak
Veri al → SQL Server veritabanı penceresi şunları ister:
- Sunucu:
sql01.sirket.localya da bir bulut adresi. Bağlantı noktası gerekiyorsa sunucu adına eklenir. - Veritabanı (isteğe bağlı): boş bırakırsan gezgin sunucudaki tüm veritabanlarını listeler.
- Veri bağlantısı modu: İçeri aktar ya da DirectQuery.
- Gelişmiş seçenekler (Advanced options): komut zaman aşımı (varsayılan 10 dakika), SQL deyimi, ilişki sütunlarını ekle, tam hiyerarşiyle gezin.
İlk bağlantıda kimlik doğrulama türü sorulur: Windows, Veritabanı (kullanıcı adı ve parola) ya da kuruluş hesabı (Microsoft Entra ID). Kimlik bilgisi .pbix dosyasına yazılmaz; bilgisayarındaki Veri kaynağı ayarları’nda saklanır. Dosyayı bir meslektaşına gönderirsen o da kendi kimliğiyle bağlanır. Bağlantı şifreli değilse Desktop bir uyarı gösterir; mümkünse sunucu tarafında şifrelemeyi açtır.
let
Kaynak = Sql.Database("sql01.sirket.local", "SatisDB"),
Satislar = Kaynak{[Schema = "dbo", Item = "Satislar"]}[Data]
in
Satislar
Gezgin mi, yerel SQL sorgusu mu?
Gezginden (Navigator) tablo seçip Power Query’de filtrelemek ile Gelişmiş seçenekler → SQL deyimi kutusuna hazır bir sorgu yapıştırmak aynı veriyi getirebilir. Fark sonraki adımlarda ortaya çıkar.
| Gezgin + Power Query adımları | Yerel SQL sorgusu (native query) | |
|---|---|---|
| Sorgu katlama | Filtre, sütun seçme, gruplama kaynağa gönderilir. | Klasik yöntemde sonraki adımlar katlanmaz; hepsi Power Query’de, yerelde çalışır. |
| Bakım | Adımlar görünür ve tıklanarak düzenlenir. | SQL metni tek bir adımda; değişiklik için SQL bilmek gerekir. |
| Güvenlik | Ek onay yok. | Gelişmiş Düzenleyici’den eklenen ya da değiştirilen yerel sorgu için onay istenir. |
| İyi olduğu yer | Çoğu senaryo. | Veritabanı ekibinin optimize ettiği karmaşık bir sorgu ya da saklı yordam çağrısı. |
Yerel sorgu kullanman gerekiyorsa katlamayı korumanın bir yolu vardır: Value.NativeQuery fonksiyonunu EnableFolding = true seçeneğiyle çağırmak. Bu, SQL Server, PostgreSQL, Snowflake, Google BigQuery gibi bazı bağlayıcılarda desteklenir; sonraki filtre adımı senin sorgunu bir alt sorgu olarak sarar.
let
Kaynak = Sql.Database("sql01.sirket.local", "SatisDB"),
Sorgu = Value.NativeQuery(Kaynak,
"SELECT SiparisNo, Tarih, UrunNo, Tutar FROM dbo.Satislar WHERE Durum <> 'İptal'",
null, [EnableFolding = true]),
Son2Yil = Table.SelectRows(Sorgu, each [Tarih] >= #date(2023, 1, 1))
in
Son2Yil
Parametreli bağlantı
“Power Query ile modele hazırlık” dersindeki parametreleri bağlantı bilgisine uygula: sunucu adını ve veritabanını metin parametresi yap. Geliştirme sırasında test sunucusunu, yayımladıktan sonra üretim sunucusunu kullanırsın; M koduna dokunmazsın.
let
Kaynak = Sql.Database(SunucuAdi, VeritabaniAdi),
Satislar = Kaynak{[Schema = "dbo", Item = "Satislar"]}[Data]
in
Satislar
Service’te parametre değeri anlam modelinin ayarlarından değiştirilebilir; dağıtım işlem hatlarında (deployment pipelines) her aşama için ayrı değer veren kurallar tanımlanır.
Desktop’tan Service’e: neden yenilenmiyor?
Yayımladığında Service’e model, veri ve M kodu gider; kimlik bilgileri gitmez. Zamanlanmış yenilemenin çalışması için Service’in kaynağa ulaşabilmesi ve oturum açabilmesi gerekir:
- Bulut kaynağı (Azure SQL, SharePoint Online): anlam modeli ayarlarında Veri kaynağı kimlik bilgileri’ni gir ya da “Bağlantıları ve ağ geçitlerini yönet” sayfasındaki bir bulut bağlantısını seç.
- Şirket içi kaynak (ofisteki SQL Server, ağ klasöründeki Excel): şirket içi veri ağ geçidi (on-premises data gateway) gerekir. Kimlik bilgilerini ağ geçidi yöneticisi tanımlar; senin hesabın o veri kaynağının kullanıcı listesinde olmalı. Kişisel mod ağ geçidi yalnızca tek kullanıcı içindir.
- Gizlilik düzeyleri: farklı kaynakları birleştiren sorgularda Service de gizlilik düzeylerine (Özel, Kuruluş, Genel) uyar; Desktop’ta çalışan birleştirme Service’te bu yüzden hata verebilir.
Bağlantı hatalarını okumak
| Belirti | Olası neden | Ne yapılır? |
|---|---|---|
| “Kimlik bilgileri geçersiz” ya da oturum açma hatası | Parola değişti, hesap kilitlendi, yanlış kimlik doğrulama türü | Veri kaynağı ayarlarında (Service’te model ayarlarında) kimliği güncelle. |
| “Ağla ilgili ya da örneğe özgü bir hata” (network-related error) | Sunucu adı yanlış, güvenlik duvarı, VPN kapalı, Service’te ağ geçidi yok | Sunucuya ağdan erişimi kontrol et; buluttaki kaynakta istemci IP’sine izin ver; şirket içinde ağ geçidi kur. |
Expression.Error: “…sütunu bulunamadı” | Kaynakta şema değişti: sütun silindi ya da yeniden adlandırıldı | Hata veren adımı bul; sütun adını düzelt ya da “Diğer sütunları kaldır” ile yalnızca gerekenleri seç. |
| Service’te “ağ geçidi çevrimdışı” | Ağ geçidinin kurulu olduğu makine kapalı | Makineyi ya da ağ geçidi kümesini çalıştır. |
Kaynak taşındığında (yeni sunucu, yeni dosya yolu) Dönüştür → Veri kaynağı ayarları → Kaynağı değiştir ile tüm sorgulardaki bağlantı bir kerede güncellenir. Tek bir sorguda ise Kaynak adımındaki sunucu adını Gelişmiş Düzenleyici’de değiştirmen yeter; sonraki adımlar aynı tablo yapısını bulduğu sürece çalışır.
Artımlı yenileme: kısa bir bakış
Milyonlarca satırlık bir olgu tablosunu her gece baştan yüklemek yerine yalnızca son günleri yenilemek mümkündür. Bunun için RangeStart ve RangeEnd adlı iki tarih/saat parametresiyle tabloyu filtreler ve tabloya bir yenileme ilkesi tanımlarsın. Filtrenin kaynağa katlanması şarttır; yerel SQL sorgusu bu yüzden burada risklidir. Ayrıntılar “Kurumsal model” dersinde.
ERP ve kurumsal veri tabanı kaynakları
İş ilanlarında sık geçer. Kısa karar özeti:
| Kaynak | Bağlayıcı | Dikkat |
|---|---|---|
| PostgreSQL | PostgreSQL.Database, Import ve DirectQuery | Desktop ve ağ geçidi Npgsql’i içerir. Yerel sorguda katlama varsayılan açıktır; Value.NativeQuery isteğe bağlı parametre alırsa katlanmaz. |
| Oracle | Oracle.Database, Import ve DirectQuery | Oracle 12c (12.1.0.2) ve sonrası. Güncel Desktop ve ağ geçidinde yerleşik sürücü var. Kişisel ağ geçidi desteklenmez, kurumsal ağ geçidi gerekir. |
| SAP HANA, SAP BW | Adanmış bağlayıcılar (SAP HANA database, SAP Business Warehouse) | SAP’nin hazır analitik görünümlerini ya da BW sorgularını okumak çoğu zaman ham tablolardan daha doğrudur. Lisans ve yetkiyi SAP ekibiyle netleştir. |
| Oracle ERP | Oracle ERP (önizleme) bağlayıcısı listede | Önizleme: üretimde kullanmadan önce sınırlarını oku. |
| Logo, Netsis, Mikro gibi yerel ERP’ler | Power Query bağlayıcı listesinde adanmış bağlayıcı görmedik (Kasım 2026) | Pratikte erişim çoğu kurulumda arkadaki veri tabanından ya da üreticinin raporlama yolundan olur. Tablo yapısını, lisans koşulunu ve okuma yetkisini üreticiden ve BT’den doğrula. Bu cümle bizim saha gözlemimizdir, resmî belge değildir. |
Üç kural. ERP’nin canlı işlem tablolarına ağır sorgu atma: mümkünse salt okunur kopya, rapor görünümü ya da ambar kullan. Ham tabloyu değil, ERP ekibinin onayladığı görünümü oku. Fatura ve iade mantığını kendin yeniden kurarken Finans’ın rakamıyla mutabakat yap.