Kyselyn rajoitukset: Delegointi- ja kyselyrajat

Tietoja delegoinnista

Power Apps toimii parhaiten taustan tietolähteen kanssa, jossa Power Fx -kysely voidaan kääntää täysin vastaavaksi kyselyksi, joka voidaan suorittaa tietolähteessä. Power Apps lähettää kyselyn, jonka tietolähde ymmärtää. Kysely suoritetaan tietolähteessä ja kyselyn tulokset palautetaan Power Appsiin. Esimerkiksi tietolähde voi suodattaa tiedot tietolähteessä ja palauttaa vain suodatusehtoja vastaavat rivit. Kun tämä toimii oikein, kysely delegoidaan tietolähteelle, jossa kyselyn työ tehdään.

Power Fx -kyselyjä ei kuitenkaan aina voi kääntää vastaaviksi kyselyiksi kaikissa tietolähteissä. Esimerkiksi Dataverse tukee useampia kyselyominaisuuksia kuin Excel. Dataverse tukee in-kyselyoperaattoria (jäsenyys), jota Excel ei tue. Kysely ei ole delegoitavissa, jos kyselyssä käytetään ominaisuutta, jota tietolähde ei tue. Jos jotakin kyselylausekkeen osaa ei voi delegoida, mitään kyselyn osaa ei delegoida.

Jos kyselyä ei voi delegoida, Power Apps saa tietolähteeltä vain ensimmäiset 500 tietuetta. Tämän jälkeen se suorittaa kyselyn toiminnot. Tätä rajoitusta voi nostaa enintään 2 000 tietueeseen muuttamalla rajoitusta Power Apps rajoittaa tuloskokoa 500 tietueeseen, jotta Power Appsin suorituskyky säilyy hyvänä. Kokeilemalla on havaittu, että tätä suuremmat tulosjoukot aiheuttavat sovelluksessa ja Power Appsissa yleisesti suorituskykyongelmia.

Tämä rajoitus voi kuitenkin olla ongelma, koska kysely saattaa palauttaa virheellisiä tuloksia, jos tietolähteen tiedot ylittävät 500/2 000 tietuetta. Otetaan esimerkiksi tapaus, jossa tietolähteessä on 10 miljoonaa tietuetta ja kyselyn on toimittava tietojen jälkimmäisen osan perusteella. (Esimerkiksi sukunimet, jotka alkavat Z-kirjaimella) Kyselyssä on kuitenkin operaattori, jota ei voi delegoida (esimerkiksi erittelyoperaattori). Tällöin tulokseksi saadaan vain ensimmäiset 500/2 000 tietuetta, ja tulokset ovat virheelliset.

Luo omat Power Fx -kyselyt käyttämällä tietolähteen delegoitavia taulukoita. Käytä vain delegoitavia kyselyfunktioita. Se on ainoa tapa, jolla sovellus voidaan pitää hyvin toiminnassa ja varmistaa, että käyttäjät voivat käyttää kaikkia tarvitsemiaan tietoja.

Kiinnitä huomiota delegointivaroituksiin. Ne ilmaisevat paikat, joissa delegointi ei ole mahdollista. Jos käsittelet pieniä tietojoukkoja (alle 500 tietuetta), voit käyttää mitä tahansa tietolähdettä ja kaavaa, sillä sovellus voi käsitellä tietoja paikallisesti, jos kaavaa ei voi delegoida.

Huomautus

Delegointivaroitukset helpottavat sovelluksesi hallintaa niin, että sen tulokset ovat oikeat. Jos tietolähteessä on yli 500 tietuetta eikä funktiota voi delegoida, Power Fx merkitsee kaavan sinisellä alleviivauksella.

Delegoitavissa olevat tietolähteet

Delegointia tuetaan vain tietyissä taulukkomuotoisissa tietolähteissä. Jos tietolähde tukee delegoimista, sen yhdistimen asiakirjat tukevat tätä. Esimerkiksi, nämä taulukkomuotoiset tietolähteet ovat suosituimpia, ja ne tukevat delegoimista:

