PowerApps voi käyttää tietovarastonaan vaikka mitä härveliä. Microsoftin ekosysteemissä vaihtoehdot ovat tyypillisesti

  • SharePoint-lista(t)
  • SQL tietokanta palveluna Azuresta
  • Common Data Service for Apps

SharePoint on näistä tyypillisin (ja monia arvelluttavin) ratkaisu. Tutustutaan hieman tarkemmin näihin vaihtoehtoihin sekä niiden erityispiirteisiin.

SharePoint-lista

SharePointista puhuttaessa nousee usein esille listan kokorajoitukset. Monilla kummittelee mielessä mystinen luku 5000. Luodaan PowerAppsia varten SharePoint-lista ja siihen hieman enemmän sisältöä.

Listalla on seuraavat sarakkeet

  • Title
  • OwnID – Numerokenttä, jonka arvo on sama kuin listan rivin ID
  • OwnOwner – Tekstikenttä, johon on poimittu listan owner-kentästä rivin lisääjän email
  • Choice  – Choice-tyyppinen kenttä. Valittavina arvoina Choice 1, Choice 2 ja Choice 3
  • OwnChoice – Tekstikenttä, johon on poimittu arvo Choice-kentästä
  • OwnCreated – Numerokenttä, joka sisältää rivin luontiajan ilmaistuna numerona, ns tickseinä

Lisätään listalle Flow:n avulla 45000 riviä.

Screen Shot 2018-10-14 at 14.57.07

Ja kokeillaan mikä oikeasti toimii ja mikä ei.

Vapaasanahaku (Search)

Aloitetaan vapaasanahaulla. Haetaan kaikki listan rivit, joissa Title-kenttä sisältää merkkijonon ”Timo”.

Screen Shot 2018-10-14 at 13.18.08.png

Kolmio kertoo karua kieltään. Search-operaatio ei tue delegointia. Käytännössä vapaasanahakua voi käyttää maksimissaan 2000 riviä sisältävän SharePoint-listan kanssa. Nämä 2000 riviä siiretään aina ensin PowerAppsiin ja haku suoritetaan paikallisesti.

Pöh.

Rivien suodattaminen (Filter)

Usein jopa hakua tärkeämpi ominaisuus on listan rivien suodattaminen eri kriteereillä. Tämän olisi parempi toimia.

ID:n avulla SharePoint-listasta löytyy nopeasti yksittäinen rivi. Kuvasssa rivi, jonka ID on 27810.

Screen Shot 2018-10-14 at 13.29.03.png

Vastaavasti löytyy rivi, jonka otsikko on ”timotestssharepointlist34967isthisok”.

Filter('SharePoint list limits', Title = "timotestssharepointlist34967isthisok")

Myös merkkijonon alulla (StartsWith) hakeminen toimii isoilla tietojoukoilla.

Screen Shot 2018-10-14 at 13.33.46.png

Tietojoukkoa halutaan tyypillisesti rajata eri tavoin. Nopea testi paljastaa ettemme voi rajata joukkoa esimerkiksi

  • ID-välin perusteella (näytä rivit joiden ID on välillä 27000-27200)
  • Luonti- tai muokkauspäivän perusteella (näytä rivit jotka on luotu max 2 päivää sitten)
  • Rivin lisääjän (Author) perusteella (näytä rivit jotka on luonut Timo Pertilä)
  • Valintalista (choice) tyyppisen kentän arvon perusteella (näytä rivit joiden Choice -kentän arvona on ”Choice 2”)

Yllämainutut esimerkit kaatuvat jokainen delegointiin. Tarkemmin ottaen sen puutteeseen. Ratkaisu on purkaa käytettävät arvot omiin (teksti tai numero) kenttiinsä, joiden avulla joukkoa voidaan suodattaa delegointia hyödyntäen.

Tätä varten listallamme on kentät

  • OwnID
  • OwnOwner
  • OwnChoice
  • OwnCreated

Näitä kenttiä käyttämällä alkaa tapahtua.

Voimme suodattaa rivit joiden ID on väliltä 27001 ja 27010.

Screen Shot 2018-10-14 at 13.48.54.png

Tai näyttää rivit joiden Choice-kentän arvo on ”Choice 3.”

Screen Shot 2018-10-14 at 13.50.21.png

Tai näyttää ainoastaan rivit, jotka ovat minun lisäämiäni.

Screen Shot 2018-10-14 at 14.01.02.png

Myös päivämäärärajaukset toimivat. Alla rivit, jotka on luotu eilisen jälkeen (10/21/2018 10:54:35 on tickseinä 636757052756539000).

silter by ticks.png

Suodattimia voi luonnollisesti myös yhdistellä. Kuvassa rivit, joiden valintakentän arvo on ”Choice 2” ja joiden ID on suurempi kuin 29000.

