PowerShell Üzerinde Power BI Kullanımı

Mirac Öztürk
10 min readNov 2, 2022

--

Merhabalar, iyi günler.

Bugün Microsoft’un birbirinden bağımsız veri kaynaklarınızı tutarlı, görsel olarak sürükleyici ve etkileşimli öngörülere dönüştürmenizi sağlamak için birlikte çalışan yazılım hizmetlerinden, uygulamalardan ve bağlayıcılardan oluşan bir koleksiyonu olan Power BI’ın PowerShell üzerinde nasıl kullanılabileceğine yönelik aktarımlarda bulunmaya çalışacağım.

Şimdiden iyi okumalar.

***

Kurum ve kuruluşlar kendi bünyelerinde karmaşık ve bir o kadar yoğun bir süreç yapısına sahip olabilirler.
Bu da birden çok ya da bir o kadar takip ve kontrol noktası oluşmasına neden olmaktadır.
Elbette ki günümüz ilerleyen teknolojisinin bu noktaları kolaylaştıracak hatta sistematik bir yapı oluşmasını sağlayıp insan hatasından uzaklaştıracak çözümleri mevcut ve günden güne gelişim halindedir.

Burada ortaya çıkan ve sistematik bir yapı oluşmasını gerektiren gereksinimin günümüzde ve bulunduğumuz toplum içerisindeki karşılığı ile Raporlama (Reporting) olarak ifade edilmektedir. (Ya da ek nedenler için tercih.)

Haliyle bu çözüm çeşitli durumlar için (Rolleme,Kurumsal Çalışma Alanları vb.) onlarca (Bazen YÜZLERCE) rapora karşılık gelmektedir.
Dosyalar üzerindeki değişimin ve geliştirmelerin takip edilemediği çalışmalar için ise hatasız bir şekilde bu süreçlerin takibi ve geliştirilmesi neredeyse imkansız gibidir.

Bugün PowerShell üzerinden bu faaliyetinin Power BI üzerinde nasıl gerçekleştirileceğine yönelik ön hazırlıklarımızı gerçekleştirip, sistemlerine göz atıyor olacağız.

*İşlemlerimizi tamamen PowerShell kullanarak basit seviyedeki betikler ile gerçekleştirmeye çalışacağız.

Öncelikle;

PowerShell, PowerShell ISE Nedir?

PowerShell; Microsoft tarafından Windows komut satırı cmd.exe* ve Windows Script Host’a alternatif olarak geliştirilen yeni nesil bir komut satırı uygulamasıdır.
*cmd=Command-Komut ifadesinin kısaltmasıdır.

Kimi kaynaklarda ise bu kabuk programlama olarakta ifade edilmektedir.

PowerShell ISE (Windows PowerShell Integrated Scripting Environment — ISE (Tümleşik Betik Ortamı)); Windows PowerShell için bir konak uygulamasıdır. ISE’de tek bir Windows tabanlı grafik kullanıcı arabiriminde komut çalıştırabilir, betikler yazabilir, bunları test edebilir ve hata ayıklama işlemlerinde bulunabilirsiniz.

Genel itibari ile Powershell — Powershell ISE komut satırı uygulamaları üzerinde kullanıcılar/geliştiriciler Windows’da yer alan uygulamaların;

  • Yönetimini,
  • Çeşitli işlemler için uyarlanmasını/düzenlenmesini,
  • Olay günlükleri gibi detaylar da göz önünde bulundurularak süreç/işlem denetlemelerini

gerçekleştirebilmektedir.

Yerel cihazımız üzerinde Powershell’e ya da Powershell ISE’ye erişmek için, arama alanı üzerinden ‘Power’ yazarak ilgili geliştirme ortamlarına ulaşabilirsiniz;

what is powershell

İlgili uygulamalardan, PowerShell uygulaması çalıştırıldığında;

what is powershell

PowerShell ISE uygulaması çalıştırıldığında ise;

