Když jsem
se zamýšlel o čem napsat další blog post, odpověď byla zřejmá. Nejlepší bude
popsat to s čím se opět “trápím” v práci. Protože když to řeším já, tak pravděpodobně
i někdo další. Slovy jednoho kolegy: “Co je účelem tohohle cvičení?” Proč Power
BI a PowerShell?
Některá
funkcionalita Power BI služby je nedostupná přes uživatelské rozhraní, ale je
zatím dostupná přes programové API. Obvzláště pokud se jedná o správu služby, reportů,
datasetů a tak dále.
Vývoj na
této straně probíhá ve stylu napřed zpřístupnit funkcionalitu přes API, pak
zjednodušit pro správce a uživatele přes PowerShell a pak možná někdy (pokud
vůbec) se to dostane do UI (uživatelské rozhraní).
Na rovinu,
PowerShell se učím a je to pro mě výstup mimo komfortní zónu. Nicméně v
poslední době jsem potřeboval řešit například tyto úlohy.
Automatické
přepnutí datasetů z jednoho serveru na druhý v době údržby a pak zpět (jde to
ručně, ale u více reportů je to tak trochu opruz).
Získání
logů o používání Power BI reportů přes celý tenant a nejen Workspace.
A když jsem
se pídil po tom jak těchto úloh dosáhnout, byl jsem odkázán na PowerShell. Počáteční
“ale fuj” jsem musel nahradit za “asi se to tedy budu muset naučit”
Kdo jste
došli do stejné fáze, já jsem k učení základů využil následující kurz na Channel
9
Pro ty už PowerShellem trochu popsané, prvně je potřeba
nainstalovat cmdlety pro správu Power BI. Dokumentaci najdete zde
Power BI Management modul nainstalujeme následovně
Install-Module -Name MicrosoftPowerBIMgmt
Jako příklad
využití přidávám skript, který projde Power BI logy pro tenant (musíte být Power
BI Admin). Interval hledání je od 1.11.2019 do včerejška. Ve smyčce projde datumy
po jednom a zavolá
Get-PowerBIActivityEvents
cmdlet (ten má omezení na data z jednoho dne, abysme tolik netýrali backend Power
BI Service). Uloží aktivity typu “viewreport” do proměnné activities a následně
uloží na disk jako json soubor. Logy poté můžete analyzovat klasicky v Power BI
Desktopu.
Začátek
skriptu
Cls
Login-PowerBI
$mindate = Get-Date "01/11/2019"
$maxdate = Get-Date
$maxdate = $maxdate.AddDays(-1)
for ($i
= $mindate; $i
-lt $maxdate;
$i=$i.AddDays(1))
{$i.ToShortDateString()
$date = $i.ToString("yyyy-MM-dd")
$filename = "D:\jiri_data\activities_" + $date + ".json"
$dateStart = $date + "T00:00:00"
$dateEnd = $date + "T23:59:59"
$activities = Get-PowerBIActivityEvents
-StartDateTime $dateStart
-EndDateTime $dateEnd
-ActivityType viewreport
-ResultType JsonString
$activities | Out-File -FilePath $filename
}
Konec
skriptu
Pro všechny
malicherné byrokratické hnidopichy tam venku (ano, mám na mysli i A.J.Rimmera),
vím že by se to dalo zapsat jednoduššeji a úsporněji, to není nic nového :)
Má to ale i
druhou vadu na kráse, funkční. Login-PowerBI cmdlet vyhodí přihlašovací okénko
pro přihlášení do služby. To značně omezuje automatizaci přes SQL server
agenta. Takže aktuálně se trápím opět mimo svou komfortní zónu s registrací Power
BI app a narážím na nedostatečná práva v rámci Azure portálu.
Kdo máte
tohle prokopnuté a byli byste ochotni se podělit o řešení, napište mi prosím
email. Díky :)
Závěr
Tohle je
jen jeden z případů využití PowerShellu v kombinaci s Power BI službou. Odpověď
“použij PowerShell, tam to jde” jsem slyšel/četl od produktového týmu víckrát,
než je mi milé. Přece jen já jsem převážně BI architekt a vývojář a ne správce
služeb. Pokud Vám skript nefunguje, můžu Vás ujistit, že mě ano. Možná nemáte
dostatečná oprávnění na Power BI službu, může to být i něco jiného.
Možná by pomohlo uložit heslo PowerBI admina někam do adresáře v bin, jak je níže samozřejmě s omezeným přístupem.
OdpovědětVymazat$path = 'C:\Temp'
$passwd = Read-Host "Enter password" -AsSecureString
$encpwd = ConvertFrom-SecureString $passwd
$encpwd > $path\password.bin
Nísledně zavolat script s tímto loginem a heslem a třeba se okno už nezobrazí
$encpwd = Get-Content $path\password.bin
$passwd = ConvertTo-SecureString $encpwd
$cred = new-object System.Management.Automation.PSCredential 'domena\power_bi_admin',$passwd
Start-Process PowerShell -Cred $cred -ArgumentList '-noexit','-File','C:\Temp\muj_script.ps1'
Díky za tip Jiří. Vyzkouším :)
OdpovědětVymazat