Delegointi on aivan keskeinen käsite Power Appseja tehtäessä. 2000+ rivimäärillä jokainen delegointi-varoitus on syytä ottaa vakavasti. Power Apps kertoo kiltisti tekijälleen keltaisella kolmiolla kaavassa olevan osuuksia, joita ei kyetä delegoimaan tietolähteelle.

Ei kannata kuitenkaan tuudittautua siihen, että kaikki on kunnossa mikäli keltaisia kolmioita ei näy. Tällä kertaa käydään läpi muutama delegoinnin erikoistilanne, sekä tapa jolla näihin outouksiin pääsee käsiksi.
Delegoimattomien kyselyjen max rivimäärä
Silloin tällöin kiivaan Power Apps -kehityksen lomassa kannattaa muuttaa asetuksista delegoimattomien kyselyjen palauttama rivimäärä yhdeksi (oletus 500, max 2000).

Miksi? Koska tämän jälkeen näet helposti, mitkä osat sovelluksessasi tekevät kyselyjä, joita ei voi delegoida. Käytännössä näiden listojen ja gallerioiden rivimäärä putoaa yhteen tai nollaan.
Muista palauttaa testin jälkeen arvo takaisin esimerkiksi siihen 500:aan. Muuten käytät iltapäiväsi ihmetellen, mikä tietolähteissäsi on vikana.
Esimerkkejä piilevistä delegointiongelmista
Luodaan Dataverse for Teamsiin taulu (DelegationExamples), jossa on neljä riviä. Kaksi Timoa ja kaksi Lauria.

Luodaan Canvas Power Apps ja lisätään siihen galleria, joka näyttää taulun sisällön.

Voimme aloittaa.
Distinct
Haluamme näyttää galleriassa samat nimet vain kerran. Tämä onnistuu Distinct-komennolla.
Distinct(DelegationExamples, Name).Result
Lopputulos on juuri sitä mitä haluamme. Eikä missään ole merkkiä siitä, että tässä olisi mitään ongelmaa.

Käydään asettamassa haettavien rivien määräksi 1 tilanteissa, joissa delegointi ei ole tuettua.

Havaitsemme ettei Distinct-komentoa voidakaan delegoida. Lopputuloksena palautuu ainoastaan yksi rivi.

GroupBy
Ryhmitellään seuraavaksi taulun rivit nimi-sarakkeen perusteella. Tämä onnistuu GroupBy-komennolla.
GroupBy(
DelegationExamples,
"crb24_name",
"RestOfMe"
)
Lopputuloksena galleriassa on jälleen rivi per nimi. Eikä jälkeäkään mahdollisesta delegointi-ongelmasta.

Mutta miten käykään, kun asetamme asetuksista ei delegoitavien komentojen palauttaman rivimäärän ykköseksi?
No eihän sieltä tule taaskaan kuin yksi rivi.

Eli myöskään GroupBy -komento ei ole delegoitava.
Distinct ja GroupBy -komentojen ei luvatakaan tukevan delegointia. Hämmentävää on kuitenkin se, ettei niiden käytöstä tule normaalia varoitusta.
Dynaaminen gallerian sisältö
Luodaan seuraavaksi hyvin tyypillinen tilanne. Meillä on samainen galleria, jossa listataan Timoja ja Laureja. Mutta nyt lisäämme näytölle valinnan ”näytä kaikki” (Show all).
Mikäli valinta on tehty, käytetään gallerian tietojoukkona DelegationExamples-tietolähdettä sellaisenaan. Mikäli valintaa taas ei olla tehty, näytetään ainoastaan T-kirjaimella alkavat nimet.
Filter(DelegationExamples,StartsWith(Name,"T"))
Galleria näyttää tältä. Kaikki on vielä hyvin. Ja toimii vaikka ruuvaisimme ei delegoitavien rivien määrää alaspäin.

Lisätään hakukenttä, jonka avulla käyttäjä voi hakea henkilöitä etunimen (crb24_name) perusteella.
Search(
If(chkShowAll.Checked,
DelegationExamples,
Filter(
DelegationExamples,
StartsWith(Name,"T")
)
),
inpSearchText.Value,
"crb24_name"
)
Hyvin toimii vieläkin.

Mitä tapahtuu, kun asetamme delegoimattomien kyselyjen rivimääräksi ykkösen?
Mitä! Kyselyä ei voidakaan delegoida!

Sama tilanne jos haun sijaan (tai lisäksi) haluamme järjestää rivejä (sort). Rivejä palautuu aina maksimissaan yksi.

Mistä tämä johtuu? Search ja Sort ovat takuuvarmasti Dataverse for Teamsin kanssa delegoitavia kyselyjä.
Ongelmana on tapa, jolla kaavan rakensimme. Kyselyn uloimpana osana on Search-komento. Sen sisällä käytettävä tietolähde kuitenkin muuttuu ehdon perusteella (vaihtoehdot a ja b).

Tästä johtuen kyselyä ei kyetä kokonaisuudessaan delegoimaan tietolähteelle. Ensin suoritetaan ehdon sisällä oleva kysely (Filter) ja vasta sen jälkeen tehdään tämän lopputulokseen kohdistuva haku (Search). Jälkimmäinen osuus tehdään paikallisesti.
Korjaus on varsin yksinkertainen. Siirretään kysely kokonaisuudessaan ehdon sisään.

Ja näin kyselymme jälleen toimii kuten pitää.
Yhteenveto
Delegoitavuus on Power Appsin tekijälle hankala aihe, sillä se riippuu vahvasti siitä mitä tietolähdettä kulloinkin käytetään. Dataverse tukee delegointia parhaiten.
Dokumentaatiosta selviää delegoitavat komennot (kunhan dokumentaatio vain pysyy jatkuvien muutosten mukana), muttemme voi olettaa kaikkien seuraavan alati päivittyvää dokumentaatiota.
Tekijät ovatkin tottuneet reagoimaan delegointivaroituksiin. Mutta kuten näimme, ne eivät varoita kaikista delegointiongelmista.
Suoraviivaisin tapa välttyä ongelmilta onkin ajoittain kokeilla, miten sovellus toimii delegoimattomien kyselyjen palauttaessa ainoastaan yhden rivin.