what is powershell
what is powershell

ekranları bizi karşılamaktadır.

PowerShell ve PowerShell ISE ekranları önizleme dahilinde karşılaştırıldığında bariz bir sekilde PowerShell ISE ekranının kullanıcı kullanım kolaylığı içerdiği, daha hızlı ve efektif işlem imkanı sağladığı (Kısayollar ile) hissini oluşturmaktadır.Üst kısımda yer alan tanımlamalar da karşılaştırıldığında bu düşünceyi destekleyici nitelikte olduğu görülmektedir.

PowerShell uygulamalarına göz attıktan sonra ise;

PowerShell ISE Üzerinde Power BI Kullanımı

İlgili arabirimlerimizi kullanabilir durumda olduğumuza göre şimdi PowerShell üzerinde Power BI işlemlerine başlayabiliriz.Bu işlemleri gerçekleştirebilmek için gereksinim olan MicrosoftPowerBIMgmt kütüphanesinin yerel cihazımızda bulunması gerekmektedir.

Bunu hızlıca PowerShell üzerinden kontrol edebiliriz.
Alt kısımda bulunan kod parçacığını PowerShell üzerinde çalıştırıp, bulunma durumunu kontrol edebilirsiniz;

Get-Module MicrosoftPowerBIMgmt* -ListAvailable
what is powershell

İlgili kodu çalıştırdığımızda kütphanenin sistemimizde yüklü olduğu görüntülenmektedir.

NOT: PowerShel üzerinde herhangi bir satırı yorum olarak kullanmak için # sembolünden faydalanabilirsiniz.
Bir yorumu birden çok satır için kullanacaksanız (Çoklu yorum satırı) <# #> sembol grubundan yararlanabilirsiniz.
(Üst görsel kod yorumuna istinaden eklenmiştir.)
PowerShell Comment Line = #
PowerShell Multi Comment Line = <# #>

Ek olarak dilerseniz dosya konumu bazlı da dizin üzerinden kontrol edebilirsiniz;

C:\Program Files\WindowsPowerShell\Modules
what is powershell

