Ilman Dynamics 365 -taustaa Dataverse saattaa tuntua loputtomalta yllätyslaatikolta. Aina löytyy jotain uutta. Tällä kertaa tutustutaan yhteen kiinnostavaan ominaisuuteen, laskettuihin sarakkeisiin.

Laskettuja sarakkeita on kahdentyyppisiä.

  • Koostesarake (rollup) = Kooste riviin liittyvistä riveistä. Esimerkiksi montako kontaktia tähän asiakkaaseen liittyy.
  • Laskennallinen (calculated) sarake – Sarakkeiden arvojen kesken suoritettavaa laskentaa. Esimerkiksi keskiarvo sarakkeista A, B ja C. Laskennassa voi käyttää myös relaation takaa löytyviä sarakkeita.

Tämähän vaikuttaa todella kätevältä. Tutustutaan hieman tarkemmin.

Esimerkki – Asuntojen siivoaminen

Käytetään esimerkkinä ratkaisua, jolla ylläpidetään tietoa huoneiden, asuntojen ja asuinrakennusten siivouksesta. Tietomallissa kukin huone (room) liittyy asuntoon (apartment), joka taas liittyy rakennukseen (building).

Tietoja ylläpidetään model-driven Power Apps:lla.

Yksittäisiä huoneita merkitään siivotuksi mobiilikäyttöisellä Power Appsilla.

Montako asunnon x huonetta on siivottu?

Haluaisimme näyttää työkaluissa siivottujen huoneiden lukumäärän per asunto. Tämä onnistuu kätevästi koostesarakkeella (rollup). Sillä voi

  • Hakea kaikki yksittäiseen riviin liittyvät rivit (tähän asuntoon liittyvät huoneet)
  • Haettuja rivejä voi suodattaa (ainoastaan siivotut huoneet)
  • Lopputuloksena saadusta joukosta voidaan yhden sarakkeen perusteella suorittaa laskentaa (count, sum max, min, avg). Lasketeaan siivottujen huoneiden (=rivien)

Luodaan asunnolle uusi sarake (Count of rooms cleaned). Se on tyypiltään kokonaisluku ja sen toiminnaksi (behaviour) määritellään kooste (rollup).

Tallennuksen jälkeen määrittellään laskentasääntö. Haluamme laskea asuntoon liittyvien siivottujen huoneiden lukumäärän.Se tehdään seuraavasti.

Miten suuri osuus asunnon huoneista on siivottu?

Tarkemmin ottaen haluamme tietää asunnon huoneiden siivousprosentin. Laskentaa varten tarvitsemme tiedon asunnon huonemäärästä. Luodaan toinen koostesarake (Count of rooms), jonka laskentasääntö on hieman yksinkertaisempi.

Lopuksi luodaan kolmas sarake (Cleaned %), johon lasketaan edellisten sarakkeiden arvoja hyödyntäen siivousprosentti. Sarake on desimaaliluku ja toiminnaltaan laskennallinen (Calculated).

Pääsemme määritelemään sarakkeen laskentasäännön. Rivin tietojen lisäksi, voimme hyödyntää relaatioiden takaa löytyviä tietoja.

Lasketaan sarakkeen arvoksi siivottujen huoneiden prosenttiosuus kaikista asunnon huoneista.

Koostesarakkeiden päivitys

Kaikki on valmista, mutta uusien sarakkeiden arvot ovat tyhjiä.

Syy selviää kun avaamme yhden asunnon tiedot.

Koostesarakkeiden arvoja ei lasketa reaaliajassa, vaan massa-ajona 12h sarakkeen luonnin jälkeen. Tämän jälkeen ne päivitetään kerran tunnissa.

Kyllä. Kerran tunnissa.

Arvon voi päivittää myös manuaalisesti laskimen takaa ilmestyvällä Recalculate-painikkeella.

Päivitetään käsin muutama. Huomaa että laskennalliset (calculated) sarakkeet ovat reaaliaikaisia. Niiden arvot päivittyvät heti.

Mutta ei tätä voi käyttää työntekijän mobiilisovelluksessa. Kun huone merkitään siivotuksi, tulee asunnon siivousprosentin nousta samantien. Muuten koko kenttä vain hämmentää.

Koostesarakkeen päivittäminen flow’lla

Saako koostesarakkeen pakotettua päivittymään? Jos sen päivittäisi mobiilisovelluksesta käsin aina kun huone merkitään siivotuksi?

Koostesarakkeen arvon voi päivittää API-kutsulla. Mutten ole varma kannattaako tähän leikkiin lähteä. Ennemmin ratkaisisin mobiilisovelluksessa tämän ongelman jotenkin toisin.