(Lisää staattista tietoa sovellukseen -tietolähteen avulla) tuodut Excel-työkirjat, kokoelmat ja taulukot, jotka on tallennettu kontekstimuuttujiin, eivät edellytä delegointia. Kaikki nämä tiedot ovat jo muistissa, ja koko Power Apps-kieltä voidaan soveltaa.

Delegoitavat funktiot

Seuraava vaihe on vain delegoitavien kaavojen käyttäminen. Tässä ovat kaavan osat, jotka voidaan delegoida. Jokainen tietolähde on kuitenkin erilainen, eivätkä ne kaikki tue kaikkia näitä elementtejä. Tarkista delegointivaroitukset kaavassasi.

Suodatinfunktiot

Filter, Search, First ja LookUp voidaan delegoida.

Filter- ja LookUp-funktioissa voidaan käyttää näitä termejä tarvittavien tietueiden valitsemiseen taulukon sarakkeista:

  • And (mukaan lukien &&), Or (mukaan lukien ||), Not (mukaan lukien !)
  • In

    Huomautus

    In määritetään vain perustietolähteen sarakkeissa. Jos tietolähde on Accounts-taulukko, niin Filter(Accounts, Name in ["name1", "name2"]) määritetään tietolähteeseen arvioitavaksi. Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) ei kuitenkaan tule määritetyksi, sillä Fullname-sarake ei ole samassa taulukossa (PrimaryContact) kuin Accounts. Lauseke arvioidaan paikallisesti.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Kaikissa tietueissa olevat samat vakioarvot, kuten ohjausobjektien ominaisuudet sekä yleiset ja kontekstimuuttujat.

Voit käyttää myös kaavan osia, jotka antavat tulokseksi vakioarvon kaikille tietueille. Esimerkiksi Left( Language(), 2 ), Date( 2019, 3, 31 ) ja Today() eivät ole riippuvaisia tietueen mistään sarakkeista ja näin ollen palauttavat saman arvon kaikille tietueille. Nämä arvot voidaan lähettää tietolähteeseen vakioina, eivätkä ne estä delegoimista.

Edellinen luettelo ei sisällä näitä huomattavia kohteita:

Kyselyn rajoitukset

Hakutasot

Power Apps tukee kahta hakutasoa. Tämä tarkoittaa sitä, että Power Fx:n kyselylausekkeessa voi olla enintään kaksi hakufunktiota. Tämän rajoituksen tavoite on säilyttää hyvä suorituskyky. Jos kyselylauseke sisältää haun, Power Apps tekee ensin kyselyn saadakseen perustaulukon käyttöön. Tämän jälkeen se tekee toisen kyselyn, joka laajentaa ensimmäisen taulukon hakutietojen avulla. Tämän lisäksi tuetaan toista tasoa. Kaksi tuettua tasoa on enimmäismäärä. Offline-tilassa haun laajennuksissa tuetaan kuitenkin vain yhtä tasoa.

Lausekkeen arviointi – entiteetin ominaisuus on oltava yhtäläisyysoperaattorin LHS vasemmalla puolella

Entiteetin ominaisuus on tärkeä sijoittaa niin, että sitä vertaillaan yhtäläisyysoperaattorin LHS vasemmalla puolella lausekkeessa. Alla olevassa esimerkissä kerrotaan, että 'Liiketoimintayksikön tunnus'.Nimi on ominaisuuden arvo, joka sijoitetaan lausekkeen LHS:ään arviointia varten. Seuraava lauseke onnistuu:

Filter(
        Budgets,
        'Business unit ID'.Name = LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name,
        DataCardValue37.Selected.'Date Range String'='Date Range String'
    )

Mutta seuraava lauseke ei onnistu:

 Filter(
        Budgets,
        LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name = 'Business unit ID'.Name,
        'Date Range String'=DataCardValue37.Selected.'Date Range String'
    )

