<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=266259327823226&amp;ev=PageView&amp;noscript=1">
Skip to content

Yrityksen datalähteet reaaliaikaisesti Power BI:hin

Olette varmaankin kuulleet mahdollisuudesta esittää Power BI:llä reaaliaikadataa? Normaalistihan tämä toteutetaan siten, että tiedot ohjataan IoT- tai Event-hubista Stream Analyticsiin, josta julkaistaan reaaliaikainen tietojoukko Power BI:hin. Siellä tietojoukosta voidaan rakentaa dashboard, joka esittää kyseistä reaaliaikaista tietoa.

Tämä on helppo tapa toteuttaa IoT-laitteilta lähtöisin olevan datan reaaliaikaista raportointia, mutta mitä jos haluaisit päivittää näyttöä reaaliajassa esimerkiksi latausprosessin päätyttyä Data Factoryssa, tai API-kutsun tullessa Logic Appsiin?

Sitä varten ei tarvitse koodata virtuaalista IoT-laitetta, joka keskustelee IoT-hubin kanssa, vaan voit luoda Azure Functionin, joka päivittää tietoja suoraan Power BI:n striimiin. Tämän jälkeen käytännössä mikä tahansa palvelu, joka pystyy tekemään HTTP POST -kutsun, voi päivittää Power BI:hin reaaliaikadataa.

Tällä tekniikalla voisi toteuttaa aiemmin mainittujen tapausten lisäksi vaikkapa neuvotteluhuoneiden reaaliaikaisen varausnäytön lähettämällä huoneen varaustiedot Power Appsia käyttäen tai valmisohjelmiston rajapintaa lukien. Mahdollista olisi myös lähettää tietoa suoraan OnPremises-lähteistä käyttämällä vain yhtä Azure Functionia tiedon välittämiseksi.

Arkkitehtuurillisesti Azure Functionin tarjoama rajapinta on vielä lisäksi hyvä julkaista keskitetyn rajapintahallinnan kautta. API Management tarjoaa esimerkiksi Oauth2-autentikoinnin yhdistettynä Azure AD-autentikaatioon. Tällä tavalla myös rajapintojen käyttöoikeushallinta saadaan pidettyä mukana normaalin käyttäjähallinnan piirissä, kun käyttöoikeus on kiinni AD-käyttäjissä rajapintojen sisäisten käyttäjien sijaan.

Tällä mallilla olemme rakentaneet useita Cloud1 Data Hub -konseptiin perustuvia tiedonjakelukerroksia.

Azure Functionin rakentaminen välittämään tietoa Power BI:hin

Ensimmäiseksi luodaan Power BI:hin reaaliaikastriimi eli virtautettava tietojoukko, jonka rakenne määritellään tarpeeseen sopivaksi (välitettävät tietueet ja niiden tietotyypit). Kun tietojoukko on luotu, täytyy muistaa ottaa talteen sen yhteystiedot, jotta sitä voidaan kutsua Azure Functionista. Tietojoukkoja voidaan luoda useampia, ja niitä voi myös päivittää tarpeen mukaan.

reaaliaikadata-kuva1-virtautettava-tietojoukko

Tämän jälkeen luodaan dashboardille raportointiobjektit, jotka linkitetään luotuun tietojoukkoon. Nykyään on myös mahdollista luoda raportti reaaliaikaisesta tietojoukosta ja julkaista sen objekteja dashboardille. Näin pystyy vaikuttamaan julkaistujen objektien ulkonäköön huomattavasti enemmän kuin lisäämällä se sinne suoraan.

reaaliaikadata-kuva2-raportointiobjektit

Tarvittava Azure Functionin koodi on sinällään yksinkertainen. Aluksi on http-triggeröidyn funktion perusrakenne, jossa otetaan ympäristömuuttujasta kiinni Power BI:n striimin yhteystiedot, sekä kutsun bodysta välitettävät tiedot. Nämä välitetään sille aliohjelmalle, joka rakentaa välitettävän JSON-objektin ja lähettää sen Power BI:n striimiin.

reaaliaikadata-kuva3-azure-function-koodi

Esimerkissä JSON:in rakentamiseksi on käytetty Newtonsoftin kirjastoa, mutta yksinkertaisen rakenteen luo helposti myös vakio string-käsittelyllä. Toki monimutkaisempia tai vaihtuvia rakenteita välitettäessä kirjaston käyttö saattaa auttaa koodin ylläpidossa.

reaaliaikadata-kuva4-newtonsoft-kirjasto

Kun Function on toimitettu Azureen, voidaan sitä testata suoraan sen hallintaikkunan kautta. Välitetty tieto tosiaan päivittyy lähes viipymättä Power BI:hin. Käytössä on tämän jälkeen yleiskäyttöinen rajapinta, jota tukee monet niin Azuren palveluista kuin OnPremises-järjestelmistäkin.

Ennen kaikkea esitelty ratkaisutapa todistaa sen, miten helppoa eri Azure-palvelujen integroiminen yhteen on. Lisäksi se valottaa, miten moderni data platform kuten Cloud1 Data Hub on paljon muutakin kuin vain tietovarastointialusta.

reaaliaikadata-kuva5-hallintaikkuna