ForAll-funktio
Koskee seuraavia: pohjaan perustuvat sovellukset työpöytätyönkulut Mallipohjaisten sovellusten Power Pages Power Platform CLI
Laskee arvot ja suorittaa toiminnot taulukon kaikille tietueille.
Kuvaus
ForAll-funktio arvioi kaavan taulukon kaikille tietueille. Kaava voi laskea arvon ja suorittaa toimintoja, kuten tietojen muokkaus tai yhteyden käyttäminen. With-funktiolla voit arvioida yksittäisen tietueen kaavan.
Sequence-funktiolla ja ForAll-funktiolla voit iteroida määrän perusteella.
Parhaillaan käsiteltävän tietueen kentät ovat kaavan käytettävissä. Käytä ThisRecord-operaattoria tai viittaa kenttiin nimellä muiden arvojen tapaan. As-operaattoria voidaan käyttää myös käsiteltävän tietueen nimeämiseen, mikä voi auttaa tekemään kaavasta helpommin ymmärrettävän ja mahdollistaa sisäkkäisten tietueiden käytön. Lisätietoja on seuraavissa esimerkeissä ja tietueen vaikutusalueen käsittelyn ohjeessa.
Palautusarvo
Jokaisen kaavan arvioinnin tulos palautetaan taulukossa samassa järjestyksessä kuin syöttötaulukko.
Jos kaavan tulos on yksi arvo, tuloksena saatavassa taulukossa on yksi sarake. Jos kaavan tulos on tietue, tuloksena saatava taulukko sisältää tietueet, joissa on samat sarakkeet kuin tulostietueessa.
Jos kaavan tulos on tyhjä arvo, tulostaulukossa ei ole tietuetta kyseiselle syöttötietueelle. Tässä tapauksessa tulostaulukossa on vähemmän tietueita kuin lähdetaulukossa.
Toimenpiteet
Kaava voi sisältää funktioita, jotka suorittavat toiminnon, kuten tietolähteen tietueiden muokkaaminen Patch- ja Collect-funktioilla. Kaava voi myös kutsua menetelmiä yhteyksillä. Tietuetta kohden voidaan suorittaa useita toimintoja ;-operaattorilla. Et voi muokata taulukkoa, joka on ForAll-funktion kohde.
Kun kirjoitat kaavaa, pidä mielessä, että tietueita voidaan käsitellä missä tahansa järjestyksessä, ja kun mahdollista, rinnakkain. Taulukon ensimmäinen tietue voidaan käsitellä viimeisen tietueen jälkeen.
Pyri välttämään järjestysriippuvuuksia. Tästä syystä ForAll-funktion sisällä ei voida käyttää funktioita UpdateContext, Clear ja ClearCollect, koska ne voisivat helposti sisältää muuttujia, joihin tämä vaikuttaisi. Voit käyttää Collect-funktiota, mutta tietueiden lisäämisjärjestys on määrittämätön.
Useat tietolähteitä muokkaavat funktiot, kuten Collect, Remove ja Update, antavat paluuarvonaan muutetun tietolähteen. Nämä paluuarvot voivat olla suuria ja kuluttaa merkittävästi resursseja, jos ne palautetaan jokaiselle ForAll-taulukon tietueelle. Nämä paluuarvot eivät myöskään välttämättä vastaa odotuksiasi, sillä ForAll voi toimia rinnakkain ja sivuvaikutuksena funktiot eivät välttämättä saa odotettuja tuloksia. Jos ForAll-funktion paluuarvoa ei käytetä, kuten tietojen muokkausfunktioille on usein tyypillistä, paluuarvoa ei luoda, mikä eliminoi resurssi- ja järjestysongelmat. Jos kuitenkin käytät ForAll-funktion ja jonkin tietolähteen palauttavan funktion tulosta, harkitse tuloksen rakennetta tarkkaan ja testaa toimintoa ensin pienillä tietojoukoilla.
Vaihtoehtoja
Monet Power Appsin funktiot voivat käsitellä yhden tai useamman arvon kerrallaan yhden sarakkeen taulukon avulla. Esimerkiksi Len-funktio voi käsitellä tekstiarvoista muodostuvan taulukon ja palauttaa pituuksien taulukon samalla tavalla kuin ForAll voi. Tämä voi poistaa ForAll-funktion tarpeen monissa tapauksissa, ja se voi olla myös tehokkaampi ja helpompi lukea.
Toinen huomioon otettava seikka on, että ForAll ei ole delegoitavissa, toisin kuin muut funktiot, kuten Filter.
Delegointi
Tätä toimintoa ei voi delegoida tietolähdettä käytettäessä. Vain tietolähteen ensimmäinen osa noudetaan ja sitten suoritetaan toiminto. Tulos ei ehkä vastaa kokonaisuutta. Laatimisvaiheessa saatetaan näyttää varoitus, joka muistuttaa tästä rajoituksesta ja kehottaa vaihtamaan delegoitaviin vaihtoehtoihin, jos mahdollista. Lisätietoja on delegoinnin yleiskatsauksessa.
Syntaksi
ForAll(taulukko,kaava )
- Taulukko - Pakollinen. Taulukko, jolle toiminto suoritetaan.
- Kaava - pakollinen. Table-taulukon kaikkien tietueiden arviointiin käytettävä kaava.
Esimerkit
Laskutoimitukset
Seuraavissa esimerkeissä käytetään Squares-tietolähdettä:
Voit luoda tämän tietolähteen kokoelmana asettamalla jonkin Button-ohjausobjektin OnSelect-ominaisuudeksi tämän kaavan, avaamalla esikatselutilan ja sitten valitsemalla painikkeen:
ClearCollect( Squares, [ "1", "4", "9" ] )
Kaava | Kuvaus | Tulos |
---|---|---|
ForAll( neliöt, neliört( arvo ) ) Neliö( neliöt ) |
Laskee kaikille syöttötaulukon tietueille Value-sarakkeen neliöjuuren. Sqrt-funktiota voidaan käyttää yhden sarakkeen taulukolle, joten tämä esimerkki voidaan toteuttaa käyttämättä ForAll-funktiota. | |
ForAll( neliöt, teho( arvo, 3 ) ) | Nostaa kaikkien syöttötaulukon tietueiden Value-sarakkeen kolmanteen potenssiin. Power-funktio ei tue yhden sarakkeen taulukoita. Siksi tässä tapauksessa täytyy käyttää ForAll-funktiota. |
Yhteyden käyttäminen
Seuraavissa esimerkeissä käytetään Expressions-tietolähdettä:
Voit luoda tämän tietolähteen kokoelmana asettamalla jonkin Button-ohjausobjektin OnSelect-ominaisuudeksi tämän kaavan, avaamalla esikatselutilan ja sitten valitsemalla painikkeen:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
Tässä esimerkissä Microsoft käytetään myös Translator-yhteyttä . Katso tämän yhteyden lisäämiseksi sovellukseesi yhteyksien hallintaa käsittelevä artikkeli.
Kaava | Kuvaus | Tulos |
---|---|---|
ForAll(lausekkeet, MicrosoftTranslator.Translate( arvo, "es")) | Kaikkien Expressions-taulukon tietueiden Value-sarakkeen sisältö käännetään espanjaksi (lyhenne ”es”). | |
ForAll(lausekkeet, MicrosoftTranslator.Translate( arvo, "fr")) | Kaikkien Expressions-taulukon tietueiden Value-sarakkeen sisältö käännetään ranskaksi (lyhenne ”fr”). |
Taulukon kopioiminen
Joskus tietoja täytyy suodattaa, muovata, lajitella tai muokata. Power Apps tarjoaa tätä varten monia funktioita, kuten Filter, AddColumns ja Sort. Power Apps käsittelee jokaista taulukkoa arvona ja mahdollistaa sen kulun kaavojen läpi helposti.
Joskus tämä tulos kannattaa kopioida myöhempää käyttöä varten tai kannattaa siirtää tietoja yhdestä tietolähteestä toiseen. Power Apps sisältää Collect-funktion tietojen kopiointia varten.
Mieti kuitenkin ennen kopion tekemistä, onko se tarpeen. Useissa tapauksissa ratkaisuksi riittää pohjana olevan tietolähteen suodatus tai muovaaminen kaavalla tarpeen mukaan. Kopion tekemisen haittapuolia ovat:
- Jos samasta tiedosta on kaksi kopiota, ne eivät välttämättä pysy synkronoituna.
- Kopion tekeminen voi käyttää suuren osan tietokoneen muistia, verkon kaistanleveyttä ja aikaa.
- Useimmissa tietolähteissä kopioimista ei voi delegoida, mikä rajoittaa siirrettävien tietojen määrää.
Seuraavissa esimerkeissä käytetään Products-tietolähdettä:
Voit luoda tämän tietolähteen kokoelmana asettamalla jonkin Button-ohjausobjektin OnSelect-ominaisuudeksi tämän kaavan, avaamalla esikatselutilan ja sitten valitsemalla painikkeen:
ClearCollect( Products,
Table(
{ Product: "Widget", 'Quantity Requested': 6, 'Quantity Available': 3 },
{ Product: "Gadget", 'Quantity Requested': 10, 'Quantity Available': 20 },
{ Product: "Gizmo", 'Quantity Requested': 4, 'Quantity Available': 11 },
{ Product: "Apparatus", 'Quantity Requested': 7, 'Quantity Available': 6 }
)
)
Tavoitteena on käyttää työskentelyyn johdettua taulukkoa, joka sisältää vain ne kohteet, joita on pyydetty enemmän kuin on saatavilla ja joita täytyy tilata:
Voimme suorittaa tämän tehtävän eri tavoilla, joista kaikki tuottavat saman lopputuloksen ja joilla kaikilla on omat hyvät ja huonot puolensa.
Taulukon muovaaminen pyydettäessä
Älä tee kopiota! Voimme käyttää seuraavaa kaavaa kaikkialla, missä sitä tarvitsemme:
// Table shaping on demand, no need for a copy of the result
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Filter- ja AddColumns-funktiot luovat tietuealueen, jonka avulla suoritetaan vertailu- ja vähennystoiminnot jokaisen tietueen ”Quantity Requested”- ja ”Quantity Available” -kentille tässä järjestyksessä.
Tässä esimerkissä Filter-funktio voidaan delegoida. Tämä on tärkeää, sillä se voi hakea kaikki kriteerit täyttävät tuotteet, vaikka tämä merkitsisi vain muutamaa tietuetta miljoonien tietueiden taulukossa. Tällä hetkellä ShowColumns- ja AddColumns-funktioita ei voi delegoida, joten varsinainen tilausta vaativien tuotteiden määrä on rajoitettu. Jos tiedät, että tämä tulos on aina suhteellisen pieni, tämä menetelmä on sopiva.
Ja koska emme tehneet kopiota, ei ole olemassa ylimääräistä tietojen kopiota, jota täytyisi hallita tai joka voisi vanhentua.
ForAll pyydettäessä
Toinen menetelmä on käyttää ForAll-funktiota taulukkoa muovaavien funktioiden korvikkeena:
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
Tämä kaava voi olla joillekin yksinkertaisempi lukea ja kirjoittaa.
Mikään ForAll-funktion osa ei ole delegoitavissa. Vain ensimmäinen Products-taulukon osa arvioidaan, mikä voi olla ongelma suuren taulukon tapauksessa. Koska edellisessä esimerkissä Filter-funktio voidaan delegoida, se voi olla parempi vaihtoehto suurille tietojoukoille.
Tuloksen kerääminen
Joissakin tapauksissa voi olla tarpeen kopioida tiedot. Tietoja voi olla tarpeen siirtää yhdestä tietolähteestä toiseen. Tässä esimerkissä tilaukset lähetetään toimittajan järjestelmän NewOrder-taulukon kautta. Nopeita käyttäjän toimia varten voi olla tarpeen tallentaa välimuistiin paikallinen kappale, jotta vältytään palvelinviiveiltä.
Käytämme samaa taulukon muovaamista kuin kahdessa edellisessä esimerkissä, mutta kaappaamme tulokset kokoelmaan:
ClearCollect( NewOrder,
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
)
ClearCollect( NewOrder,
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
ClearCollect - ja Collect-toimintoja ei voi delegoida. Tämän vuoksi tällä menetelmällä ei voida siirtää suuria määriä tietoja.
ForAll-funktion sisäinen Collect-funktio
Lopuksi voimme suorittaa Collect-funktion suoraan ForAll-funktion sisällä:
Clear( NewOrder );
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
Collect( NewOrder,
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
Muistutuksena ForAll-funktiota ei voi tällä hetkellä delegoida. Jos Products-taulukkomme on suuri, ForAll tarkastelee vain tietueidemme ensimmäistä joukkoa, joten meiltä saattaa jäädä huomaamatta tuotteita, joita täytyy tilata. Tämä menetelmä sopii kuitenkin taulukoille, joiden tiedämme säilyvän pieninä.
Huomaa, että emme kaappaa ForAll-funktion tulosta. Sisältä päin tehdyt Collect-funktiokutsut palauttavat kaikille tietueille NewOrder-tietolähteen, mikä voisi merkitä suurta tietomäärää, jos se kaapattaisiin.
Komponentin taulukon yhdistäminen
Katso: Taulukoiden yhdistäminen.