Yllättävän usein on tarve visualisoida lukumääriä, lukarvoja tai tiloja oman kuvan päälle. Esimerkiksi
- mitkä junan istumapaikoista ovat varatuimpia
- mitkä salin istumapaikat ovat varattuja missäkin näytöksessä
- mitkä ovat lämpötilat toimistorakennuksen eri huoneissa
- mikä on varastohallin eri alueiden varastoarvo
Näitä ei voi Power BI:llä suoraan toteuttaa, mutta onneksi Power BI:ssä voi käyttää räätälöityjä visualisointeja (Custom Visuals). Omia karttapohjia pääsee kätevästi hyödyntämään OKViz:in Synoptic panelilla.
Esimerkki – Äänestystuloksen visualisointi
Havainnollinen tapa esittää eduskunnan äänestystuloksia on esittää ne istuntosalin istumakartan päällä. Kansanedustajat on valmiiksi niputettu puolueittain ja kustakin esitetään nimen lisäksi valokuva. Tähän päälle pitäisi vielä taikoa mitä kukin kansanedustaja on äänestänyt.
Kuulostaa hankalalta, mutta ei itseasiassa ole.
Äänestysdatan hakeminen
Äänestysdata on saatavilla eduskunnan sivuilta avoimen rajapinnan kautta. Haetaan istunnon 37605 äänestystulokset käyttäen seuraavaa url-osoitetta: http://avoindata.eduskunta.fi/api/v1/tables/SaliDBAanestysEdustaja/rows?columnName=AanestysId&columnValue=37605&page=0&perPage=100
Käydään datan lataaminen yksityiskohtaisemmin läpi, sillä tällä kertaa varsinaiseen dataan ei pääse kiinni aivan suoraan.
Get Data – Web ja käytämällä ylläolevaa osoitetta päästään hieman hämmentävän näköiseen tilaan.
Missä se data on? Klikataan rowData:n kohdalla olevaa List-linkkiä.
Nyt jokaisen linkin takana on oma taulunsa jossa on yhden äänestäjän tiedot. Haluan yhdistää tämän kaiken yhteen tauluun, joten painan vasemman yläkulman To Table -painiketta.
Ei isompia näkyviä muutoksia, mutta nyt on mahdollista Column1-otsikon oikealla puolella olevasta painikeesta purkaa listan arvot tähän soluun (Extract Values). Käytetään erottimena kaksoispistettä.
Nyt haluttu data on yhdessä sarakkeessa. Seuravaksi jaetaan sarake useaksi sarakkeeksi käyttäen erottimena kaksoispistettä. Split column -komento löytyy hiiren oikealla sekä näytön yläosan työkaluriviltä.
Prosessissa katosi sarakkeiden otsikot, joten ne pitää vielä lisätä käsin.
Hyvältä näyttää!
Kahden kyselyn yhdistäminen
Valitettavasti käytetty kysely palauttaa maksimissaan 100 riviä. Tämä ei riitä vaan haluamme lisätä tauluumme vielä seuraavat 100 riviä. Ensimmäisen 100 rivin kanssa piti suorittaa useita työvaiheita, mutta nyt päästään oleellisesti helpommalla. Power BI ei muokkaa kyselyvaiheessa varsinaista aineistoa vaan rakentaa Power Query lauseita. Samat lauseet voidaan ajaa samanrakenteiseen aineistoon uudestaan.
Tehdää alkuperäisestä kyselystä kopio (Kyselyn päältä hiiren oikea ja Duplicate).
Uudessa kyselyssä on valmiina kaikki vaiheet (näytön oikea reuna: Applied Steps) joita voi myös muokata. Käydään muokkaamassa Sourcen kohdalta alkuperäistä urlia ja vaihdetaan sen tilalle: http://avoindata.eduskunta.fi/api/v1/tables/SaliDBAanestysEdustaja/rows?columnName=AanestysId&columnValue=37605&page=1&perPage=100
Yhdistetään lopuksi kaksi kyselyä jotta päästään tekemään visualisointia. Yhdistäminen tehdään Append-toiminnolla. Tällä kertaa luodaan yhdistämisen pohjalta uusi kysely joka sisältää kaikki kahdella kyselyllä hakemaamme 199 riviä.
Varsinaiseen tietomalliin haluan ladata vain yhdistetyn tietojoukon. Käydään ottamassa muista kyselyistä ruksi pois Enable Load -kohdasta, jolloin niitä ei ladata tietomalliin.
Äänestysvaihtoehdot
Kansanedustajien äänet ovat aineistossamme arvoiltaan Ei, Jaa sekä Poissa. Käyttämämme visualisointi vaatii kuitenkin numeerisia arvoja, joten tehdään taulukko jossa kerrotaan miten äänet vastaavat numeroarvoja.
Kyselyt ovat nyt valmiit. Ladataan ne tietomalliin (Apply & Close). Valmis malli näyttää tältä.
Visualisointi
Haluan tehdä visualisoinnin tämän kuvan päälle:
Käytän siihen Synoptic Panelia jonka käytöstä löytyy hyvä blogikirjotus.
Kuvasta pitää ensin tehdä SVG-tiedosto johon on kuvattu käytettävät alueet ja niiden tunnisteet. Tähän käytän Synoptic Designeria (https://synoptic.design/).
Lataan työkaluun pohjana käyttämäni kuvan jonka jälkeen määrittelen alueet joita käytän visualisoinnissa (kuvassa keltaiset laatikot).
Alueita voi määritellä kuvankäsittelyohjelmista tutun taikasauvan savulla. Taikasauvalla aluetta klikkaamalla se tunnistetaan ja rajataan automattisesti. Näksyttelin esimerkkini alueista 3/4 taikasauvalla. Loput jouduin rajaamaan käsin.
Sen verran alueiden määrittelyssä on työtä että tällä kertaa visualisoin ainoastaan keskustan ja rkp:n äänet.
Kuvan alueiden ja varsinaisen datan yhdistäminen tehdään alueiden (Areas) nimillä.
Kuvassa keltaisena korostetulle alueelle on annettu nimi 800 joka on Tapani Töllin EdustajaNumero. Kyseinen alue sijaitsee kuvassa Tapani Töllin päällä.
Kun kaikki alueet on nimetty voidaan SVG-kuva tallentaa Export to Power BI -kommenolla.
Power BI desktopiin pitää tuoda käyttämämme custom visualisointikontrolli. Voit ladata sen täältä.
Lisätään visualisointiin Synoptic Panel ja asetetaan
- Category = EdustajaHenkiloNumero
- Measure = Arvo (äänestysten arvot -aputaulusta)
Vasta tämän jälkeen voidaan asettaa visualisoinnin pohjana käytettävä SGV-tiedosto.
Kartta saadan näkyviin, mutta kaikki arvot näkyvät samoina sinivihreinä laatikoina.
Määritellään vielä eri äänien värit. Valitaan oikea visualisointi ja maalitelan takaa löytyy ulkoasun asetukset. States-kohdassa märitellään äänestystuolosten arvoiksi
- Ei = punainen
- Poissa = keltainen
- Jaa = vihreä
Jolloin annetut äänet näkyvät havainnollisesti väreinä henkilön kohdalla.
Lisätään vielä muutama peruskäppyrä ja olemme valmiit.
Voit tutusta visualisointiin täältä.
Olisi hienoa jos eduskunnan avoimen datan rajapinnasta saisi yhdellä kyselyllä ulos koko vuoden äänestysten tulokset. Silloin tätä samaa visualisointia voisi käyttää niiden kaikkien visualisoimiseen. Lisäisi vain suodattimen jolla valitaan minkä äänestyksen tulosta haluaa tarkastella.
Kuvat: https://www.eduskunta.fi/FI/lakiensaataminen/taysistunnon_verkkolahetykset/Istumajarjestys/Sivut/default.aspx
Tämä kirjoitus on osa laajempaa sarjaa jossa käyn läpi Office 365:n työkaluja. Mistä niissä on kyse ja miten niitä voisi hyödyntää.