Lajittelufunktiot

Sort ja SortByColumns voidaan delegoida.

Sort-funktiossa kaava voi olla vain yhden sarakkeen nimi eikä voi sisältää muita operaattoreita tai funktioita.

Koostefunktiot

Joitakin koostefunktioita voi delegoida taustatuesta riippuen. Sum, Average, Min ja Max voidaan delegoida. Laskentafunktiot kuten CountRows ja Count voidaan myös delegoida. Tällä hetkellä vain rajoitettu tietolähteiden määrä tukee näitä delegointitoimintoja. Lisätietoja on kohdassa Delegointiluettelo.

RemoveIf- ja UpdateIf -delegointituki on kokeellinen ja oletusarvoisesti poissa käytöstä.

funktiot, joita ei voi delegoida

Kaikki muut toiminnot eivät tue delegointia, mukaan lukien nämä tärkeät funktiot:

rajoitukset, joita ei voi delegoida

Kaavat, joita ei voi delegoida, käsitellään paikallisesti. Paikallinen käsittely sallii Power Apps -kaavakielen käytön koko laajuudessaan. Tällä on kuitenkin hintansa: kaikki tiedot on ensin tuotava laitteeseen, mikä saattaa merkitä suurten tietomäärin noutamista verkosta. Tähän voi kulua aikaa, mikä antaa sovelluksesta hitaan tai kaatuneen vaikutelman.

Voit välttää tämän, sillä Power Apps rajoittaa paikallisesti käsiteltävien tietojen määrää ja sallii oletusarvoisesti vain 500 tietuetta. Valitsimme tämän luvun, jotta sinulla olisi yhä täydet käyttöoikeudet pieniin tietojoukkoihin ja voisit tarkentaa suurien tietojoukkojen käyttöä näkemällä osittaiset tulokset.

Tätä ominaisuutta on luonnollisesti käytettävä varoen, sillä se saattaa hämmentää käyttäjiä. Ajatellaan esimerkiksi Filter-funktiota, jossa on delegointikelvoton valintakaava, yli miljoona tietuetta sisältävässä tietolähteessä. Koska suodatus tehdään paikallisesti, vain 500 ensimmäistä tietuetta luetaan. Jos haluttu tietue on tietue 501 tai 500 001, Filter ei ota sitä huomioon eikä palauta sitä.

Koostefunktiot voivat myös aiheuttaa sekaannusta. Laske keskiarvo Average-funktiolla samasta miljoonan tietueen tietolähteen sarakkeesta. Tässä tapauksessa keskiarvoa ei voi delegoida, koska lauseketta ei ole delegoitu (katso aiempaa muistiinpanoa), joten vain ensimmäisestä 500 tietueesta lasketaan keskiarvo. Jos et ole huolellinen, sovelluksen käyttäjä voi vahingossa tulkita osittaisen vastauksen täydelliseksi vastaukseksi.

Rajan muuttaminen

500 on oletusarvoinen tietueiden määrä, mutta voit muuttaa tätä arvoa koko sovellusta varten:

  1. Valitse Asetukset.
  2. Vaihda Yleiset-kohdassa Tietorivien raja -asetus 1 asetukseksi 2 000.

Joissakin tapauksissa tiedät, että 2 000 (tai 1 000 tai 1 500) on riittävä skenaarion tarpeita varten. Voit varoen suurentaa tämän asetuksen vastaamaan tilannettasi. Kun suurennat tätä arvoa, sovelluksesi suorituskyky voi heikentyä erityisesti leveissä taulukoissa, joissa on paljon sarakkeita. Silti on parasta delegoida mahdollisimman paljon.

Jotta sovellus voi skaalautua suuriin tietomääriin, pienennä tämä asetus arvoon 1. Kaikki, mitä ei voi delegoida, palauttaa yhden tietueen, joka on helppo tunnistaa sovellusta testattaessa. Tämä voi auttaa estämään yllätyksiä yritettäessä ottaa soveltuvuusselvityssovellusta käyttöön.

