
Yazar: @atilayberber
Yüz measure’ı yeniden adlandırmak, modelin tamamına açıklama yazmak ya da her şeyi başka bir dile çevirmek. Bu işler eskiden bir öğleden sonranızı alıyordu. Artık tek bir cümleyle bir yapay zekâ ajanına yaptırabiliyorsunuz.
Bunu mümkün kılan şey Microsoft’un Power BI Authoring MCP Server‘ı. GitHub’daki ve npm’deki adıyla powerbi-modeling-mcp. Local sürümü genel kullanımda (GA), Fabric üzerinde barındırılan sürümü ise önizlemede.
Bu rehberde sadece “ne yapar” sorusunda kalmıyorum. Mimarisini, üç farklı kurulum yolunu, dağınık bir modeli uçtan uca toparladığımız bir örnek oturumu, iyi prompt yazma kalıplarını, transaction ve trace araçlarını, kurumsal yönetişimi ve en sık karşılaşılan hataları ele alıyorum.
Kısaca: Bu yazıda neler var?
- Ajanik Power BI geliştirmenin parçaları: MCP sunucusu, skill’ler, plugin ve Desktop Bridge
- Authoring MCP Server’ın 21 araçlık araç kutusu
- Hosted mı local mi: karar rehberi
- Üç kurulum yolu: VS Code eklentisi, hosted URL,
powerbi-authoringplugin - Uçtan uca örnek: devralınan bir satış modelini 7 adımda toparlamak
- İyi prompt yazmanın 6 kalıbı ve hazır prompt kütüphanesi
- Güvenlik, yönetişim, sınırlar ve sorun giderme
MCP nedir, neden önemli?
Model Context Protocol (MCP), yapay zekâ asistanlarının dış araçlara ve veriye standart bir yoldan bağlanmasını sağlayan açık bir protokol. Üç rol var:
- Host: Ajanı çalıştıran uygulama. Örneğin VS Code.
- Client: Host’un içinde MCP sunucularına bağlanan bileşen. Örneğin GitHub Copilot.
- Server: Araçları sunan program. Burada bu rolü Power BI üstleniyor.
Fark şu: Klasik Copilot size DAX önerir, siz kopyalayıp yapıştırırsınız. MCP ile çalışan bir ajan ise modelinize bağlanır, değişikliği kendisi yapar, ardından bir DAX sorgusuyla sonucu test eder. Siz de her adımı onaylarsınız.
Ajanik Power BI geliştirmenin dört parçası
Microsoft bu alanı tek bir araç olarak değil, birlikte çalışan bir set olarak kurguluyor. Parçaları ayırt etmek, hangisine neden ihtiyaç duyduğunuzu anlamayı kolaylaştırıyor:
| Parça | Ne işe yarar? | Benzetme |
|---|---|---|
| Authoring MCP Server | Modele bağlanır, nesneleri okur ve değiştirir, DAX çalıştırır | Eller |
Agent skill’leri (semantic-model-authoring vb.) | Ajana modelleme en iyi uygulamalarını, iş akışlarını ve kontrol listelerini öğretir | Uzmanlık |
powerbi-authoring plugin | Skill’leri ve MCP sunucusunu tek pakette kurar | Alet çantası |
| Power BI Desktop Bridge | Çalışan Desktop ile konuşur; modeli yeniden yükleme, ekran görüntüsü alma gibi işler | Köprü |
Microsoft’un kendi ifadesiyle: skill’ler ajana ne yapacağını, araçlar ise nasıl yapacağını söyler. Sadece MCP sunucusuyla da çalışabilirsiniz. Ama skill’ler eklendiğinde ajan, örneğin bir modeli analiz ederken bulguları önem derecesine göre gruplayan hazır bir iş akışı izliyor.
Bir de tüketim tarafı var: Son kullanıcıların modele doğal dille soru sorması için Microsoft, RLS ve OLS kurallarına uyan Fabric IQ MCP sunucusunu öneriyor. Kısacası Authoring MCP modeli kuran kişi için, Fabric IQ o modele soru soran herkes için.
Araç kutusu: 21 araç, tek modelleme yüzeyi
Sunucu, araçlarını nesne tipine göre grupluyor. Ajan hangi aracı çağıracağına kendisi karar veriyor, ama neyin mümkün olduğunu bilmek daha iyi prompt yazmanızı sağlıyor:
| Alan | Araçlar | Örnek işlemler |
|---|---|---|
| Bağlantı ve model | connection, database, model | Desktop’a veya Fabric’e bağlanma, TMDL içe/dışa aktarma, Fabric’e deploy, model istatistikleri |
| Temel nesneler | table, column, measure, relationship | Oluşturma, güncelleme, silme, yeniden adlandırma, measure’ı tablolar arası taşıma, ilişki aktif/pasif |
| İleri modelleme | calculation_group, function, calendar, user_hierarchy, perspective | Calculation group, DAX kullanıcı tanımlı fonksiyonları (UDF), takvim ve zaman zekâsı grupları |
| Power Query | named_expression, query_group, partition | Parametreler, sorgu grupları, partition bazlı refresh |
| Güvenlik ve dil | security_role, culture, object_translation | RLS rolleri, kültürler ve nesne çevirileri |
| Test ve performans | dax_query, trace, transaction | DAX çalıştırma/doğrulama, Analysis Services olaylarını izleme, begin/commit/rollback |
Sunucuda ayrıca hazır gelen promptlar var: CreateDAXQuery, RunDAXQueryWithMetrics, AnalyzeDAXQuery, ConnectToPowerBIDesktop, ConnectToFabric ve ConnectToPBIP. Özellikle AnalyzeDAXQuery, sorguyu önbelleği temizleyerek çalıştırıp performans metriklerini yorumluyor.
Hosted mı, local mi?
Tek sunucu, iki dağıtım seçeneği var:
| Hosted (önizleme) | Local (GA) | |
|---|---|---|
| Kurulum | Yok, sadece URL eklenir | VS Code eklentisi, npm paketi veya .exe |
| Güncelleme | Microsoft yönetir | Siz güncellersiniz |
| Kimlik doğrulama | Entra ID (oturum açan kullanıcı) | Entra ID veya service principal |
| Fabric workspace’teki modeller | Evet | Evet |
| Power BI Desktop’ta açık model | Hayır | Evet |
| Diskteki PBIP/TMDL dosyaları | Hayır | Evet |
| Transaction ve trace | Hayır | Evet |
| macOS | Evet | Hayır |
Karar rehberi:
- Desktop ve PBIP ile, Git üzerinden çalışıyorsanız: local.
- Sadece Fabric’teki modellerle çalışıyor, kurulum ve bakım istemiyorsanız: hosted.
- Mac kullanıyorsanız: hosted (local sürüm macOS’ta desteklenmiyor).
- CI/CD veya otomasyon içinde service principal ile çalışacaksanız: local.
Hangisini seçerseniz seçin, ikisini aynı anda kaydetmeyin. Araçlar çakışır, ajan hangisini çağıracağını karıştırır ve token maliyeti artar.
Kurulum: üç yol
Yol 1: VS Code eklentisi (local, en kolayı)
- VS Code’a GitHub Copilot Chat eklentisini kurun ve sohbeti Agent moduna alın.
- Extensions’ta “Power BI Modeling MCP” eklentisini kurun (
analysis-services.powerbi-modeling-mcp). - Copilot sohbetinde araç listesinde
powerbi-modeling-mcp‘nin göründüğünü kontrol edin. Kurumsal hesaplarda “MCP servers in Copilot” ayarını yöneticinin açması gerekebilir.
Eklenti yerine npm paketini kullanmak isterseniz (Node.js gerekir), MCP yapılandırmanıza şunu ekleyin:
{
"servers": {
"powerbi-authoring-local": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@microsoft/powerbi-modeling-mcp@latest", "--start"]
}
}
}
Yol 2: Hosted sunucu (kurulum yok)
MCP ayarlarınıza aşağıdaki sunucuyu ekleyin. İlk komutta Microsoft Entra ile giriş yaparsınız ve sunucu sizin yetkilerinizle çalışır:
{
"servers": {
"powerbi-authoring-remote": {
"type": "http",
"url": "https://api.fabric.microsoft.com/v1/mcp/powerbi/authoring"
}
}
}
Not: Bazı MCP istemcileri Entra ID’nin desteklemediği dinamik OAuth istemci kaydına dayanıyor. Bu istemciler hosted sunucuya bağlanamıyor. Böyle bir durumda local sunucuyu kullanın veya kendi Entra uygulamanızı kaydedin.
Yol 3: powerbi-authoring plugin (skill’ler + MCP birlikte)
Ajanın sadece araçlara değil, Microsoft’un modelleme rehberlerine de sahip olmasını istiyorsanız plugin’i kurun. GitHub Copilot CLI ve Node.js 18+ gerekir:
copilot plugin marketplace add microsoft/skills-for-fabric
copilot plugin install powerbi-authoring@fabric-collection
Copilot’u başlatıp /skills yazın, semantic-model-authoring listede görünmeli. Sonra bir skill’i doğrudan çağırabilirsiniz:
/semantic-model-authoring Connect to Power BI Desktop and analyze the semantic model against best practices
Skills for Fabric deposu VS Code Copilot, Claude Code, Cursor ve Windsurf gibi diğer ajanlar için de uyumluluk katmanları sunuyor. Skill’ler şu an önizlemede.
Ön koşullar
- Model üzerinde Write yetkisi. Sadece Build yetkiniz varsa DAX sorgusu çalıştırabilir ama modeli değiştiremezsiniz.
- Local sürümle Fabric modellerine yazmak için kapasitede XMLA endpoint Read Write olmalı.
- Hosted sürüm için Fabric yöneticisi “Users can use the Power BI Model Context Protocol server endpoint” tenant ayarını açmalı.
- Derin akıl yürütme yapabilen bir model seçin. Sonucun kalitesi büyük ölçüde buna bağlı.
Uçtan uca örnek: devralınan bir satış modelini 7 adımda toparlamak
Senaryo tanıdık: Bir projeyi devraldınız. Modelde Türkçe-İngilizce karışık isimler, açıklaması olmayan 80 measure ve birbirinin kopyası zaman zekâsı hesapları var. Aşağıdaki oturum, local sunucu ve bir PBIP projesi üzerinden ilerliyor. Promptları İngilizce yazıyorum, çünkü ajan nesne adlarını ve DAX’ı İngilizce talimatlarla daha tutarlı yorumluyor.
1. Güvenli başlangıç: dal aç ve bağlan
Önce Git’te yeni bir dal açın (git checkout -b ai-cleanup). Sonra:
Open semantic model from PBIP folder 'C:\Projects\Sales\Sales.SemanticModel'
2. Envanter çıkar
Give me an inventory of this model: tables with row counts, number of measures per table,
relationships (with cardinality and cross-filter direction), and any measures without descriptions.
Do not change anything yet.
“Do not change anything yet” ifadesi önemli. Ajanın keşif aşamasında yazma aracına uzanmasını engelliyor.
3. En iyi uygulamalara göre analiz
Analyze the model against Power BI modeling best practices. Group findings by severity
(high / medium / low) and, for each, say whether you can fix it or whether it needs my decision.
Propose a plan, but wait for my approval before applying anything.
Plugin kuruluysa ajan bu adımda semantic-model-authoring skill’indeki kontrol listesini kullanır. Tipik bulgular: çift yönlü filtreler, gereksiz yere görünür anahtar kolonlar, tarih tablosu işaretlenmemiş model, format string’i olmayan measure’lar.
4. İsimlendirme standardı (transaction içinde)
Begin a transaction. Analyze the naming convention of the 'Sales' table and apply the same
pattern to all measures in the model. Show me the old → new names as a table first.
After I approve, apply the renames and commit the transaction.
Toplu değişiklikleri transaction içinde yapmak, bir şey ters giderse tek komutla geri dönebilmenizi sağlıyor (rollback). Bu araç sadece local sunucuda var.
5. Açıklamalar ve dokümantasyon
Add descriptions to all measures, columns, and tables that explain their purpose and the logic
behind the DAX in plain business terms. Keep each description under 200 characters.
Bu açıklamalar sadece insanlar için değil. Fabric Copilot ve Power BI data agent’ları da modeli anlamak için bu metadata’yı okuyor. Yani bu adım, modelinizi yapay zekâya da hazırlıyor.
6. Refactoring: kopya measure’ları calculation group’a taşı
Refactor measures 'Sales Amount 12M Avg' and 'Sales Amount 6M Avg' into a calculation group,
and add 24M and 3M variants. Then write a DAX query that compares the old and new results
for the last 12 months and run it.
İkinci cümle kritik: Ajandan sadece değişikliği değil, değişikliğin doğruluğunu kanıtlayan testi de istiyorsunuz.
7. Diff’i oku, commit et
PBIP kullandığınız için her değişiklik TMDL dosyalarında görünür. Örneğin bir measure’ın yeniden adlandırılıp açıklama eklenmesi Git’te şöyle bir fark olarak düşer (temsili örnek):
table Sales
- measure 'Toplam Satis' = SUM ( Sales[Amount] )
+ /// Net sales amount in local currency, excluding returns.
+ measure 'Sales Amount' = SUM ( Sales[Amount] )
formatString: #,0
Diff’i satır satır okuyun, raporlarınızın bağlı olduğu measure adlarının değişip değişmediğini kontrol edin ve ancak ondan sonra commit edip main’e birleştirin.
İyi prompt yazmanın 6 kalıbı
- Kapsamı daraltın. “Modeli düzelt” yerine “Sales tablosundaki measure’ların format string’lerini düzelt” deyin.
- Önce plan, sonra uygulama isteyin. “Propose a plan and wait for my approval” kalıbını alışkanlık haline getirin.
- Önce/sonra tablosu isteyin. Toplu yeniden adlandırmalarda eski ve yeni adları görmeden onay vermeyin.
- Test isteyin. Her refactoring’den sonra sonucu doğrulayan bir DAX sorgusu yazdırıp çalıştırın.
- Kuralları açık yazın. İsimlendirme standardınızı, açıklama uzunluğunu, format string tercihlerinizi prompt’a koyun.
- Toplu işi transaction’a alın. Local sunucuda “Begin a transaction … commit” kalıbını kullanın.
Hazır prompt kütüphanesi
| Senaryo | Prompt |
|---|---|
| İsimlendirme standardı | Analyze my model's naming conventions and suggest renames to ensure consistency. |
| Modeli belgelemek | Add descriptions to all measures, columns, and tables that explain their purpose and the logic behind the DAX in plain business terms. |
| Markdown dokümantasyon | Generate a Markdown document (.md) that provides complete, professional documentation of this semantic model. |
| Çeviri | Generate a Turkish translation for my model, including tables, columns, and measures. |
| Calculation group | Refactor measures 'Sales Amount 12M Avg' and 'Sales Amount 6M Avg' into a calculation group, and add 24M and 3M variants. |
| Power Query parametreleri | Analyze the Power Query code for all tables and create semantic model parameters for hard-coded server and database names. |
| İki modeli kıyaslama | Connect to semantic model 'V1' and 'V2' and benchmark the following DAX query against both models. |
| Direct Lake model | Create a Direct Lake semantic model against lakehouse 'LH_CorpData' using tables 'Product', 'Sales', 'Store'. |
Otomasyon: service principal ile çalıştırmak
Local sunucu, etkileşimli giriş yerine service principal ile de çalışabiliyor. Bu, gece çalışan bir dokümantasyon işi veya bir CI adımı için kapı açıyor. Sunucuyu --authmode serviceprincipal ile başlatıp şu ortam değişkenlerini tanımlıyorsunuz:
AZURE_CLIENT_IDveAZURE_TENANT_IDAZURE_CLIENT_SECRETveya sertifika içinAZURE_CLIENT_CERTIFICATE_PATH(gerekirseAZURE_CLIENT_CERTIFICATE_PASSWORD)
Diğer önemli bayraklar: --readonly (hiç yazma yok), --skipconfirmation (onay sormadan yazar, sadece yedekle kullanın) ve Analysis Services hedefleri için --compatibility Full.
Modeli bozmadan kullanmanın 6 kuralı
Ajan sizin yetkilerinizle çalışır. Yanlış yapılandırılmış bir ajan yıkıcı işlem de yapabilir. Bu yüzden:
- Yedek alın. Her oturumdan önce modelin yedeğini alın.
- PBIP + Git ile çalışın. Ajanın yaptığı her değişikliği TMDL diff’inde okuyun, gerekirse geri alın.
- Önce prod dışında deneyin. Canlı modele doğrudan bağlanmayın; bir geliştirme workspace’i kullanın.
- En az yetki ilkesini uygulayın. Sadece okuma gerekiyorsa local sunucuyu
--readonlyile başlatın. - Onayı kapatmayın. Local sürüm yazmadan önce onay ister.
--skipconfirmationsadece yedeğiniz varken. - Veri nereye gidiyor, bilin. Metadata, şema ve sorgu sonuçları kullandığınız LLM sağlayıcısına gider. Sohbet kayıtlarını paylaşırken de dikkatli olun.
Kurumsal yönetişim: yöneticiler için kontrol listesi
- Hosted sunucu: “Users can use the Power BI Model Context Protocol server endpoint” tenant ayarıyla açılıp kapanır. Önce bir güvenlik grubuyla pilot yapın.
- Local sunucu: Ayrı bir tenant ayarı yok. Engellemenin yolu XMLA endpoint’i kapatmak, ama bu diğer XMLA tabanlı araçları da durdurur.
- Yetki: İstemciler kullanıcının Fabric RBAC yetkileriyle çalışır. Geliştiricilere prod workspace’lerde gereğinden fazla yetki vermeyin.
- Veri politikası: Hangi LLM sağlayıcısının kullanılacağını şirketinizin yapay zekâ veri politikasıyla netleştirin.
- Uyumluluk: Bu sunucular Fabric’in uyumluluk sınırları dışındaki istemcilerle konuşabilir. Entegrasyonu güvenlik incelemesinden geçirin.
Neyi yapamaz?
- Sadece modelleme yapar. Rapor sayfalarına ve diyagram yerleşimine dokunmaz. (Rapor tarafı için ayrı skill’ler var.)
- DAX sorgu sonucu en fazla 100.000 satır döner.
- External Tools ile yapılan modelleme işlemleriyle aynı kurallara tabidir.
- Hosted sürümde transaction ve trace araçları yok. Ayrıca oturum durumlu (stateful) olduğu için istemcinin
mcp-Session-Idbaşlığını her istekte geri göndermesi gerekir. - Local sürüm macOS’ta çalışmaz.
- Son kullanıcı soru-cevap senaryoları için tasarlanmadı; o iş Fabric IQ’nun.
Sık karşılaşılan sorunlar ve çözümleri
| Belirti | Muhtemel neden | Çözüm |
|---|---|---|
| Ajan araçları hiç çağırmıyor | Sohbet Ask/Edit modunda | Copilot’u Agent moduna alın |
| Okuyabiliyor ama değiştiremiyor | Modelde sadece Build yetkisi var | Write yetkisi isteyin |
| Fabric modeline yazarken hata | XMLA endpoint Read Only | Kapasite ayarlarında Read Write yapın |
| Hosted sunucu giriş yapamıyor | İstemci dinamik OAuth kaydı istiyor veya tenant ayarı kapalı | Local sunucuya geçin ya da yöneticiden ayarı açmasını isteyin |
| Ajan yanlış sunucuyu çağırıyor, yanıtlar pahalı | Local ve hosted aynı anda kayıtlı | Birini kaldırın |
| Sonuçlar tutarsız | Zayıf model veya belirsiz prompt | Derin akıl yürüten bir model seçin, kapsamı daraltın |
Sonuç
Authoring MCP Server, model geliştiricinin tekrarlı işlerini dakikalara indiriyor: toplu yeniden adlandırma, dokümantasyon, çeviri, refactoring ve testler. Skill’ler ve plugin ile birlikte kullanıldığında ajan sadece komut uygulamıyor, Microsoft’un modelleme rehberlerini de izliyor.
Ama karar hâlâ sizde. Doğru kurgu basit: ajan taslak çıkarır ve test eder, siz diff’i okur ve onaylarsınız. Yedek, PBIP ve Git bu kurgunun emniyet kemeri.
Siz modelinizde ilk hangi işi bir ajana yaptırırdınız? Yorumlarda ya da LinkedIn’de yazın, en çok gelen senaryoyu adım adım bir sonraki yazıda deneyelim.
Kaynaklar
- Power BI Authoring MCP server (Microsoft Learn)
- Overview of the MCP Servers – Power BI (Microsoft Learn)
- Power BI agentic development overview (Microsoft Learn)
- Semantic model authoring skill (Microsoft Learn)
- microsoft/powerbi-modeling-mcp (GitHub)
- Model Context Protocol specification
HABERDAR OL
Yeni rehberler, kategorilere ayrılmış tek bir e-postada.
Her pazartesi, o hafta yayımlanan yazılar konu başlıklarına göre derlenmiş olarak gelen kutunda. Yeni yazı yoksa e-posta da yok.
