Yksi tämän vuoden kuumista jutuista (Microsoft-maailmassa) on Common Data Service (CDS) for Apps. Pöhinään nähden on hämmästyttävää, miten vähän siitä loppujen lopuksi yleisesti tiedetään.

CDS for Apps tarjoaa monenlaisia mahdollisuuksia, mutta tarkastellaan sitä tällä kertaa seuraavasta näkökulmasta.

CDS for Apps tarjoaa loppukäyttäjän käyttöön tietokannan ominaisuudet. Suorituskyvyn, skaalautuvuuden, relaatiot, näkymät ja indeksit. Siten ettei käyttäjän tarvitse ymmärtää tietokannoista juuri mitään.

PowerAppsin, Flown, SharePointin ja Power BI:n avulla voi hyvin vähäisellä teknisellä osaamisella rakentaa aivan oikeita ratkaisuja. Asioiden monimutkaistuessa muodostuu usein juurikin tietovarasto (SharePoint) rajoitteeksi. Korvaamalla SharePointin listat CDS for Apps:llä, voidaan rakentaa entistä laajempia (lue monimutkaisempia) kokonaisuuksia. Ilman ulkopuolisia kehittäjiä.

Houkuttelevaa. Mutta onko se totta?

On aika kokeilla tätä ihmelaitetta.

Esimerkki – Mobiilisovellus myymälöiden tarkastajille 2.0

Aiemmassa kirjoituksessa teimme mobiiliratkaisun myymälöiden auditointiin. 499 myymälää, jotka käytiin arvioimassa kerran. Tehdään tällä kertaa ratkaisu, joka mahdollistaa myymälöiden tarkastamisen vaikka kuukausittain.

Tietomallimme monimutkaistuu heti. Tarvitsemme omiin tauluihinsa

  • Myymälät – Nimi, osoite, kuvaus, sijainti jne
  • Tarkastusjaksot  – Jakson nimi, alku- ja loppupäivä
  • Tarkastukset – Varsinainen tarkastustapahtuma. Tarkastuksen tulos, aika ja tarkastaja. Jokainen tarkastus liittyy yhteen myymälään sekä yhteen tarkastusjaksoon.

Kuvana suurinpirtein näin.

audits db.png

Ei vielä hirveän monimutkaista. Otetaan ratkaisun pohjaksi CDS for Apps ja katsotaan mitä tästä tulee.

Tietomalli

Entiteettien luonti

CDS for Apps:iin pääsee luomaan uusia ”tauluja” eli entiteettejä osoitteessa https://web.powerapps.com/ ja valitsemalla Data -> Entities.  Luodaan ensimmäisenä entiteetti myymälöille (Stores).

new entity.png

Haluamme tallentaa myymälöistä seuraavat tiedot

  • Nimi
  • Osoite
  • Postinumero
  • Kaupunki
  • Tyyppi
  • Lisätiedot
  • Latitude
  • Longitude
  • Id

Nämä ovat entiteetin kenttiä (field). Kenttien tietotyypit kannattaa laittaa heti kohdilleen. Valikoima on riittävä.

create entity stores.png

Pienen näpyttelyn jälkeen Stores-entiteetti näyttää seuraavalta.

entity stores ready.png

Luodaan seuraavaksi tarkastusjaksot -entiteetti (Store audit periods), joka sisältää seuraavat kentät

  • Jakson nimi
  • Jakson alkupäivä
  • Jakson loppupäivä

entity mointhly audits.png

Viimeiseksi luodaan koko ratkaisun pihvi, myymälöiden tarkastustapahtumat (Store audit events). Kentät ovat seuraavat

  • Myymälän siisteys
  • Tuotteiden näkyvyys myymälässä
  • Auditoinnin suoritushetki
  • Auditoija
  • Auditointi suoritettu (kyllä / ei)

entity audit events.png

Relaatioiden rakentaminen

Kukin myymälän tarkastuskäynti liitty yhteen myymälään ja yhteen tarkastusjaksoon.

Lisätään nämä relaatiot malliimme Add relationship -toiminnolla. Kyseessä on auditointitapahtumien näkökulmasta monen suhde yhteen (Many-to-one) relaatiot.

entity add relation.png

Monen suhde yhteen relaatiot näkyvät entiteetissä lookup-kenttinä.

entity add relation2.png

Tietomallimme runko on valmis. Entiteettien kentät sekä entiteettien väliset suhteet on määritelty.

Voimme ryhtyä viilaamaan.

Logiikan sisällyttäminen tietomalliin (rollups, calculations)

CDS for Appsin kantava idea on että saman tietomallin päälle voi helposti rakentaa useita sovelluksia. Tällöin on järkevää toteuttaa osa laskennasta / logiikasta suoraan tietomalliin.

