Share via


Funkcija ForAll

Velja za: Aplikacije Canvas Namizne tokove Aplikacije, ki temeljijo na modelu Power Platform CLI

Izračuna vrednosti in izvede dejanja za vse zapise v tabeli.

Opis

Funkcija ForAll ovrednoti formulo za vse zapise v tabeli. Formula lahko izračuna vrednost in/ali izvede dejanja, kot so spreminjanje podatkov ali delo s povezavo. Uporabi funkcijo With za oceno formule za en zapis.

Uporabi funkcijo Sequence s funkcijo ForAll za ponavljanje na podlagi izračuna.

Polja zapisa, ki je trenutno v obdelavi, so na voljo v okviru formule. Uporabite operator ThisRecord ali pa polja preprosto navedite poimensko, kot bi storili za katero koli drugo vrednost. Operator As lahko uporabite tudi za poimenovanje zapisa, ki se obdeluje, s čimer bo formulo lažje razumeti in bodo dostopni ugnezdeni zapisi. Več informacij je v spodnjih primerih in razdelku delo z obsegom zapisov.

Vrnjena vrednost

Rezultat vsakega ocenjevanja formule je vrnjen v tabeli v istem zaporedju kot vnosna tabela.

Če je rezultat formule ena vrednost, bo dobljena tabela tabela z enim stolpcem. Če je rezultat formule zapis, bo dobljena tabela vsebovala zapise z enakimi stolpci kot zapis rezultatov.

Če je rezultat formule vrednost prazno, potem v pridobljeni tabeli za ta vhodni zapis ni zapisa. V tem primeru bo manj zapisov v pridobljeni tabeli kot v izvorni tabeli.

Ukrepanje

Formula lahko vključuje funkcije za ukrepanje, kot je spreminjanje zapisov vira podatkov s funkcijama Patch in Collect. Formula lahko tudi prikliče načine za povezave. Za zapis je mogoče izvesti več dejanja z uporabo operatorja ;. Ne morete spremeniti tabele, ki je predmet funkcije ForAll.

Ko pišete formulo, upoštevajte, da je mogoče zapise obdelati v poljubnem vrstnem redu in, če je mogoče, vzporedno. Prvi zapis tabele se lahko obdela po zadnjem zapisu.

Pazite, da se izognete razvrščanju odvisnosti. Iz tega razloga ne morete uporabiti funkcij UpdateContext, Clear in ClearCollect znotraj funkcije ForAll, ker bi se lahko zlahka uporabile za pridržanje spremenljivk, ki bi bile dovzetne za ta učinek. Lahko uporabite Collect, toda zaporedje, v katerem se zapisi dodajo, je nedoločeno.

Več funkcij, ki spreminjajo vire podatkov, vključno Collect, Remove in Update, vrne spremenjeni vir podatkov kot vrnjeno vrednost. Te vrnjene vrednosti so lahko velike in porabijo veliko virov, če so vrnjene za vsak zapis tabele ForAll. Morda boste ugotovili tudi, da te vrnjene vrednosti niso pričakovane, ker lahko funkcija ForAll operira vzporedno in lahko loči neželene učinke teh funkcij ob pridobivanju rezultata. Če vrnjena vrednost funkcije ForAll ni uporabljena, kar je pogosto pri funkcijah za spreminjanje podatkov, potem vrnjena vrednost ne bo ustvarjena in ni pomislekov glede virov ali naročil. Če pa uporabljate rezultat funkcije ForAll ter ena od funkcij vrne vir podatkov, skrbno razmislite, kako strukturirati rezultat in najprej poskusite na majhnih naborih podatkov.

Alternative

Veliko funkcij v rešitvi Power Apps lahko obdela več kot eno vrednost naenkrat z uporabo tabele z enim stolpcem. Funkcija Len lahko na primer obdela tabelo besedilnih vrednosti in vrne tabelo z dolžinami na isti način kot bi to storila funkcija ForAll. To v veliko primerih odpravlja potrebo po uporabi funkcije ForAll, je lahko učinkovitejše in je enostavnejše za branje.

