Del via


Funksjonen ForAll

Gjelder: Lerretsapper Skrivebordsflyt Modelldrevne apper Power Platform CLI

Beregner verdier og utfører handlinger for alle oppføringer i en tabell.

Beskrivelse

Funksjonen ForAll evaluerer en formel for alle postene i en tabell. Formelen kan beregne en verdi og/eller utføre handlinger, for eksempel endring av data eller arbeide med en tilkobling. Bruk With-funksjonen til å evaluere formelen for én enkelt oppføring.

Bruk Sequence-funksjonen sammen med ForAll-funksjonen til å veksle basert på antall.

Feltene for oppføringen som blir behandlet er tilgjengelige i formelen. Bruk ThisRecord-operatoren eller bare referer til felt etter navn, på samme måte som andre verdier. As-operatoren kan også brukes til å gi navn til oppføringen som blir behandlet, noe som kan gjøre det enklere å forstå og ta i bruk nestede oppføringer. Hvis du vil ha mer informasjon, kan du se eksemplene nedenfor og arbeide med oppføringsomfang.

Returverdi

Resultatet fra hver formelevaluering returneres i en tabell, i samme rekkefølge som inndatatabellen.

Hvis resultatet av formelen er en enkeltverdi, vil den ferdige tabellen være en enkeltkolonnetabell. Hvis resultatet av formelen er en post, vil den ferdige tabellen inneholde poster med samme kolonner som resultatposten.

Hvis formelresultatet er en tom verdi, vil det ikke finnes noen poster i resultattabellen for inndataposten. I slike tilfeller vil det være færre poster i resultattabellen enn i kildetabellen.

Utfør handling

Formelen kan inkludere funksjoner som utfører handling, blant annet endring av poster i en datakilde med funksjonene Patch og Collect. Formelen kan også kalle opp metoder ved tilkoblinger. Flere handlinger kan utføres per post ved bruk av ;-operatøren. Du kan ikke endre tabellen som funksjonen ForAll brukes på.

Når du skriver en formel, må du huske på at poster kan behandles i en hvilken som helst rekkefølge og, når det er mulig, parallelt. Den første posten i tabellen kan behandles etter den siste posten.

Pass på at du ikke bestiller avhengigheter. Av denne grunn kan du ikke bruke funksjonene UpdateContext, Clear og ClearCollect i funksjonen ForAll, da disse enkelt kan brukes til å inneholde variabler som ville vært mottakelige for denne effekten. Du kan bruke Collect, men rekkefølgen på postene som legges til er ikke definert.

Flere funksjoner som endrer datakilder, inkludert Collect, Remove og Update, returnerer den endrede datakilden som returverdi. Disse returverdiene kan være store og bruke betydelig med ressurser hvis de returneres for hver post i ForAll-tabellen. Det kan også hende at disse returverdiene ikke er som du forventer, siden ForAll kan operere parallelt og kan separere funksjonens bivirkninger slik at de ikke oppnår resultat. Hvis returverdien fra ForAll ikke brukes, noe som ofte er tilfelle ved funksjoner for dataendring, vil det ikke bli opprettet en returverdi, og det vil ikke være grunn til å bekymre seg over ressurser eller bestilling. Hvis du imidlertid bruker resultatet fra en ForAll, og en av funksjonene returnerer en datakilde, bør du tenke nøye over hvordan du strukturerer resultatet og teste det på mindre datasett først.

Alternativer

Mange funksjoner i Power Apps kan behandle mer enn en verdi om gangen ved bruk av en enkeltkolonnetabell. For eksempel kan funksjonen Len behandle en tabell med tekstverdier og returnere en tabell med lengder på samme måte som ForAll. Dette kan fjerne behovet for å bruke ForAll i mange tilfeller, og er mer effektivt og enklere å lese.

ForAll kan heller ikke delegeres, men det kan andre funksjoner som for eksempel Filter.

Delegering

Denne funksjonen kan ikke delegeres når den brukes med en datakilde. Bare den første delen av datakilden hentes, og deretter brukes funksjonen. Resultatet representerer kanskje ikke den fullstendig historikken. Det vises kanskje en advarsel i redigeringsmodus for å minne deg på denne begrensningen, og for å foreslå at du bytter til alternativer som kan delegeres, der det er mulig. Hvis du vil ha mer informasjon, kan du se delegeringsoversikten.

Syntaks

ForAll( Table, Formula )

  • Table - obligatorisk. Tabellen som skal kjøres.
  • Formula – obligatorisk. Formelen som skal evalueres for alle postene i Table.

Eksempler

Beregninger

Følgende eksempler bruker Squaressom datakilde:

Eksempel med Squares.

For å opprette denne datakilden som en samling, angir du Button-kontrollens OnSelect-egenskap til denne formelen, åpner Forhåndsvisningsmodus, og deretter velger du knappen:

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

Formel Beskrivelse Resultat
ForAll( Squares, Sqrt( Value ) )

Sqrt( Squares )
Beregner kvadratroten av Value-kolonnen for alle postene i inndatatabellen. Funksjonen Sqrt kan også brukes med en enkeltkolonnetabell, noe som gjør det mulig å utføre dette eksempelet uten å bruke ForAll. Eksempel med Sqrt.
ForAll( Squares, Power( Value, 3 ) ) Opphøyer Value-kolonnen til tredje potens for alle postene i inndatatabellen. Funksjonen Power støtter ikke enkeltkolonnetabeller. Derfor må ForAll brukes i dette tilfellet. Eksempel med Power.

