Wyobraź sobie, że tworzysz i rozwijasz raporty w Power BI. Przychodzisz do nowego projektu. Dostajesz pod opiekę kilka obszarów roboczych (workspace) w Power BI. Osoba, która do tej pory się tym zajmowała nie ma zbyt wiele czasu dla Ciebie.
Potrzebujesz sprawdzić jakie są źródła danych do raportów: Gdzie odwołujesz się do bazy danych, jakie tabele są wykorzystywane.
Albo:
Inżynierowie danych zapowiadają wielki re-design. Potrzebują, żebyś zrobił inwentaryzację i powiedział, jakich tabel używasz w raportach Power BI. Gdy masz jeden raport, nie stanowi to wielkiego problemu. Natomiast gdy masz tych raportów 15 to już nie chcesz robić tego zadania ręcznie. Przydałby się jakiś skrypt.
Albo:
Planowana jest migracja z SQL Servera na Databricks. Potrzebujesz sprawdzić w jakich raportach odwołujesz się do bazy danych. Musisz wylistować wszystkie tabele i najlepiej też kolumny z których korzystasz.
Jak zawsze najlepiej zrobić to automatycznie. Możesz zapytać ChatGPT jak rozwiąże ten problem albo poczytać niżej.
Zapraszam dalej pokaże Ci jak ja rozwiązałem ten problem.
Połączenie z usługą Power BI
Skrypt napisany jest w PowerShellu, mam nadzieję, że wiesz, że jest on zainstalowany na każdej maszynie z Windows.
Skrypt analizuje wszystkie datasety zawarte w Power Bi workspace. Jeżeli masz swój dataset na lokalnej maszynie wtedy wystarczy delikatnie zmodyfikować ten skrypt ale to nie będzie przedmiotem tego omówienia.
Zakładam, że masz dostęp do obszaru roboczego oraz usługi Power BI Service. Wtedy autentykacja będzie wykonywana przy użyciu:
Connect-PowerBIServiceAccount
Następnie potrzebujesz załadować bibliotekę, która umożliwi pracę z modelem tabelaryczny w Power BI (tabular model), może się okazać, że potrzebujesz zainstalować dodatkowe biblioteki od Microsoft, żeby móc to zrobić.
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices.Tabular")
Następnie tworzysz obiekt i łączysz się do obszaru roboczego.
$srv = New-Object Microsoft.AnalysisServices.Tabular.Server
$srv.Connect($workspaceLink)
Obiekt $srv będzie umożliwiał operacje na obszarze roboczym w kontekście uprawnień i użytkownika, którego wcześniej się zalogowałeś.
Operacje na modelu tabularycznym
Opisane poniżej operacje zawarte są w funkcji Extract-Sources. Zaczynamy od tego, że operujemy na połączeniu do obszaru roboczego $srv i listujemy wszystkie Datasety:
foreach($db in $srv.databases) {
Dla poszególnych datasetów, z modelu tabularycznego wybieramy wszystkie tabele:
foreach($table in $db.Model.Tables ){
Teraz trzeba poszukać gdzie jest kod SQL: zapytanie do bazy albo nazwa tabeli. Kod zapisany w M query możesz wyciągnąć przy użyciu:
$expression = $partition.Source.Expression
W kodzie zrobiona jest prosta transformacja tekstowa, zwracająca SQL'a w trochę ładniejszej formie (Compute-SQL, Extract-Sources).
Jeżeli to jest jeden z pierwszych skryptów PowerShell na które patrzysz to tylko mała podpowiedź, że używając debugera możesz podaptrzeć co się dzieje w środku programu. Daje to wielkie możliwości do zmian w skrypcie i dostosowania do swoich potrzeb.
To tylko jedno z zastosowań połączenia z modelem tabularycznym, daj znać jeżeli chcesz dowiedzieć się więcej.
Dobrej zabawy!
Cały skrypt dostępny tutaj:
https://github.com/rgogloza/nextlevelbi/blob/master/powershell/pbi-inventory.ps1