Drug pomislek je, da funkcija ForAll ni dodeljiva, medtem ko druge funkcije morda so, npr. Filter.

Pooblastitev

Ko je uporabljena z virom podatkov, te funkcije ni mogoče pooblastiti. Pridobljen bo samo prvi del vira podatkov, nato bo uporabljena funkcija. Rezultat morda ne pokaže celotne slike. V času ustvarjanja se lahko prikaže opozorilo, ki vas opomni na to omejitev in predlaga, da uporabite možnosti, ki jih je mogoče pooblastiti, če so na voljo. Če želite več informacij, glejte razdelek Pregled pooblastitev.

Sintaksa

ForAll( Table, Formula )

  • Table – obvezno. Tabela, na podlagi katere se ukrepa.
  • Formula – obvezno. Formula za ovrednotenje za vse zapise možnosti Tabela.

Primeri

Izračuni

Naslednji primeri uporabljajo vir podatkov Squares:

Primer vira podatkov »Squares«.

Če želite ustvariti ta vir podatkov kot zbirko, nastavite lastnost OnSelect kontrolnika Button za upravljanje te formule, odprite način predogleda in nato izberite »Button«:

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

Formula Opis Rezultat
ForAll( Squares, Sqrt( Value ) )

Sqrt( Squares )
Za vse zapise vnosne tabele izračuna kvadratni koren stolpca Vrednost. Funkcijo Sqrt je mogoče uporabiti tudi s tabelo z enim stolpcem, kar omogoča izvedbo tega primera brez uporabe ForAll. Primer funkcije »Sqrt«.
ForAll( Squares, Power( Value, 3 ) ) Za vse zapise vnosne tabele dvigne stolpec Vrednost na tretjo potenco. Funkcija Power ne podpira tabel z enim stolpcem. Zato je treba v tem primeru uporabiti ForAll. Primer funkcije »Power«.

Uporaba povezave

Naslednji primeri uporabljajo vir podatkov Expressions:

Primer vira podatkov »Expressions«.

Če želite ustvariti ta vir podatkov kot zbirko, nastavite lastnost OnSelect kontrolnika Button za upravljanje te formule, odprite način predogleda in nato izberite »Button«:

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

Ta primer uporablja tudi povezavo Microsoft Translator. Če želite to povezavo dodati v svojo aplikacijo, glejte članek Upravljanje povezav.

Formula Opis Rezultat
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "es" ) ) Za vse zapise v tabeli »Expressions« prevedi vsebino stolpca Value v španščino (okrajšano kot »es«). Primer z vrednostjo »es«.
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "fr" ) ) Za vse zapise v tabeli »Expressions« prevedi vsebino stolpca Value v francoščino (okrajšano kot »fr«). Primer z vrednostjo »fr«.

Kopiranje tabele

Včasih morate filtrirati, oblikovati, razvrstiti in manipulirati podatke. Storitev Power Apps ponuja številne funkcije za to, na primer Filter, AddColumns in Sort. Storitev Power Apps obravnava vsako tabelo kot vrednost in ji omogoča, da potuje skozi formule in da je brez težav porabljena.

Včasih želite narediti kopijo tega rezultata za kasnejšo uporabo ali želite informacije premakniti iz enega vira podatkov v drugega. Power Apps zagotavlja funkcijo Collect za kopiranje podatkov.

Toda preden naredite to kopijo, dobro premislite, če jo potrebujete. Veliko situacij je mogoče obravnavati s filtriranjem in oblikovanjem temeljnega vira podatkov na zahtevo s formulo. Nekatere slabosti izdelave kopije vključujejo:

  • Če obstajata dve kopiji istih podatkov, lahko kopiji nista usklajeni.
  • Ustvarjanje kopije lahko porabi veliko računalniškega pomnilnika, omrežne pasovne širine in/ali časa.
  • Za večino virov podatkov kopiranja ni mogoče dodeliti, kar omejuje količino podatkov, ki jih je mogoče premakniti.

