Jagamisviis:


Funktsioon ForAll

Kehtib: Lõuendirakendused Töölauavood Mudelipõhised rakendused Power Pages Power Platform CLI

Arvutab väärtused ja teostab toimingud kõikide kirjete kohta tabelis.

Kirjeldus

Funktsioon ForAll hindab kõigi tabeli kirjete valemit. Valem saab arvutada väärtuse ja/või teha toiminguid (nt andmete muutmine või ühendusega töötamine). Kasutage With funktsiooni, et hinnata ühe kirje valemit.

Loendi alusel itereerimiseks kasutage Sequence funktsiooni koos ForAll funktsiooniga.

Praegu töödeldavad kirje väljad on valemis saadaval. Kasutage tehtemärki ThisRecord või lihtsalt viidake väljadele nime järgi, nagu iga muu väärtuse korral. Tehtemärki As saab kasutada ka töödeldava kirje nimetamiseks, mis aitab teil valemit paremini mõista ja muuta pesastatud kirjed juurdepääsetavaks. Lisateabe saamiseks vaadake alltoodud näiteid ja jaotist kirje ulatusega töötamine.

Tagastusväärtus

Iga valemi hindamise tulemus tagastatakse tabelisse, samas järjestuses nagu sisestustabelis.

Kui valemi tulemus on üks väärtus, on tulemuseks saadud tabel ühe veeruga tabel. Kui valemi tulemus on kirje, on sisaldab tulemuseks saadud tabel samade veergudega kirjeid kui tulemikirje.

Kui valemi tulemus on tühi väärtus, siis antud sisendkirje kohta saadud tabelis kirjed puuduvad. Sellisel juhul on tulemitabelis väiksem arv kirjeid kui lähtetabelis.

Tegevuste tegemine

Valem võib sisaldada funktsioone, mis teevad toiminguid, nagu andmeallika kirjete muutmine funktsioonidega Patch ja Collect. Valem võib ka kutsuda välja meetodid ühendustele. Operaatori ; abil saab teha mitu toimingut kirje kohta. Te ei saa muuta tabelit, mis on ForAll funktsiooni subjekt.

Valemi kirjutamisel pidage meeles, et kirjeid saab töödelda mis tahes järjekorras ja võimaluse korral samaaegselt. Tabeli esimest kirjet võib pärast viimast kirjet töödelda.

Hoolitsege, et vältida sõltuvuste tellimist. Seetõttu ei saa te kasutada funktsioone UpdateContext, Clear ja ClearCollect funktsioonis ForAll, sest neid saab hõlpsalt kasutada muutujate hoidmiseks, mis on sobivad selleks. Võite kasutada funktsiooni Collect, kuid kirjete lisamise järjestus on määratlemata.

Mitu funktsiooni, mis muudavad andmeallikaid, sh Collect, Remove ja Update, tagastavad muudetud andmeallika nende tagastusväärtusena. Need tagastatavad väärtused võivad olla suured ja tarbida olulisi ressursse, kui need tagastatakse iga ForAll tabeli kirje jaoks. Samuti võite leida, et need tagastusväärtused pole see, mida ootate, kuna ForAll funktsioon saab töötada paralleelselt ning võib nende funktsioonide kõrvalmõjud eraldada nende tulemi hankimisest. Kui funktsiooni ForAll tagastusväärtust ei kasutata, see juhtub näiteks sageli andmete muutmise funktsioonide korral, siis tagastusväärtust ei looda ning puuduvad ressursside ja tellimusega seotud murekohad. Kuid kui kasutate ForAll ja ühte funktsiooni, mis annab tulemiks andmeallika, mõelge hoolikalt selle üle, kuidas te tulemusi struktureerite ja proovige seda kõigepealt väikeste andmekogumite peal.

Alternatiivid

Paljud funktsioonid saavad Power Appsis korraga töödelda rohkem kui ühte väärtust ühe veeruga tabeli kasutamise kaudu. Näiteks võib Len funktsioon töödelda tekstiväärtustega tabelit, tagastades pikkuste tabeli, samal viisil, nagu ForAll võis. See võib kaotada vajaduse kasutada ForAll funktsiooni paljudel juhtudel, võib olla tõhusam ning seda on kergem lugeda.