Delegointivaroitukset

Power Apps antaa varoituksen (keltaisen kolmion), kun luot kaavan, joka sisältää jotakin delegointikelvotonta. Tämä helpottaa sen tietämistä, mitä delegoidaan ja mitä ei.

Delegointivaroitukset näytetään vain kaavoissa, jotka toimivat delegoitavissa tietolähteissä. Jos varoitusta ei tule näkyviin ja uskot, että kaavaa ei delegoida oikein, vertaa tietolähdetyyppiä edellä tässä artikkelissa olevaan delegoitavien tietolähteiden luetteloon.

Esimerkkejä

Tässä esimerkissä luodaan automaattisesti kolmen näytön sovellus käyttämällä pohjana SQL Server -taulukkoa nimeltä [dbo].[Fruit]. Sovelluksen luomisessa voit käyttää SQL Serveriin samanlaisia periaatteita kuin Dataversea koskevassa artikkelissa on kuvattu.

Kolmen näytön sovellus.

Valikoiman Items-ominaisuuteen on määritetty kaava, joka sisältää SortByColumns- ja Search-funktiot. Ne molemmat voi delegoida.

Kirjoita hakuruutuun ”Apple”.

Näytön yläreunaan tulee hetkeksi pisteitä, kun sovellus viestii SQL Serverin kanssa hakupyynnön käsittelyä varten. Kaikki hakuehtojen mukaiset tietueet tulevat näkyviin, vaikka tietolähde sisältäisi miljoonia tietueita.

Haun tekstisyötteen ohjausobjekti.

Hakutulokset sisältävät sanat Omenat ja Ananas, koska Search-funktio hakee kaikkialta tekstisarakkeesta. Jos halusit löytää vain ne tietueet, jotka sisältävät hakusanan hedelmän nimen alussa, voit käyttää monimutkaisempaa hakusanaa toisessa delegoitavassa funktiossa, eli Filter-funktiossa. (Yksinkertaisuuden vuoksi poista SortByColumns-kutsu.)

Poistetaan SortByColumns-kutsu.

Uudet tulokset sisältävät sanan Omenat, mutta ei sanaa Ananas. Valikoiman vieressä (ja näytön pikkukuvassa, jos vasemmassa siirtymispalkissa näkyy kuitenkin pikkukuvia) ja kaavan osan alapuolella näkyy sininen aaltoviiva. Nämä elementit osoittavat varoituksen. Jos pidät osoitinta valikoiman vieressä olevan keltaisen kolmion kohdalla, tämä sanoma tulee näyttöön:

Osoittimen pitäminen delegointivaroituksen kohdalla.

SQL Server on delegoitava tietolähde, ja Filter on delegoitava funktio. Funktioita Mid ja Len ei kuitenkaan voida delegoida mihinkään tietolähteeseen.

Mutta se toimi, eikö toiminutkin? Tavallaan. Siksi kyseessä on varoitus, eikä punainen aaltoviiva.

  • Jos taulukossa on alle 500 tietuetta, kaava on toiminut täydellisesti. Kaikki tietueet tuotiin laitteeseen ja funktiota Filter sovellettiin paikallisesti.
  • Jos taulukossa on yli 500 tietuetta, kaava ei palauta tietuetta 501 eikä sitä seuraavia, vaikka ehdot täyttyisivät.

Katso myös

Ei-delegoitujen toimintojen käytön ja ei-delegoitujen kyselyjen soveltumattomien tietorivirajoitusten vaikutus suorituskykyyn
Delegoinnin suorituskyvyn vinkit ja parhaat käytännöt

Huomautus

Voitko kertoa meille dokumentaatiota koskevan kielimäärityksesi? Vastaa lyhyeen kyselyyn. (Huomaa, että tämä kysely on englanninkielinen.)

Kyselyyn vastaaminen kestää noin seitsemän minuuttia. Henkilökohtaisia tietoja ei kerätä (tietosuojatiedot).