Organisaatiot pohtivat parhaillaan pitäisikö PowerAppseille ja Flow:lle rakentaa hallintamalli ja millainen se olisi. Ennen sitä on kuitenkin hyvä selvittää nykytila.

Mutta mistä näen montako PowerAppsia ja Flow:ta tenanttiin on jo luotu? Ketkä niitä ovat tehneet?

Tiedon saa kaivettua esille PowerAppsin (tai Flow:n) Admin center:istä (https://admin.powerapps.com). Kunkin ympäristön (Environment) kohdalta löytyvät sen resurssit (Resources), jonka alta näet kaikki ympäristön PowerAppsit ja Flow:t.

powerapps admin.png

Mikäli ympäristöjä on useita ja niihin on luotu useita ratkaisuja, on tällä menetelmällä hankalaa muodostaa yleiskuvaa tilanteesta.

Toteutetaan yksinkertainen ratkaisu, joka autaa tilannekuvan muodostamisessa. Ratkaisussa

  • Haetaan Flow:n avulla tiedot tenantin kaikista ympäristöistä, PowerAppseista ja Flow:sta
  • Tallennetaan haetut tiedot omiksi JSON tiedostoikseen
  • Rakennetaan Power BI raportti, joka käyttää tietolähteenään muodostettuja tiedostoja

Aloitetaan!

Tietojen kerääminen – Flow

Luodaan manuaalisesti käynnistyvä Flow, joka kerää tenantista tarvitsemamme tiedot. Luodaan PowerAppseja, Flow:ta sekä Flow:n tekijöitä varten omat taulukkomuuttujat. Yksittäisen Flow:n tekijää varten riittää merkkijonomuuttuja.

get all flow 1.png

Seuraavaksi haetaan ympäristö kerrallaan PowerAppsit ja Flow:t. Tähän käytetään Get Apps as Admin ja List Flows as Admin yhdistimiä. Flow:n suorittajalla tulee olla kaikkiin ympäristöihin hallinnointioikeudet.

get all flow 2.png

Flow:den kerääminen

Tenantissa voi olla useita ympäristöjä, joista jokaisen Flow:t saadaan ulos omana JSON -muotoisena merkkijononaan (List Flows as Admin). Muodostetaan näistä Power BI:tä varten yksi JSON-tiedosto (flows.json).

Luvassa on merkkijonoaskartelua.

Käytännösssä teemme seuraavaa.

Saamme tiedot ensimmäisen ympäristön Flow:sta omana JSON:ina.

[
  {"flowname": "flow 1 on environment 1"},
  {"flowname": "flow 2 on environment 1"}
]

Sekä toisen ympäristön Flow:t vastaavana omana JSON:ina.

[
  {"flowname": "flow 1 on environment 2"},
  {"flowname": "flow 2 on environment 2"}
]

Yhdistämme nämä yhdeksi merkkijonoksi.

[
  {"flowname": "flow 1 on environment 1"},
  {"flowname": "flow 2 on environment 1"},
  {"flowname": "flow 1 on environment 2"},
  {"flowname": "flow 2 on environment 2"}
]

Poistetaan aluksi kustakin JSON:sta ensimmäinen ja viimeinen merkki ([ ja ]).

Muutetaan ensin List Flows as Admin -toiminnon paluuarvo merkkijonoksi, jotta tulevat (merkijono-)operaatiot toimivat.

Tämän jälkeen poistetaan ensimmäinen merkki.

get all flow 3.png

Toiminnoissa käytetyt kaavat ovat seuraavat.

string(body('List_Flows_as_Admin')?['value'])
substring(outputs('Compose_2'),0,sub(length(outputs('Compose_2')),1))

Seuraavaksi lasketaan jäljelle jääneen merkkijonon pituus ja vähennetään siitä yksi.

Tätä tietoa hyödyntäen napsaisemme merkkinjonon poikki viimeisen merkin kohdalta.

get all flow 4.png

Merkkijonon pituuden laskeminen:

add(length(outputs('Compose_last_char_removed')),-1)

Viimeisen merkin poistaminen:

substring(outputs('Compose_last_char_removed'),1,outputs('Compose_length'))

Näin ensimmäinen ja viimeinen merkki on poistettu ja voimme lisätä muodostuneen JSON:in muuttujan loppuun.

get all flow 5.png

Muuttujan sisältämät JSON:it liitetään myöhemmin vielä yhteen.

PowerAppsien käsittely

PowerAppsit lisätään omaan muuttujaansa täsmälleen samalla tavalla kuin Flow:t.

get all flow 6.png

Flow tekijät

PowerApps JSON sisältää jokaisen PowerAppsin tekijän selkokielisen nimen. Flow JSON taas sisältää tekijästä ainoastaan UserID:n. Haluamme esittää raportilla selkokieliset nimet, joten haetaan omaan JSON-tiedostoon kaikkien Flow:n tekijöiden tiedot.

Käydään Flow:t läpi ja

  • Haetaan omistajan profiili
  • Tallennetaan omistajan nimi muuttujaan. Mikäli omistajan tietoja ei löydy, asetetaan nimeksi Unknown.
  • Lisätään Flow Makers muuttujaan uusi rivi, jossa on JSON muodossa tekijän tiedot (userID ja nimi).

get all flow 7.png

Tiedostojen muodostaminen

Nyt meillä on omissa taulukkomuuttujissaan tarvitsemamme tiedot. Seuraavaksi tallennetaan ne omiin tiedostoihinsa.

Muunnetaan taulukkomuuttuja merkkijonoksi Join -toiminnolla. Erotinmerkkinä käytetään pilkkua eli kukin taulukon alkio erotetaan merkkijonossa toisistaan pilkulla.

Lopuksi merkkijono tallennetaan tiedostoksi OneDriveen. Tässä vaiheessa merkkijonon ympärille laitetaan kaarisulut, jotka vaivalla poistimme aikaisemmin.

get all flow 8.png

Vastaavalla tavalla tallennetaan PowerAppsit ja Flow:den tekijät. Ympäristöt sisältävä JSON tallennetaan sellaisenaan.

get all flow 9.png

Lopputulos

Valmis Flow näyttää tältä.

get all flow 10.png

Kun työnkulun ajaa, ilmestyy tarvittavat JSON-tiedostot OneDrive -kansioon.

get all flow 11.png

Tarvittava aineisto on valmis. Vain se luvattu raportti puuttuu.

Power BI raportti

Tietojen lataaminen

Luodaan tyhjä raportti ja haetaan siihen tiedot PowerAppseista (Get data -> valitaan lähteeksi JSON).

BI_get data.png

Poimitaan kovalevyltä oikea JSON tiedosto (Apps.json).

BI_pick file.png

Muodostamamme JSON sisältää kasan tietueita. Muutetaan ne taulukkomuotoon (To table).

BI_to table.png

Tämän jälkeen pääsemme valitsemaan, mitkä tietueen sarakkeista otetaan mukaan. Tietenkin kaikki.

BI_to table 2.png

Lähes kaikki kiinnostava tieto löytyy properties -tietueesta. Avataan vielä sekin ja poimitaan mukaan vähintään

  • Owner
  • CreatedBy
  • DisplayName
  • CreatedTime
  • SharedGroupsCount
  • SharedUsersCount
  • Environment
  • EmbeddedApp

BI_to table 3.png

Joudumme vielä avaamaan CreatedBy ja Environment -tietueet omiksi sarakkeikseen.  Hengästyttävää kliksuttelua, jonka jälkeen voidaan poistaa sarakkeet joita ei halutakaan mukaan.

Sarakkeiden uudelleennimeämisen jälkeen aineistomme näyttää tältä.

BI app ready.png

Vastaavalla tavalla tuodaan Flow:t, Flow:den tekijät sekä ympäristöt sisältävät JSON tiedostot mukaan.

Tietomallin muodostaminen

Seuraavaksi rakennetaan tietomalli. Se on yksinkertainen. Flow:t ja PowerAppsit liittyvät ympäristöihin (Environment name) ja Flow:t liittyvät niiden tekijöihin (UserID).

BI datamodel.png

Vihdoin pääsemme tekemään sitä varsinaista raporttia.

Visualisoinnit

Lisätään kortti-visualisoinnit seuraaville lukumäärille

  • PowerAppsit
  • Flow:t
  • PowerAppsien tekijät
  • Flow tekijät

BI report 1.png

Lisätään yksinkertainen pylväskuvaaja, josta näkee ketkä PowerAppseja ovat tehneet ja miten paljon.

BI report 2.png

Sitten vastaava käppyrä Flow:sta. Tekijän display name löytyy omasta taulustaan. Erotellaan kuvaajassa Flow:t vielä niiden tilan (state) mukaan. Näin näemme jos joku on tehnyt suuren määrän työnkulkuja, jotka ovat stopped tilassa.

BI report 3.png

Viimeiseksi lisätään kuvaaja ympäristöistä. Kunkin ympäristön kohdalla näkyy, montako PowerAppsia ja Flow:ta se sisältää.

BI report 4.png

Kun vielä maltamme hieman siistiä raporttia, näyttää se näyttää tältä!

BI report ready.png

Nyt voit milloin tahansa ajaa Flow:n ja sirtää muodostuneet JSON-tiedostot raportin käyttämien tilalle.  Lopuksi päivität raportin (refresh) ja näet, missä menette juuri nyt  PowerAppsien ja Flow:den osalta.

Yhteenveto

Tämä on yksinkertainen tapa saada yleiskuva ympäristöstä, johon on tehty paljon ratkaisuja. Raporttiin voi tietenkin lisätä paljon muutakin kiinnostavaa (muokkauspäivät, jaot, mitkä PowerAppseista ovat SharePoint-listojen muokkauksia jne).

Tällainen snapshot ei kuitenkaan ole oikea työkalu jatkuvaan ympäristöjen seurantaan ja hallinnointiin. Sitä varten kannattaa toteuttaa aivan oikea raportointi, esimerkiksi Center of Excellence Starter Kit:iä hyödyntäen.