Teine kaalutlus on, et ForAll ei ole delegeeritav, kuigi muud funktsioonid võivad olla, näiteks Filter.

Delegeerimine

Koos andmeallikaga kasutamisel ei saa seda funktsiooni delegeerida. Tuuakse ainult andmeallika esimene osa ja seejärel rakendatakse funktsioon. Tulem ei pruugi esindada täielikku lugu. Koostamise ajal võidakse kuvada hoiatus, mis tuletab teile seda piirangut meelde ja soovitab võimalusel lülituda delegeeritavatele alternatiividele. Lisateabe saamiseks vt delegeerimise ülevaadet.

Süntaks

ForAll(tabel; valem)

  • Tabel - nõutav. Tabel, mille järgi tuleb tegutseda.
  • Valem - nõutav. Kõiki Tabeli kirjeid hindav valem.

Näited

Arvutused

Järgmistes näidetes on kasutatud Ruutudeandmeallikat:

Ruudu näide.

Antud andmeallika kogumine loomiseks määrake juhtelemendi Nupp atribuut OnSelect sellele valemile, avage eelvaaterežiim ning valige järgmine nupp.

ClearCollect( Squares, [ "1", "4", "9" ] )

Valem Kirjeldus Tulem
ForAll( ruudud, sqrt( väärtus ) )

Sqrt( Ruudud )
Kõikide kirjete jaoks tabelis arvutatakse veerus Väärtus ruutjuur. Sqrt-funktsiooni saab kasutada ka üheveerulise tabeliga, mis võimaldab seda näidet teha ilma ForAlli kasutamata. Sqrt näide.
ForAll( ruudud, võimsus( väärtus, 3 ) ) Kõikide kirjete jaoks tabelis tõuseb veerg Väärtus kolmanda astmeni. Funktsioon Power ei toeta üheveerulisi tabeleid. Seetõttu tuleb sel juhul kasutada funktsiooni ForAll. Võimsuse näide.

Ühenduse kasutamine

Järgmistes näidetes on kasutatud Avaldisteandmeallikat:

Avaldiste näide.

Antud andmeallika kogumine loomiseks määrake juhtelemendi Nupp atribuut OnSelect sellele valemile, avage eelvaaterežiim ning valige järgmine nupp.

ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )

Selles näites Microsoft kasutatakse ka tõlkija ühendust. Seose rakendusele lisamiseks lugege artiklit seoste haldamise kohta.

Valem Kirjeldus Tulem
ForAll(Expressions, MicrosoftTranslator.Translate( Value, "es")) Tõlkige kõigi avaldiste tabelis olevate kirjete jaoks veeru Väärtus sisu hispaania keelde (lühend "es"). Näide väärtusega
ForAll(Expressions, MicrosoftTranslator.Translate( Väärtus, "fr")) Tõlgi kõigi avaldiste tabelis olevate kirjete jaoks veeru Väärtus sisu prantsuse keelde (lühend "fr"). Näide väärtusega

Tabeli kopeerimine

Mõnikord on vaja andmeid filtreerida, kujundada, sortida ja manipuleerida. Power Apps pakub selleks mitmesuguseid funktsioone, nagu näiteks Filter, AddColumns ja Sort. Power Apps kohtleb iga tabelit väärtusena, võimaldades selle valemeid läbivat voogu ning hõlpsat tarbimist.

Vahel võite soovida luua tulemusest koopia, et seda hiljem kasutada, või liigutada teavet ühest andmeallikast teise. Power Apps pakub funktsiooni Collect andmete kopeerimiseks.

Kuid enne koopia tegemist mõelge hoolikalt, kas see on vajalik. Paljusid olukordi saab lahendada, filtreerides ja kujundades aluseks võetud andmeallika vajadusel valemiga. Mõned negatiivsed punktid, et koopiat teha, on järgmised.

  • Sama teabe kaks koopiat tähendab seda, et üks võib sünkroonist väljuda.
  • Koopia tegemine võib nõuda liiga palju arvutimälu, võrgu ribalaiust ja/või aega.
  • Enamiku andmeallikate puhul ei saa seda kopeerida, vaid piirata, kui palju andmeid saab teisaldada.

