Power BI tietolähteiden vaihto kantapalvelimen (nimen) vaihdoksen yhteydessä?

Tässä blogissa käydään läpi, miten voidaan helposti vaihtaa datalähteet yhteen työtilaan (Workspace). Esimerkissä käytössä on Power BI ja organisaatiossa on paljon raportteja osa keskitettyjä ja hajautettuja eli käyttäjien itsenäisesti tekemiä. Nyt SQL palvelin vaihtuu ja raporttien pitäisi toimia myös tämän jälkeen. Tietenkin tämä onnistuu käsin, mutta jos työtiloja ja niissä olevia datalähteitä on paljon, voi vaihto olla työlästä. Jokaiseen työtilassa olevaan datamalliin, missä on käytetty vaihdettavaa palvelinta, pitää käydä vaihtamassa uusi palvelin lähteeksi ja tämän joutuu tekemään avaamalla datamalli Power BI desktopilla. Työtiloja voi olla lukuisia ja jokaista työtilaa kohden vaihdettavia datamalleja voi helposti olla kymmeniä, ellei paljon enemmän.

Miten tästä selviää ilman käsityötä ja raportointikatkoja?

Ensin pitää selvittää missä työtiloissa ja datalähteissä vanhapalvelin on käytössä. Jos nämä ei ole tiedossa helpoin tapa löytyy täältä. Lisäksi tarvitaan admin oikeudet niihin työtiloihin mihin muutokset on tehtävä. Tämän voin antaa esimerkiksi työtilan nykyinen admin. Jos admin tunnus ei ole tiedossa löytyy se esimerkiksi myös samasta datasetistä kuin mitä käytettiin työtilojen löytämiseen. Ensimmäisenä pitää avata PowerShell ja asentaa Power BI moduuli PowerShelliin, jos ei ole asennettuna jo, ja kirjautua sisään Power BI:n tätä kautta. Tarkemmat ohjeet täällä: Moduuli: Kirjautuminen Power BI: Nyt kun muut valmistelut on tehty voidaan siirtyä asiaan. Kopioi artikkelin lopussa oleva koodi PowerShelliin ja vaihda koodissa olevien parametrien arvot (kaikki rivit missä on lopuksi #Edit)
  • $groupId on työtilan id, minkä saa joko näin(samasta datasetistä kuin millä selvitimme muutettavat datasetit ja adminit) tai sitten esimerkiksi kopioimalla se menemällä työtilaan selaimella ja kopioimalla id osoite riviltä
  • $DatasourceType tätä ei tarvitse muuttaa jos kyseessä on SQL Server. (muita määrittelyn mukaan toimivia lähteitä ovat SQL Server, Azure SQL Server, Analysis Services, Azure Analysis Services, OData Feed ja SharePoint, mutta saattaa vaatia muutoksia koodiin)
  • $Server nykyisen serverin nimi
  • $DataBase tietokannan nimi
  • $ServerNew uuden serverin nimi
  • $DataBaseNew tietokannan nimi jos tietokanta pysyy samana niin sama kuin $DataBase. Vastaavasti voidaan vaihtaa vain tietokanta pitämällä serverin nimi samana.
Koodi vaihtaa vain täsmälleen niiden datasettien lähteet joiden tyyppi, serveri ja datasetti vastaavat parametreissa olevia. Jos samasta serveristä käytetään myös toista osoitetta on se muutettava erikseen. Lisäksi jos parametreissa esiintyy ”” on kyseinen merkki toistettava että Json lukee sen oikein ”\”. Eli jos ”yrityspalvelin1” niin pitää muuttaa ”yritys\palvelin1”. Lisää rajoituksia ja tarkempaa tietoa: https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/updatedatasources Nyt voi ajaa koodin. Pitäisi näyttää kutakuinkin tämän näköiseltä: Kuvassa näkyvistä varoituksista ei tarvitse välittää. Huomioita koodista:
  • Koodi ottaa muutettavan datasetin haltuun, mutta ajon jälkeen tämän voi käydä vaihtamassa sopivammaksi, jos sillä on merkitystä.
  • Jos työtiloja on useampia, niin vaihdetaan työtilan ID($groupId) ja ajetaan koodi uudelleen.
  • Jos muutoksen jälkeen lataa tiedoston Power BI työpöytäsovellukseen on siinä edelleen vanha datalähde. Tämä on kätevä tapa korjata tilanne, jos jotakin menee pieleen, mutta aiheuttaa myös sen, että jos datalähdettä päivitetään, joutuu sen lähteen päivittämään samalla manuaalisesti.
  • Jos ajon jälkeen tulee ilmoitus, että on ei muutettuja datasettejä (kuvassa ei ole) voi ajaa koodin uudelleen, jos tämä ei auta kannattaa datasetti käydä vaihtamassa manuaalisesti, ellei muuten tiedä mistä ongelma voisi johtua.
 

Koodi:

  1. Etsii työtilasta kaikki lähteet missä on käytetty parametreissa määriteltyjä lähteitä.
  2. Koodi ottaa datasetin haltuun tunnukselle millä sitä ajetaan.
  3. Koodi vaihtaa datasettien lähteet parametreissa määriteltyihin.
  4. Lopuksi koodi hakee vielä datasetit missä datasetin vaihto epäonnistui ja näyttää näiden ID.
#Set group ID and server paremeters $groupId = 'e23ec697-4f08-4f44-8818-ae3c518fbaaf'#Edit $DatasourceType = 'Sql' $Server = 'etl' #Edit $DataBase = 'reportserver' #Edit $ServerNew = 'etl2' #Edit $DataBaseNew = 'reportserver' #Edit ############################### write-host("Getting all datasources") $AllDataSetsinWorkspacestoNewSource = Get-PowerBIDataset -WorkspaceId "$groupId"| Foreach { $dsId = $_.Id; Get-PowerBIDatasource -DatasetId $dsId -Scope Organization | Where-Object { $_.DatasourceType -eq $DatasourceType -and ($_.ConnectionDetails.Server -eq "$Server" -and $_.ConnectionDetails.Database -eq $database) } | Foreach { $dsId } } write-host("Got datasources:" + $AllDataSetsinWorkspacestoNewSource.count) write-host("$AllDataSetsinWorkspacestoNewSource") #Takeover datasets write-host("Takeover datasets") $AllDataSetsinWorkspacestoNewSource | Foreach { $datasetId = $_.Guid; Invoke-PowerBIRestMethod -Url "groups/$groupId/datasets/$datasetId/Default.TakeOver" -Method Post; } #Create Body for change sources $updateDetails= '{ "updateDetails": [ { "datasourceSelector": { "datasourceType": "'+$DatasourceType+'", "connectionDetails": { "server": "'+$Server+'", "database": "'+$database+'" } }, "connectionDetails": { "server": "'+$ServerNew+'" , "database": "'+$DataBaseNew+'" } } ] }' #Change sources write-host("Change sources and refresh") $AllDataSetsinWorkspacestoNewSource | Foreach { $datasetId = $_.Guid; Invoke-PowerBIRestMethod -Url "groups/$groupId/datasets/$datasetId/Default.UpdateDatasources" -Body $updateDetails -Method Post; Invoke-PowerBIRestMethod -Url "datasets/$datasetId/refreshes" -Method Post; } write-host("All Changes done") #Get datasets that did not change write-host("Get not Changed datasets") $AllDataSetsinWorkspacestoNewSource = Get-PowerBIDataset -WorkspaceId "$groupId"| Foreach { $dsId = $_.Id; Get-PowerBIDatasource -DatasetId $dsId -Scope Organization | Where-Object {$_.DatasourceType -eq $DatasourceType -and ($_.ConnectionDetails.Server -eq $Server -and $_.ConnectionDetails.Database -eq $DataBase)} | Foreach { $dsId } } write-host("Got all not changed datasources:" + $AllDataSetsinWorkspacestoNewSource.count) write-host("$AllDataSetsinWorkspacestoNewSource") write-host("All done") ################

Lisää ajankohtaisia julkaisuja:

Avoimen datan hyödyntäminen automaattisesti Power BI:tä käyttäen
Tutustu tarinaan
Onko tekoälyn hyödyntämisestä vielä(kään) konkreettista hyötyä kilpailukyvylle?
Jo vuosia on puhuttu, että tekoälyn (AI) hyödyntäminen mullistaisi teollisen tuotannon ja palvelut lisäämällä tehokkuutta ja tuottavuutta. Missä ne konkreettiset hyödyntämismahdollisuudet sitten oikein piilevät?
Tutustu tarinaan
Johdatko toimintaasi tietoon perustuen?
Tutustu tarinaan
The effect of preconceptions on the results of machine learning
The use of machine learning and artificial intelligence offers many possibilities, such as the improvement of medical treatment and diagnosis, identifying potential safety hazards, and advancing scientific research. However, when used inappropriately, data models can also perpetuate inequality or cause people and companies to focus on improving metrics to the detriment of actual performance.
Tutustu tarinaan
Organisaation hierarkian hallintaratkaisu Microsoft Power Platformia hyödyntäen 
Yleinen tilanne varsinkin suuremmissa yrityksissä on se, että olemassa olevat ERP-, henkilöstö- taikka taloushallinnon ohjelmistot tarjoavat mahdollisuuksia hierarkioiden luomiseen ja ylläpitämiseen. Mutta entä jos valmiit ratkaisut eivät tue yrityksen tarvetta, taikka toimivat turhan kankeasti käyttötarkoitukseen?
Tutustu tarinaan

Lisää ajankohtaisia julkaisuja:

Avoimen datan hyödyntäminen automaattisesti Power BI:tä käyttäen
Tutustu tarinaan
Onko tekoälyn hyödyntämisestä vielä(kään) konkreettista hyötyä kilpailukyvylle?
Jo vuosia on puhuttu, että tekoälyn (AI) hyödyntäminen mullistaisi teollisen tuotannon ja palvelut lisäämällä tehokkuutta ja tuottavuutta. Missä ne konkreettiset hyödyntämismahdollisuudet sitten oikein piilevät?
Tutustu tarinaan
Johdatko toimintaasi tietoon perustuen?
Tutustu tarinaan
The effect of preconceptions on the results of machine learning
The use of machine learning and artificial intelligence offers many possibilities, such as the improvement of medical treatment and diagnosis, identifying potential safety hazards, and advancing scientific research. However, when used inappropriately, data models can also perpetuate inequality or cause people and companies to focus on improving metrics to the detriment of actual performance.
Tutustu tarinaan
Organisaation hierarkian hallintaratkaisu Microsoft Power Platformia hyödyntäen 
Yleinen tilanne varsinkin suuremmissa yrityksissä on se, että olemassa olevat ERP-, henkilöstö- taikka taloushallinnon ohjelmistot tarjoavat mahdollisuuksia hierarkioiden luomiseen ja ylläpitämiseen. Mutta entä jos valmiit ratkaisut eivät tue yrityksen tarvetta, taikka toimivat turhan kankeasti käyttötarkoitukseen?
Tutustu tarinaan