Montako myymälää tällä tarkastusjaksolla on tarkastettu?

Lasketaan kullakin tarkastusjaksolla tarkastettujen myymälöiden lukumäärä. Tämä on helppo toteuttaa ns. rollupin avulla. Lisätään Store Audit Periods entiteetille uusi kenttä (Audit Count) ja luodaan Rollup.

entity add rollup.png

Rollupin avulla voimme tehdä laskentaa hyödyntäen entiteettiin (relaatioiden avulla) liitettyjen toisten entiteettien arvoja. Tekemämme rollup laskee yhteen kuhunkin tarkastusjaksoon liittyvien tarkastusten lukumäärän. Ja ainoastaan ne joiden tila on ”tehty”.

entity add rollup2.png

Mikä tarkastusjakso on parhaillaan käynnissä?

Myöhemmin toteutettavan mobiilisovelluksen avulla käyttäjä voi suorittaa tarkastuksia ainoastaan nykyisellä tarkastusjaksolla. Sovelluksen toteuttamista helpottaa, kun tiedetään mikä tarkastusjaksoista on menossa.

Toteutetaan tämä suoraan tietomalliin. Luodaan tarkastusjaksolle uusi kenttä (Current Day), jonka arvoksi laitetaan laskennallista kenttää hyödyntäen kuluva päivä.

entity add calcualte1.png

Tämän jälkeen lisätään toinen kenttä (Current Period), joka kertoo onko tarkastusjakso parhaillaan käynnissä (osuuko kuluva päivä tarkastusjakson alku- ja loppupäivän väliin).

entity add calcualte2.png

Minkä nimisellä tarkastusjaksolla tarkastus on tehty?

Lisätään lopuksi myymälöiden tarkastus -entiteettiin laskennallinen kenttä, jonka arvoksi tulee sen tarkastusjakson nimi, johon kyseinen tarkastustapahtuma on liitetty. Tämä on typerää, sillä sama tieto löytyyy lookupin takaa. En kuitenkaan nopeasti keksinyt, miten saisin PowerAppsini muutoin toimimaan, joten mennään tällä.

ENTITY LOKUP AUDITPERIOD.png

Aineiston lataaminen tietomalliin

Entiteetteihin voi ladata sisältöä lukuisista tietolähteistä.

entiti power query 0.png

Meillä on myymälät myös Azuren SQL-kannassa, joten lataamme ne sieltä. Ensiksi yhteys tietokantaan.

entity from sql.png

Valitaan oikea taulu.

entiti power query 1

Aineistoa voi käsitellä monipuolisesti. Tehdä tietotyyppimuunnoksia, poistaa rivejä, korvata arvoja jne.

entiti power query 2

Lopuksi mäpätään SQL-kannan kentät entiteetin kenttiin. Voit halutessasi luoda aineiston pohjalta myös uuden entiteetin.

Voit määritellä poistetaanko entiteetin kaikki vanhat rivit ennen päivitystä, vai lisätäänkö ainoastaan uudet ja muokataut rivit.

entiti power query 3

Lopuksi voit ajastaa latauksen mikäli haluat.

entiti power query 4

Hetkinen, tämähän on lähes sama työkalu kuin Power BI:ssä!

Huom! Sisällön päivitys on yhdensuuntainen. Lähdejärjestelmässä päivitetyt rivit päivittyvät CDS for Apps:iin. Mutta CDS for Apps:ssa päivitetyt tiedot eivät siirry lähdejärjestelmään.

Auditointitapahtumien automaattinen luonti

Tarkastuskäyntien suunnittelua helpottaa, mikäli myös tulevien tarkastusjaksojen  tarkastuskäynnit löytyvät valmiiksi järjestelmästä.

Käytännössä aina kun järjestelmään lisätään uusi tarkastusjakso, luodaan 499 tarkastustapahtumaa kyseiselle tarkastusjaksolle. Tämä on luontevaa toteuttaa Flow:lla.

create audit events with flow.png

Mutta… Eihän tämä Flow:n Common Data Service -triggeri koskaan laukea. Miksei?

Tässä kohtaa on tarpeen tehdä paljastus. Koko kuuma CDS 2.0 on kasa Dynamics 365:n ominaisuuksia. Osa uusia ja osa vanhoja uusiin kääreisiin naamioituna. Se ei tee siitä huonoa (päinvastoin). Mutta tämä on hyvä tiedostaa, niin jotkut asiat eivät sekoita päätä kokonaan.

Kuten se, että luomamme Flow ei käynnistynyt koska kyseisellä entiteettillä (Store Audit periods) ei ole muutosten jäljitys (change tracking) päällä Dynamics 365:ssa.

