İş Zekası, Power BI, Power Platform, PowerShell / 30 Ekim 2022 / Miraç ÖZTÜRK
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;
Makalede Neler Var ?
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;
İlgili uygulamalardan, PowerShell uygulaması çalıştırıldığında;
PowerShell ISE uygulaması çalıştırıldığında ise;
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
İ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
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.
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 Administrator – Yö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)
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;
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)
paket yükleme süreci başlayacaktır.
Tamamlandığında ise konsol kod kullanım satırı tekrar aktifleşecektir.
İ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.
Çalıştırdığımızda ise;
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)
Power BI hizmetine erişim gerçekleştirdikten sonra bu erişimi inaktif etmek için;
Disconnect-PowerBIServiceAccount
kodunu kullanabiliriz.
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.
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)
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)
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)
Ü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)
Ü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)
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)
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;
ilgili atama işlemi gerçekleşmektedir.
Parametremizi çağırdığımızda; (Aslında nesne özelliği mevcut)
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;
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.
ç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.
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
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;
“+” 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.
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…