Järgmistes näidetes on kasutatud Toodeteandmeallikat:

Näide andmeallikaga tootest.

Antud andmeallika kogumine loomiseks määrake juhtelemendi Nupp atribuut OnSelect sellele valemile, avage eelvaaterežiim ning valige järgmine nupp.

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 }
    )
)

Meie eesmärk on teha koostööd tuletisväärtpaberite tabeliga, mis hõlmab ainult neid üksusi, kus on rohkem taotlusi, kui on saadaval, ja mille jaoks meil on vaja tellimus esitada.

Näide tuletatud tabelist.

Me saame seda ülesannet teha paaril erineval viisil, mis kõik annavad sama tulemuse, millel on erinevad plussid ja miinused.

Tabeli kujundamine nõudmisel

Ärge tehke seda koopiat! Saame kasutada järgmist valemit kõikjal, kus vaja.

// 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"
)

Kirje ulatuse loovad funktsioonid Filter ja AddColumns, et teha võrdlus- ja lahutustehteid, vastavalt iga kirje väljadega Nõutud kogus ja Saadaval kogus.

Selles näites saab funktsiooni Filter delegeerida. See on oluline, sest see võib leida kõiki tooteid, mis vastavad kriteeriumidele, isegi kui see on vaid vähesed kirjed miljonist tabelis. Praegu ei saa funktsioone ShowColumns ja AddColumns delegeerida, nii et selliste toodete koguarv, mida tuleb tellida, on piiratud. Kui teate, et selle tulemuse suurus on alati suhteliselt väike, on see lähenemine hea.

Ja kuna me ei teinud koopiat, ei ole enam lisakoopiat selle teabe hadamiseks või aegumiseks.

ForAll nõudmisel

Teine lahendus on kasutada funktsiooni ForAll, et asendada tabeli kujundamise funktsioone.

ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        {
            Product: Product,
            'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
        }
    )
)

Mõnel inimesel võib see valem olla lihtsam lugeda ja kirjutada.

Ükski ForAll osa pole delegeeritav. Hinnatakse vaid tabeli Tooted esimest osa ning see võib suure tabeli korral osutuda probleemiks. Kuna Filter võib olla eelmises näites delegeeritud, võib see suurema hulga andmekogumite korral paremini töötada.

Tulemuste kogumine

Teatud olukordades võib olla vaja andmete koopiat. Või teil on vaja teavet teisaldada ühest andmeallikast teise. Selles näites esitatakse tellimused NewOrder tabeli kaudu vendori süsteemis. Suure kiirusega kasutajasuhtluse jaoks võib juhtuda, et soovite, et vahemällu talletataks tabel kohalik koopia, mis ei sisaldaks serveri latentsust.

Me kasutame sama tabelit, mis on kujundatud kahe eelmise näitena, kuid toome tulemuse kollektsiooni.

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 ei saa delegeerida. Selle tulemusena on andmete hulk, mida saab sel viisil teisaldada, piiratud.

Collect ForAll sees

Lõpuks saame kasutada funktsiooni Collect otse ForAll sees:

Clear( NewOrder );
ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        Collect( NewOrder,
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

Jällegi ei saa seekord ForAll funktsiooni delegeerida. Kui meie tabel Tooted on suur, ForAll vaatab ainult esimesele kirjete kogumile ja me võime vahele jätta mõned tooted, mida on vaja tellida. Kuid tabelite jaoks, mida me teame, et jäävad väikeseks, on see lähenemine hea.

Pange tähele, et me ei hõiva ForAll funktsiooni tulemit. Funktsiooni Collect funktsioonisisesed kutsed tagastavad kõikide selliste kirje NewOrder andmeallika, mis võiks jäädvustamisel lisada mitmeid andmeid.

Tabeli vastendamine komponendis

Vt jaotist Tabelite vastendamine.