Kyllä. Luit oikein. Kiltisti siis Dynamics 365:n asetuksiin (Service – > Customizations).

Näyttökuva 2018-9-10 kello 18.22.17.png

Customize the System avaa uuden ikkunan, josta löydät entiteetit.

Näyttökuva 2018-9-10 kello 18.24.46.png

Näiden joukosta löytyy myös meidän Store Audit Periods -entiteettimme. Change tracking päälle, tallennus ja julkaisu.

entity enable change tracking.png

Tämän jälkeen Flow:mme toimii.

Näkymät

Entiteetteihin voi tehdä näkymiä (Views).

entity views.png

Tein Store Audit Events -entiteettiin näkymän, joka näyttää auditoinnit, jotka liittyvät parhaillaan käynnissä olevaan tarkastusjaksoon.

Näyttökuva 2018-9-10 kello 18.47.59.png

Voit hyödyntää näkymissä relaatioiden takana olevia tietoja. Harmiksemme entiteettien näkymiä ei voi käyttää Canvas PowerAppsissa (toisin kuin esimerkiksi Azure SQL:n näkymiä).

Model-Driven PowerAppseissa näkymiä voi hyödyntää. Mutta siitä lisää myöhemmin.

Tietojen ylläpito

CDS for Apps:n sisältämää dataa voi muokata helposti kahdella tavalla. Avaamalla entiteetin excelissä tai luomalla tätä varten yksinkertaisen PowerAppsin.

Tehdään PowerApps, jolla voi lisätä uusia tarkastusjaksoja.

Näyttökuva 2018-9-10 kello 19.26.51.png

Lisätään tekemällämme PowerAppsilla muutama tarkastusjakso CDS for Apps:iin.

Flow käynnistyy ja luo kutakin tarjastusjaksoa kohden 499 auditointiriviä.

Kaikki alkaa olla valmista varsinaisen sovelluksen rakentamista varten.

PowerApps myymälöiden tarkastajille

Tämä on helppoa, olemmehan vastaavan ratkaisun tehneet jo kertaalleen.

Tehdään tyhjä powerApps ja lisätään tietolähteeksi Store Audit Events.

add entity to powerapps.png

Lisätään galleria, jossa näytetään tarkastustapahtumat. Tässä kohtaa CDS for Appsin relaatiot astuvat kehiin. Voin näyttää galleriassa tarkastettavan myymälän nimen, vaikkei se ole Store Audit Events -entiteetissä, vaan siihen liittyvässä Stores -entiteetissä.

refere other entity.png

Haluamme tarkastella mobiilisovelluksessa kuluvan tarkastusjakson tarkastamattomia kohteita.

Ensin pitää selvittää mikä on kuluva tarkastusjakso. Se onnistuu tekemällä LookUp Store Audit Period -entiteettiin. Helppoa, koska tietomallissamme on tieto siitä mikä tarkastusjaksoista on aktiivinen.

LookUp(Store_Audit_Periods,crd01_currentperiod = true).crd01_primaryname

Asetetaan LookUpin arvo tekstikentän (txtCurrentPeriod) arvoksi ja käytetään sitä hyväksi filtteröidessä tapahtumia galleria-kontrollillemme.

Filter(Store_Audit_Events, crd01_auditperiod = txtCurrentPeriod.Text,crd01_auditcompleted = false)

filter entities.png

Loppuosa PowerAppsin tekemisestä onkin identtistä aiemman esimerkin kanssa.

Lopputulos näyttää tältä.

Mitä Common Data Service for Apps maksaa?

Jos oiotaan rajusti mutkia, niin

  • Kaikilla PowerAppsin käyttäjillä ja niiden kehittäjillä tulee olla PowerApps Plan 1 -lisenssi (5,90€/kk/käyttäjä)
  • Kaikilla entiteettien muokkaajilla tulee olla PowerApps Plan 2 -lisenssi (33,70€/kk/käyttäjä).

Harmiksemme tähän liittyy lukuisia poikkeuksia. Yleensä ne liittyvät Dynamics 365:en käyttöön. Joko sen omien entiteettien tai esim reaaliakaisten työnkulkujen hyödyntämiseen.

Yhteenveto

CDS for Apps on useissa tilanteissa erinomainen vaihtoehto perinteiselle tietokannalle. Isommilla käyttäjämäärillä kannattaa kuitenkin laskea lisenssikulut auki ennen kuin innostuu.

Seuraavassa kirjoituksessa jatketaan saman esimerkin kanssa ja rakennetaan siihen raportointi. Sisältäen tulevien tarkastusten nakittamisen tarkastajille. Suoraan raportilta.