Naslednji primeri uporabljajo vir podatkov Products:

Primer vira podatkov »Products«.

Če želite ustvariti ta vir podatkov kot zbirko, nastavite lastnost OnSelect kontrolnika Button za upravljanje te formule, odprite način predogleda in nato izberite »Button«:

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

Naš cilj je delati z izpeljano tabelo, ki vključuje samo elemente, kjer je bilo več zahtevano, kot je na voljo, in za katere je treba umestiti naročilo:

Primer izpeljane tabele.

To opravilo je mogoče izvesti na nekaj različnih načinov, ki imajo vsi isti rezultat, z različnimi prednostmi in slabostmi.

Oblikovanje tabele na zahtevo

Ne ustvarite te kopije! Naslednjo formulo lahko uporabimo povsod, kjer je potrebno:

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

Obseg zapisov ustvarita funkciji Filter in AddColumns, da se izvedeta postopka primerjave in odštetja s polji 'Quantity Requested' in 'Quantity Available' vsakega zapisa.

V tem primeru je mogoče funkcijo Filter dodeliti. To je pomembno, saj lahko najde vse izdelke, ki izpolnjujejo merila, tudi če gre samo za nekaj zapisov v tabeli milijonov. V tem času možnosti ShowColumns in AddColumns ni mogoče pooblastiti, zato bo dejansko število izdelkov, ki jih je treba naročiti, omejeno. Če veste, da bo velikost rezultata vedno relativno majhna, je ta pristop ustrezen.

In ker nismo ustvarili kopije, ni dodatne kopije informacij, ki bi jo bilo treba upravljati ali bi zastarela.

»ForAll« na zahtevo

Drug pristop je uporaba funkcije ForAll za nadomestitev funkcij za oblikovanje tabele:

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

Ta formula je lahko za nekatere ljudi enostavnejša za brane in zapisovanje.

Noben del funkcije ForAll ni dodeljiv. Samo prvi del tabele Products bo ovrednoten, kar lahko predstavlja težave, če je ta tabela velika. Ker bi bilo mogoče funkcijo Filter v prejšnjem primeru dodeliti, bi lahko bolje delovala z velikimi nabori podatkov.

Zbiranje rezultata

V nekaterih primerih je morda potrebna kopija podatkov. Morda boste želeli premakniti informacije iz enega vira podatkov v drugega. V tem primeru se naročila umestijo prek tabele NewOrder v dobaviteljevem sistemu. Za hitre uporabniške interakcije boste morda želeli predpomniti lokalno kopijo tabele, da ne bo strežniške zakasnitve.

Uporabljamo isto oblikovanje tabele kot v prejšnjih dveh primerih, toda rezultat bomo zajeli v zbirko:

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

Funkcij ClearCollect in Collect ni mogoče dodeliti. Zato je količina podatkov, ki jo je mogoče premakniti na ta način, omejena.

Zbiranje znotraj funkcije »ForAll«

Končno lahko izvedemo funkcijo Collect neposredno v funkciji ForAll:

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

Funkcije ForAll trenutno ni mogoče dodeliti. Če je naša tabela Products velika, bo funkcija ForAll pogledala samo prvi nabor zapisov in morda bomo spregledali nekatere izdelke, ki jih je treba naročiti. Toda za tabele, za katere vemo, da bodo ostale majhne, je ta pristop ustrezen.

Upoštevajte, da ne bomo zajeli rezultata funkcije ForAll. Klici znotraj funkcije Collect vrnejo vir podatkov NewOrder za vse zapise, ki bi lahko prispevali številnim podatkom, če bi jih zajemali.

Preslikava tabele v komponento

Glejte Preslikava tabel.