Miten suuri osuus rakennuksesta on siivottu?

Nyt tiedämme, miten suuri osuus asunnon huoneista on siivottu. Voidaanko rakennukselle luoda vastaavat sarakkeet, johon laskemme

  • miten monta huonetta rakennuksessa on
  • miten moni niistä on siivottu
  • mikä on rakennuksen siivousprosentti

Tämä ei onnistu. Koostesarakkeen laskennassa ei voi hyödyntää relaation takana olevia laskettuja sarakkeita (asunnon huoneiden lukumäärä jne).

Laskettujen sarakkeiden hyödyntäminen flow’ssa

Laskettujen sarakkeiden arvoja voi lukea flow’lla normaaliin tapaan.

HUOMIO! Lasketun sarakkeen arvon muuttuminen ei voi aiheuttaa flow’n käynnistymistä, sillä se ei ole riviin kohdistuva päivitys (ei laukaise When row is created or modified -triggeriä).

Flow’ta ei siis voi käynnistää, kun asunnon siivousprosentiksi tulee 100. Mikä olisi todella kätevää. Samaan lopputulokseen päästään toki

  • käynnistämällä flow aina kun huone merkitään siivotuksi. Tämän jälkeen tarkistetaan, onko asunnon kaikki huoneet siivottu
  • tarkistamalla säännöllisin väliajoin, onko asunnon kaikki huoneet siivottu

Canvas Power App ja lasketut sarakkeet

Laskettuja sarakkeitavoi käyttää Canvas Power Appsissa suodattimina ja hakuehtoina.

Items = Filter(Rooms, Apartment.'Cleaned %' > 35)

Mikäli laskettu sarake on relaation takana, on sen hyödyntäminen rajoitettua. Aivan kuten tavallistenkin sarakkeiden.

Mistä päästäänkin seuraavaan aiheeseen.

Sarakkeiden arvojen ketjutus

Dataverse ei ole (Power Appsin näkökulmasta) vapaasti kyseltävä tietokanta. Tyypillisin esimerkki tästä on seuraava.

Haluamme esittää galleriassa kaikkien rakennusten kaikki huoneet. Onnistuu.

Items = Rooms

Haluamme näyttää kustakin huoneesta, mihin asuntoon se kuuluu. Ei ongelmaa.

Text = ThisItem.Apartment.Name

Lisäksi haluamme näyttää, mihin rakennukseen asunto kuuluu.

Text = ThisItem.Apartment.Building.Name

Tämä ei onnistu. Voimme navigoida huone-riviltä ainoastaan yhden relaation eteenpäin (asuntoon). Rakennus on kahden relaation takana.

Ongelman voi ratkaista lisäämällä asunnolle (Apartment) laskennallisen sarakkeen (Name of the building).

Sarake sisältää rakennuksen nimen.

Näin huonelistaukseen saadaan näkyviin myös rakennus. Tarvittava tieto on yhden relaation takana apartment-taulussa.

Arvoja voi valuttaa tällä tavoin koko relaatioketjun läpi. Mikäli huoneita halutaan hakea (search) rakennuksen nimen perusteella, tulee rakennuksen nimi olla laskennallisena sarakkeena myös room-taulussa.

Vapaasanahakuja kun voi canvas Power Appsissa tehdä ainoastaan yhden tietolähteen sisällä.

PowerFx-sarake (preview)

Nykyään voi luoda sarakkeita, joiden arvo määritellään suoraan PowerFx:llä. Tuttua Canvas Power Appsista.

Näille sarakkeille ei määritellä lainkaan tietotyyppiä, vaan se määräytyy automaattisesti PowerFx-kaavan perusteella. Tallennuksen jälkeen et voi enää muokata PowerFx-kaavaa siten että lopputuloksen tietotyyppi vaihtuu toiseksi.

Toistaiseksi PowerFx-sarakkeet vastaavat laskennallisia sarakkeita. Koostesarakkeiden rakentaminen PowerFx:llä ei ole vielä tuettua.

Yhteenveto

Lasketut sarakkeet ovat käteviä. Laskenta tehdään yhdessä paikassa (Dataverse), jolloin samaa logiikkaa ei tarvitse toteuttaa erikseen jokaiseen sovellukseen. Tarvittaessa muutokset laskentaan tehdään keskitetysti yhdessä paikassa.

Koostesarakkeiden käytettäessä tulee muistaa, etteivät ne ole reaaliaikaisia. Se rajaa valitettavan paljon niiden käyttöä.