Screen Shot 2018-10-14 at 14.03.39.png

Rivien järjestäminen (Sort)

Lyhyt kokeilu antaa jälleen tylyn tuomion. Rivit voi järjestää ainoastaan rivin ID:n perusteella. Muiden sarakkeiden kohdalla saadaan aikaiseksi virhe (threshold limit).

Käydään lisäämässä (listan asetuksista) indeksit kaikille SharePoint-listan sarakkeille, joiden mukaan rivejä järjestetään.

Screen Shot 2018-10-14 at 14.12.02.png

Kas. Tämän jälkeen myös rivien järjestäminen toimii.

Screen Shot 2018-10-14 at 14.16.02.png

Tosin se toimii ainoastaan, kun lista järjestetään yhden sarakkeen perusteella (Sort). SortByColumns -toiminnolle rivejä on liikaa.

Screen Shot 2018-10-14 at 14.18.53.png

Rivitietojen esittäminen galleriassa

Hetkinen… En minä halua näyttää rivin päivitysaikaa tickseinä. Ei kukaan tiedä milloin oli 636757052756539000.

Eikä sinun tietenkään tarvitsekkaan. Custom-kenttiä käytetään ratkaisussa ainoastaan tietojoukon suodattamisessa ja järjestämisessä. Käyttäjälle näytetään riveistä ne oikeat kentät (omistajan nimi, luontipäivä jne).

galleryt.png

Yhteenveto – SharePoint-lista

Mikäli et tarvitse vapaasanahakua, etkä listan järjestämistä usean sarakkeen perusteella, on SharePoint-lista aivan mahdollinen vaihtoehto. Ainakin esimerkkimme 45 000 rivin aineistolla.

Mikäli vapaasanahaku on ehdoton vaatimus, taipuu SharePoint-lista maksimissaan 2000 rivin käsittelyyn. Tätäkin voidaan kiertää, mikäli varmistutaan että tietojoukko on ennen hakua suodatettu (esim aikarajauksella) siten, että se sisältää maksimissaan 2000 riviä. Kuulostaa kyllä omaankin korvaan aika virittelyltä…

Azure SQL-tietokanta

Azure SQL-tietokannan käytöstä PowerAppsin tietovarastona löytyy esimerkki aiemmasta kirjoituksesta.

SQL-tietokantaa käytettäessä voit unohtaa kaikki SharePoint-listan yhteydessä esiin tulleet rajoitteet. Vapaasanahaku toimii, eivätkä rivimäärät ole ongelma.

Kunhan rakennat tarvittavat indeksit tietokannan päähän.

PowerApps ei tiedä onko indeksit tehty vai ei. Puuttuvat indeksit näkyvät ennemmin tai myöhemmin tolkuttomana hitautena.

Mutta ei tämäkään pelkkää juhlaa ole. SQL-tietokannan käytössä on omat haasteensa.

  • Liitetiedostot. SharePoint-listan riville voi lisätä yhden tai useampia liitetiedostoja. SQL- tietokannan kanssa saat askarrella tämän aivan itse.
  • Henkilö-kenttä. SharePoint-listan henkilö-kenttä on monessa yhteydessä varsin kätevä. Se tarjoaa lomakkeelle people pickerin, jolla voit valita organisaatiosi käyttäjistä sen halutun. Tai monta käyttäjää. Tai jopa käyttäjäryhmän! SQL-tietokannan kanssa pääset taas askartelemaan.
  • Rivitason käyttöoikeudet. SharePointissa jokaisella rivillä voi olla omat käyttöoikeudet (henkilö/henkilöitä ja/tai ryhmä/ryhmiä). SQL tukee toki rivitason oikeuksia, mutta PowerApps kytketään SQL-tietokantaan kaikkille yhteisellä kannan käyttäjätunnuksella. Ei käyttäjän AzureAd tunnuksella. Ja taas askarrellaan. Saatetaan askarrella jopa isosti. Liian isosti.

Ja lista vain jatkuu. Versiohistoria, ainoastaan itse luotujen rivien näkeminen ja muokkaaminen, uuden version hyväksyntä jne…

SharePointissa on sisäänrakennettua todella paljon hyödyllisiä ominaisuuksia. Myös PoweApps -ratkaisujen näkökulmasta.

Common Data Service for Apps

Myös tästä löytyy esimerkki aiemmasta kirjoituksesta. Lyhyesti: CDS for Appsissa yhdistyvät SharePoint-listan ja SQL-tietokannan hyvät puolet.

Ainoa miinus on  hinta (5.90€/käyttäjä/kk). Ja ettei CDS for Appsissa luotuja näkymiä voi käyttää PowerAppsissa.