Bruke en tilkobling

Følgende eksempler bruker Expressionssom datakilde:

Eksempel med Expressions.

For å opprette denne datakilden som en samling, angir du Button-kontrollens OnSelect-egenskap til denne formelen, åpner Forhåndsvisningsmodus, og deretter velger du knappen:

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

Dette eksempelet bruker også en Microsoft Translator-tilkobling. Hvis du vil legge til denne tilkoblingen i appen din, kan du se artikkelen om hvordan du behandler tilkoblinger.

Formel Beskrivelse Resultat
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "es" ) ) Oversett innholdet i Value-kolonnen til spansk (forkortet «es») for alle postene i Expressions-tabellen. Eksempel med verdien «es».
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "fr" ) ) Oversett innholdet i Value-kolonnen til fransk (forkortet «fr») for alle postene i Expressions-tabellen. Eksempel med verdien «fr».

Kopiere en tabell

Noen ganger trenger du å filtrere, bearbeide, sortere og manipulere data. Power Apps inneholder mange funksjoner for å gjøre dette, for eksempel Filter, AddColumns og Sort. Power Apps behandler hver tabell som en verdi, slik at den kan flyte gjennom formler og være enkel i bruk.

Og noen ganger vil du lage en kopi av dette resultatet for senere bruk, eller du vil flytte informasjon fra én datakilde til en annen. Power Apps tilbyr funksjonen Collect for å kopiere data.

Før du kopierer, bør du likevel tenke nøye over om det er nødvendig. Mange situasjoner kan løses ved å filtrere og forme den underliggende datakilden etter behov med en formel. Noen av de negative sidene ved å lage en kopi er:

  • To kopier av den samme informasjonen betyr at en av dem kanskje ikke vil være synkronisert.
  • En kopi kan bruke opp mye av datamaskinens minne, nettverksbåndbredde og/eller tid.
  • For de fleste datakilder kan ikke kopiering delegeres, noe som begrenser hvor mye data som kan flyttes.

Følgende eksempler bruker Productssom datakilde:

Eksempel med Products-datakilde.

For å opprette denne datakilden som en samling, angir du Button-kontrollens OnSelect-egenskap til denne formelen, åpner Forhåndsvisningsmodus, og deretter velger du knappen:

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

Målet vårt er å arbeide med en avledet tabell som kun inkluderer elementer der det har blitt forspurt flere enn det antallet som er tilgjengelig, og som vi trenger å bestille:

Eksempel med avledet tabell.

Vi kan utføre denne oppgaven på forskjellige måter, der alle gir det samme resultatet, med ulike fordeler og ulemper.

Tabellbearbeiding ved behov

Ikke lag den kopien! Vi kan bruke følgende formel hvor som helst etter behov:

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

Omfanget av en post opprettes med funksjonene Filter og AddColumns for å utføre henholdsvis operasjonene sammenligning og subtraksjon, med feltene 'Quantity Requested' og 'Quantity Available' for hver post.

I dette eksempelet kan funksjonen Filter delegeres. Dette er viktig ettersom den kan finne alle produkter som oppfyller kriteriet, selv om dette kun er noen få poster i en tabell med millioner av poster. På dette tidspunktet kan ikke ShowColumns og AddColumns delegeres, noe som betyr at det faktiske antallet produkter som må bestilles, vil være begrenset. Hvis du vet at resultatet alltid vil være relativt lite, vil denne tilnærmingen være grei.

Siden vi ikke lagde en kopi, vil det ikke finnes noen ekstra kopi av informasjonen som må administreres eller som kan utdateres.

ForAll ved behov

En annen fremgangsmåte er å bruke funksjonen ForAll til å erstatte funksjonene for tabellbearbeiding:

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

Denne formelen kan være lettere å lese og skrive for noen personer.

Ingen deler av ForAll kan delegeres. Kun den første delen av Products-tabellen vil evalueres, noe som kan bli et problem hvis tabellen er stor. Siden Filter kunne delegeres i forrige eksempel, kan den fungere bedre med store datasett.

Samle inn resultatet

I noen tilfeller kan en kopi av data være nødvendig. Det kan hende at du må flytte informasjon fra én datakilde til en annen. I dette eksempelet legges ordrer inn gjennom en NewOrder-tabell i et leverandørsystem. For å oppnå brukersamhandling med høy hastighet kan det hende at du vil bufre en lokal kopi av tabellen for å unngå serverventetid.

Vi bruker den samme tabellbearbeidingen som i de to forrige eksemplene, men vi registrerer resultatet i en samling:

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 og Collect kan ikke delegeres. Dette betyr at det er en begrensning på hvor mye data som kan flyttes på denne måten.

Samle inn innenfor ForAll

Til slutt kan vi utføre Collect-funksjonen direkte i ForAll:

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

Funksjonen ForAll kan fortsatt ikke delegeres på dette tidspunktet. Hvis Products-tabellen er stor, vil ForAll kun se på det første settet med poster, og det kan hende at vi går glipp av noen produkter som må bestilles. Denne tilnærmingen er likevel grei for tabeller som vi vet at vil forbli små.

Vær oppmerksom på at vi ikke registrer resultatet fra ForAll. Collect-funksjonskall utført fra innsiden vil returnere NewOrder-datakilden for alle postene, noe som kan føre til store menger data hvis vi registrerer det.

Tilordne tabell i en komponent

Se Tilordne tabeller.