Yüklü olmadığı durumda ise öncelikli olarak;

  • PowerShell Gallery platformuna erişip, ( https://www.powershellgallery.com/ )
  • MicrosoftPowerBIMgmt kütüphanemizi arama kısmında aratıp, ilgili sayfaya erişmemiz gerekmektedir.

Kütüphane bilgi sayfasına eriştiğimizde ise Install Module altında yer alan yükleme kod parçacığını kopyalayıp;

what is powershell

PowerShell üzerinde çalıştırabilirsiniz.

Install-Module -Name MicrosoftPowerBIMgmt

Çalıştırma sonrasında yerel cihaz kullanıcıları adına (Yönetici dışı kullanıcılar) Execution Policy (Yürütme Politikası — Kod Derleme İzni vb.) bir hata alabilirsiniz.

Bunun için izniniz mevcutsa Run AdministratorYönetici Olarak Çalıştır diyerek PowerShell’i kapatıp tekrar açmanız gerekir, ya da;

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

kod bloğunu ilgili kullanıcı ile derleyerek mevcut işlemlere devam etmek için kullanım iznini elde edebilirsiniz.
Belirtilen yürütme izni için onay verdiğimizde; (Yes-Yes to All)

what is powershell

paket yönetimi ve yerel uygulama yönetme işlemlerine yönelik yetkileri edinmiş olacağız. (Politika inaktif olacak.)
Gerekli izni edindikten sonra tekrar MicrosoftPowerBIMgmt kütüphanemizi yüklemeye çalıştığımızda;

what is powershell

ilgili görseldeki gibi paket yükleme izni talep eden bir ekranla karşılaşacağız.
Belirtilen kaynak üzerinden (PSGallery) yüklenecek paketler için onay verdiğimizde; (Yes-Yes to All)

what is powershell

paket yükleme süreci başlayacaktır.

Tamamlandığında ise konsol kod kullanım satırı tekrar aktifleşecektir.

what is powershell

İlgili paket içersindeki modüller;

Modül AdıVersiyonu MicrosoftPowerBIMgmt

MicrosoftPowerBIMgmt.Admin

MicrosoftPowerBIMgmt.Capacities

MicrosoftPowerBIMgmt.Data

MicrosoftPowerBIMgmt.Profile

MicrosoftPowerBIMgmt.Reports

MicrosoftPowerBIMgmt.Workspaces

şeklindedir. (Üst dosya dizini üzerinden kontrol gerçekleştirebilirsiniz.)

Power BI aracına yönelik PowerShell üzerinde işlemlerde bulunabilmek için mevcut paketlere hızlıca göz atmamız gerekmektedir.
Paket içerik ve kullanımı için;
https://learn.microsoft.com/en-us/powershell/power-bi/overview?view=powerbi-ps
bağlantısına kontrol edebilirsiniz.

Ön kontrolleri sağladıktan sonra PowerShell üzerine dönecek olursak ilk işimiz Power BI servislerimize erişebilmek olmalı.

Bunun için;

Connect-PowerBIServiceAccount

kodunu kullanabiliriz.

what is powershell

Çalıştırdığımızda ise;

what is powershell

Power BI hizmetlerine erişirken ön kontrol sağlayan kullanıcı adı ve parola ekranı açılmaktadır.

NOT:Burada bağlanacağınız kullanıcıya yönelik işlemler yapabilmektesiniz.
Yani; kurumsal olarak sistemde yer alan bir kullanıcı iseniz kendi çalışma alanınız üzerindeki bilgiler ile işlemde bulunabilir, kurumsal yönetici kullanıcısı iseniz tüm servis hizmetleri üzerinde işlemde bulunabilirsiniz.

İlgili kullanıcı bilgileri ile giriş gerçekleştikten sonra servise bağlandığınızı gösteren

  • Environment (Servis ortam tipi)
  • TenantID (Kiracı ID / Kullanıcı ID)
  • UserName (Kullanıcı adı / İlgili kullanıcı mail)

bilgileri geri dönüş değeri olarak konsol üzerinde verilmektedir;

what is powershell

Power BI hizmetine erişim gerçekleştirdikten sonra bu erişimi inaktif etmek için;

Disconnect-PowerBIServiceAccount

kodunu kullanabiliriz.

what is powershell

Doğrusal bir şekilde düşündüğümüzde kurumsal bir firma içerisinde yer alıyorsak;

  • Bu yerel cihaz üzerinde birden çok kişi işlemde bulunabilir, (Sunucu olabilir)
  • Mevcut cihazımızda kurumsal olarak bilgilerimizin kayıtlı kalması bilgi kaybına yol açabilir (Bilgilere erişilebilir)

sonuçları düşünülerek erişim bilgileri ve erişim noktaları kesinlikle güvenlik altına alınmalı ya da adımlar güvenli şekilde atılmalıdır.

Power BI hizmeti üzerinde oturum kapatmadığımızda aşağıda görüldüğü gibi ilgili kullanıcı oturumu bilgiler kayıt edilmiş ve kullanılabilir şekilde önbellekte yer almaktadır.

what is powershell

Power BI servisine tekrar bağlanarak servis üzerindeki işlemlerimize devam edelim.

Mevcut çalışma alanlarını bir liste olarak görüntülemek istediğimizde;

Get-PowerBIWorkspace

kodunu kullanabiliriz.

Kod çalıştırıldığında ise;

  • ID (Çalışma alanı ID’si)
  • Name (Çalışma alanı adı)
  • IsReadOnly (Çalışma alanı salt okunur mu)
  • IsOrphaned* (Artık çalışma alanı mı)
    *An orphaned workspace is one that does not have an admin assigned.
  • IsOnDedicatedCapacity (Atanmış/Adanmış kapasiteye sahip mi)
  • CapacityId (Kapasite ID’si)

bilgileri geri dönüş değeri olarak konsol üzerinde verilmektedir;

what is powershell

Tüm çalışma alanlarını görüntülemek için ise;

Get-PowerBIWorkspace -All

kodunu kullanabiliriz. (-All komutu eklenerek.)
*İlgili kullanıcı mevcut tüm alanlarda yönetici olduğu için aynı çalışma alanları çıktıları yer almaktadır.

Üst seviyede yer alan kullanıcı olarak değilde kiracı düzeyinde düşünerek, tüm kiracıların yer aldığı çalışma alanlarına göz atacak olursak;

Get-PowerBIWorkspace -Scope Organization -All

kodunu kullanabiliriz. (-Scope Organization komutu eklenerek.)
*Kod parçacıkları ana öbek üzerinden eklenerek gitmektedir.

Burada ilgili kurumsal kullanımda ki (Organizasyonda yer alan) tüm personellerin çalışma alanları da yer almaktadır. (*Personal Workspace)

what is powershell

Mevcut çalışma alanlanları (Admin kullanıcısı) üzerindeki raporları bir liste olarak görüntülemek istediğimizde;

Get-PowerBIReport

kodunu kullanabiliriz.

Kod çalıştırıldığında ise;

  • ID (Rapor ID’si)
  • Name (Rapor adı)
  • WebUrl (Rapor web bağlantı linki)
  • EmbedUrl (Rapor web bağlantı ekleme/gömme linki)
  • DatasetId (Veri kaynağı ID’si)

bilgileri geri dönüş değeri olarak konsol üzerinde verilmektedir;

what is powershell

Üst seviyede yer alan kullanıcı olarak değilde kiracı düzeyinde düşünerek, tüm kiracıların raporlarına göz atacak olursak;

Get-PowerBIReport -Scope Organization

kodunu kullanabiliriz. (-Scope Organization komutu eklenerek.)
Burada ilgili kurumsal kullanımda ki (Organizasyonda yer alan) tüm personellerin raporları yer almaktadır. (*Personal Report)

Peki mevcut çalışma alanlanları (Admin kullanıcısı) üzerindeki panoları bir liste olarak görüntülemek istediğimizde ise;

Get-PowerBIDashboard

kodunu kullanabiliriz.

Kod çalıştırıldığında ise;

  • ID (Pano ID’si)
  • Name (Pano adı)
  • IsReadOnly (Pano salt okunur mu)
  • EmbedUrl (Pano web bağlantı ekleme/gömme linki)

bilgileri geri dönüş değeri olarak konsol üzerinde verilmektedir;

what is powershell

Üst seviyede yer alan kullanıcı olarak değilde kiracı düzeyinde düşünerek, tüm kiracıların panolarına göz atacak olursak;

Get-PowerBIDashboard -Scope Organization

kodunu kullanabiliriz. (-Scope Organization komutu eklenerek.)
Burada ilgili kurumsal kullanımda ki (Organizasyonda yer alan) tüm personellerin panoları yer almaktadır. (*Personal Dashboard)

what is powershell

Peki tüm çalışma alanlarında yer alan öğelerin verilerinin barındırıldığı veri kaynaklarını (DataSet) bir liste olarak görüntülemek istediğimizde ise;

Get-PowerBIDataset

kodunu kullanabiliriz.

Kod çalıştırıldığında ise;

  • ID (Veri kaynağı ID’si)
  • Name (Veri kaynağı adı — Raporla aynı adda olur./Değiştirilmemişse!)
  • ConfiguredBy (Veri kaynağını yapılandıran kullanıcı)
  • DefaultRetentionPolicy (Veri kaynağı varsayılan saklama politikası)
  • AddRowsApiEnabled (Veri kümesinin yeni satırlar eklemeye izin verip vermediği)
  • Tables (Veri kaynağına bağlı olan tablolar)
  • WebUrl (Veri kaynağı web bağlantı linki)
  • Relationships (Veri kaynağı bağlantı ilişkileri)
  • DataSources (Bağlı olan kaynaklar)
  • DefaultMode (Varsayılan kullanım modu aktif mi)
  • IsRefreshable (Veri kaynağı için yenileme modu aktif mi)
  • IsEffectiveIdentityRequired (Veri kümesinin API çağrısında gereken kimlik doğrulama talep durumu)
  • IsEffectiveIdentityRolesRequired (.pbix dosyasında satır düzeyinde güvenliğin tanımlanıp tanımlanmadığı)
  • IsOnPremGatewayRequired (Veri kümesinin şirket içi veri ağ geçidi gerektirip gerektirmediği)
  • TargetStorageMode (Veri kümesi veri depolama modu)

bilgileri geri dönüş değeri olarak konsol üzerinde verilmektedir;

what is powershell

Buraya kadar olan kısımda Power BI öğelerine yönelik ön bilgiler edinmek adına işlemlerde bulunduk.

Peki özet bilgilere ulaşabilir miyiz?
Kaç adet; çalışma alanı, rapor, pano ve veri kaynağı mevcut gibi…

Çözüm için şöyle düşünebiliriz; detaylı bir geri dönüş bilgisi alıyoruz, bunu saydırabilirsek değerlere ulaşabiliriz.
Ama öncesinde her bir dönüşü birer parametreye atamamız gerekmektedir. (Sonucu saydırabilmek için.)

Bunu yapmak istediğimizde; (Tüm admin çalışma alanları için.)

$tumAdminCalismaAlanlari = Get-PowerBIWorkspace -All

adlandırmak istediğimiz/kullanmak istediğimiz parametre ifadesinin başına ” $ ” operatörünü ekleyerek işlemde bulunmamız gerekmektedir.

Kodumuzu çalıştırdığımızda;

what is powershell

ilgili atama işlemi gerçekleşmektedir.

Parametremizi çağırdığımızda; (Aslında nesne özelliği mevcut)

what is powershell

ilgili çalışma alanlarının bilgileri geri dönüş olarak konsol üzerinde yer almaktadır.

Parametremizi üzerinde işlem yapmak istediğimizde (“.” ekleyip CTRL+SPACE) bize bir işlem öneri ekranı açılacaktır;

what is powershell

Açılan ekran üzerinden COUNT (Saymak) seçeneğini kullanıp parametre dönütünü saydıracak olursak;
*Birden çok işlem seçeneği mevcut, anlık kullanım durumu olduğu için ilgili fonksiyon seçilerek işlemde bulunuldu.

what is powershell

çalışma alanı sayımıza ulaşıyor olacağız.

Acaba diyerek; tüm sonuçları saydırdık bir hata var mıdır? şeklinde düşünürsek, Id değerlerini saydırıp bir nebze rahatlatıcı sonuçta elde edebiliriz.

Yani;

$tumAdminCalismaAlanlari.Id.Count

kodunu çalıştırarakta aynı sonuca ulaşabiliriz.

what is powershell

Evet buraya kadar tekil işlemlerde bulunduk.
Şimdi son değer üretme işlemini tüm nesneler için genelleyecek olursak;

#CALISMA ALANLARI DEGERLERI;
$tumAdminCalismaAlanlari = Get-PowerBIWorkspace -All
$tumAdminCalismaAlanlari.Count
$tumAdminCalismaAlanlari.Id.Count
$tumOrganizasyonCalismaAlanlari = Get-PowerBIWorkspace -All
$tumOrganizasyonCalismaAlanlari.Count
$tumOrganizasyonCalismaAlanlari.Id.Count
#RAPOR DEGERLERI;
$tumAdminRaporlari = Get-PowerBIReport
$tumAdminRaporlari.Count
$tumAdminRaporlari.Id.Count
$tumOrganizasyonRaporlari = Get-PowerBIReport -Scope Organization
$tumOrganizasyonRaporlari.Count
$tumOrganizasyonRaporlari.Id.Count
#PANO DEGERLERI;
$tumAdminPanolari = Get-PowerBIDashboard
$tumAdminPanolari.Count
$tumAdminPanolari.Id.Count
$tumOrganizasyonPanolari = Get-PowerBIDashboard -Scope Organization
$tumOrganizasyonPanolari.Count
$tumOrganizasyonPanolari.Id.Count
#VERI KAYNAGI DEGERLERI;
$tumAdminVeriKaynaklari = Get-PowerBIDataset
$tumAdminVeriKaynaklari.Count
$tumAdminVeriKaynaklari.Id.Count
$tumOrganizasyonVeriKaynaklari = Get-PowerBIDataset -Scope Organization
$tumOrganizasyonVeriKaynaklari.Count
$tumOrganizasyonVeriKaynaklari.Id.Count
what is powershell

ve bunları özet birer değere dönüştürecek olduğumuzda;

$tumAdminCalismaAlanlari.Id.Count
$tumOrganizasyonCalismaAlanlari.Id.Count
$tumAdminRaporlari.Id.Count
$tumOrganizasyonRaporlari.Id.Count
$tumAdminPanolari.Id.Count
$tumOrganizasyonPanolari.Id.Count
$tumAdminVeriKaynaklari.Id.Count
$tumOrganizasyonVeriKaynaklari.Id.Count

ilgili çıktıyı elde etmekteyiz;

what is powershell

“+” değer birleştirme operatörünü kullanarak bir nebze çıktıları ifadesel olarak anlamlı hale dönüştürecek olursak;

"Admin Calisma Alani Sayisi: " + $tumAdminCalismaAlanlari.Id.Count
"Organizasyon Calisma Alani Sayisi: " + $tumOrganizasyonCalismaAlanlari.Id.Count
"Admin Rapor Sayisi: " + $tumAdminRaporlari.Id.Count
"Organizasyon Rapor Sayisi: " + $tumOrganizasyonRaporlari.Id.Count
"Admin Pano Sayisi: " + $tumAdminPanolari.Id.Count
"Organizasyon Pano Sayisi: " + $tumOrganizasyonPanolari.Id.Count
"Admin Veri Kaynagi Sayisi: " + $tumAdminVeriKaynaklari.Id.Count
"Organizasyon Veri Kaynagi Sayisi: " + $tumOrganizasyonVeriKaynaklari.Id.Count

ilgili çıktıyı elde ederiz.

what is powershell

Bugünlük son işlem adına ise servisimizi kapatıp, ilk PowerShell üzerinde PowerBI işlem yazımızı noktalayalım;

Disconnect-PowerBIServiceAccount

Bir sonraki PowerShell yazımızda/yazılarımızda;

  • Kullanıcı Dökümleri/Özetleri,
  • Kullanıcı Eylemleri/İşlemleri,
  • Hata Çıktıları,
  • Veri Kaynağı İşlem Geçmişleri,
  • Öğelerin Dışarı Aktarılması,
  • İçerik Bilgilerinin Dışarı Aktarılması/Kaynağa Yazılması,
  • Veri Kaynağı Yenilemesi

gibi başlıkları ele alıp, ek işlemlerde bulunuyor olacağız.

Tüm işlemlere yönelik kod dökümünü;
https://github.com/miracozturk17/PowerShellQueryChallenge
bağlantısı üzerinden elde edebilirsiniz.

Gelecek yazılarda görüşmek üzere.

İyi çalışmalar…

--

--

Mirac Öztürk
Mirac Öztürk

Written by Mirac Öztürk

Data Scientist + Mathematician / Coder — Gamer miracozturk.com

No responses yet