Funkcia ForAll

Vzťahuje sa na: aplikácie plátna toky na počítači aplikácie riadené modelom Power Platform CLI

Vypočíta hodnoty a vykoná akcie v prípade všetkých záznamov v tabuľke.

Popis

Funkcia ForAll vyhodnocuje vzorec pre všetky záznamy v tabuľke. Vzorec môže vypočítať hodnotu alebo vykonať akcie, ako sú napríklad úpravy údajov alebo práca s pripojením. Použite funkciu With na vyhodnotenie vzorca pre jeden záznam.

Použite funkciu Sequence s funkciou ForAll na iteráciu na základe počtu.

Polia záznamu, ktorý sa momentálne spracúva, sú k dispozícii v rámci vzorca. Použite operátor ThisRecord alebo jednoducho odkážte na polia podľa názvu, ako by ste urobili s ľubovoľnou inou hodnotou. Operátor As sa dá použiť aj na pomenovanie záznamu, ktorý sa práve spracúva, vďaka čomu môžete vytvoriť ľahšie pochopiteľný vzorec a sprístupniť vnorené záznamy. Ďalšie informácie nájdete v príkladoch nižšie a v téme, ako pracovať s rozsahom záznamu.

Vrátená hodnota

Výsledok vyhodnotenia jednotlivých vzorcov sa vráti v tabuľke v rovnakom poradí ako vo vstupnej tabuľke.

Ak je výsledkom vzorca jedna hodnota, výslednú tabuľku bude tvoriť jeden stĺpec. Ak je výsledkom vzorca záznam, bude výsledná tabuľka obsahovať záznamy s rovnakými stĺpcami, ako má výsledný záznam.

Ak je výsledkom vzorca prázdna hodnota, nebude vo výslednej tabuľke existovať pre danú vstupnú tabuľku žiadny záznam. V takom prípade bude výsledná tabuľka obsahovať menej záznamov ako zdrojová tabuľka.

Vykonanie akcie

Vzorec môže obsahovať funkcie, ktoré vykonávajú akciu, ako je napríklad zmena záznamov zdroja údajov pomocou funkcií Patch a Collect. Vzorec môže tiež volať metódy v prípade pripojení. Pomocou operátora ; je tiež možné v prípade záznamov vykonať viac akcií. Tabuľku, ktorá je predmetom funkcie ForAll, zmeniť nie je možné.

Keď píšete vzorec, nezabudnite, že záznamy je možné spracovávať v ľubovoľnom poradí a tam, kde je to možné, aj paralelne. Prvý záznam tabuľky môže byť spracovaný až po poslednom zázname.

Snažte sa vyhnúť závislostiam radenia. Z tohto dôvodu nemôžete vo funkcii ForAll použiť funkcie UpdateContext, Clear a ClearCollect, pretože môžu ľahko uchovávať premenné, ktoré môžu byť náchylné k tomuto správaniu. Môžete použiť funkciu Collect, ale poradie, v ktorom sa záznamy pridávajú, nie je definované.

Niekoľko funkcií, ktoré menia zdroje údajov, vrátane funkcií Collect, Remove a Update, vracajú ako svoju vrátenú hodnotu zmenený zdroj údajov. Tieto vrátené hodnoty môžu byť veľké a môžu spotrebúvať výrazné množstvo zdrojov, ak sa vracajú pre každý záznam tabuľky ForAll. Môžete tiež zistiť, že tieto vrátené hodnoty nie sú tie, ktoré ste očakávali, pretože ForAll môže fungovať paralelne a môže izolovať vedľajšie efekty týchto funkcií od získania ich výsledku. Ak sa vrátená hodnota z funkcie ForAll skutočne nepoužije, k čomu často dochádza v prípade funkcií zmeny údajov, nevytvorí sa vrátená hodnota a nie je potrebné sa zaoberať s prostriedkami alebo radením. Ak ale používate výsledok funkcie ForAll a niektorú z funkcií, ktoré vracajú zdroj údajov, premyslite dôkladne spôsob štruktúrovania daného výsledky a vyskúšajte si to najprv na malých množinách údajov.

Alternatívy

Mnoho funkcií v Power Apps môže spracovať viac hodnôt súčasne pomocou tabuľky s jedným stĺpcom. Funkcia Len napríklad môže spracovať tabuľku s textovými hodnotami a vrátiť tabuľku dĺžok rovnakým spôsobom ako funkcia ForAll. V mnohých prípadoch sa tým môžete vyhnúť použitiu funkcie ForAll a dosiahnuť tak efektívnejších a čitateľnejších výsledkov.

Ďalej je potrebné vziať do úvahy, že funkciu ForAll nie je možné delegovať, ale iné funkcie áno, napríklad funkciu Filter.

Delegovanie

Túto funkciu nemožno delegovať, keď sa používa so zdrojom údajov. Načíta sa iba prvá časť zdroja údajov a potom sa použije príslušná funkcia. Výsledok nemusí predstavovať úplný obsah. V čase vytvárania sa môže zobraziť upozornenie, ktoré vám pripomenie toto obmedzenie a navrhne vám prepnúť na alternatívy, ktoré možno delegovať (ak je to možné). Ďalšie informácie nájdete v prehľade delegovania.

Syntax

ForAllTable, Formula )

  • Table – povinné. Tabuľka, v prípade ktorej sa má akcia vykonať.
  • Vzorec – povinné. Vzorec na vyhodnotenie všetkých záznamov tabuľky.

Príklady

Výpočty

Nasledujúce príklady používajú zdroj údajovSquares:

Príklad štvorcov.

Ak chcete vytvoriť tento zdroj údajov ako kolekciu, nastavte vlastnosť OnSelect ovládacieho prvku Tlačidlo na tento vzorec, otvorte režim ukážky a potom kliknite alebo ťuknite na tlačidlo:

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

Vzorec Popis Výsledok
ForAll( Squares, Sqrt( Value ) )

Sqrt( Squares )
Pre všetky záznamy vo vstupnej tabuľke vypočíta druhú odmocninu stĺpca Value. Funkciu Sqrt je možné použiť aj s jednostĺpcovou tabuľkou, čo umožňuje vykonať tento príklad bez použitia ForAll. Ukážka funkcie Sqrt.
ForAll( Squares, Power( Value, 3 ) ) V prípade všetkých záznamov vo vstupnej tabuľke umocní stĺpec Value na tretiu. Funkcia Power nepodporuje tabuľky s jedným stĺpcom. Z tohto dôvodu je v tomto prípade potrebné použiť funkciu ForAll. Ukážka funkcie Power.

Použitie pripojenia

Nasledujúce príklady používajú zdroj údajovExpressions:

Ukážka výrazov.

Ak chcete vytvoriť tento zdroj údajov ako kolekciu, nastavte vlastnosť OnSelect ovládacieho prvku Tlačidlo na tento vzorec, otvorte režim ukážky a potom kliknite alebo ťuknite na tlačidlo:

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

V tomto príklade sa tiež používa pripojenie Microsoft Translator. Ak chcete pridať toto pripojenie do svojej aplikácie, nájdite potrebné informácie v článku venovanom správe pripojení.

Vzorec Popis Výsledok
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "es" ) ) V prípade všetkých záznamov v tabuľke Expressions preloží obsah stĺpca Value do španielčiny (skrátene „es“). Príklad s hodnotou „es.“
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "fr" ) ) V prípade všetkých záznamov v tabuľke Expressions preloží obsah stĺpca Value do francúzštiny (skrátene „fr“). Príklad s hodnotou „fr.“

Kopírovanie tabuľky

Niekedy potrebujete filtrovať, štruktúrovať a radiť údaje alebo s nimi inak pracovať. Power Apps poskytuje na tento účel mnoho funkcií, napríklad Filter, AddColumns a Sort. Power Apps nakladá s každou tabuľkou ako s hodnotou a umožňuje ju jednoducho používať vo vzorcoch a ďalej využívať.

A niekedy si chcete urobiť kópiu tohto výsledku pre neskoršie použitie, alebo chcete presunúť informácie z jedného zdroj údajov do druhého. Na kopírovanie údajov poskytuje Power Apps funkciu Collect.

Než vytvoríte kópiu, dôkladne zvážte, či ju potrebujete. V mnohých situáciách postačí filtrovanie a štruktúrovanie základného zdroja údajov na požiadanie pomocou vzorca. Nevýhody vytvárania kópií zahrnujú:

  • Dve kópie rovnakých informácií spôsobia, že jedna z nich nebude synchronizovaná.
  • Vytvorenie kópie môže spotrebovať veľa počítačovej pamäte, šírky pásma siete a času.
  • V prípade väčšiny zdrojov údajov nie je možné kopírovanie delegovať, čo obmedzuje množstvo údajov, ktoré je možné presunúť.

Nasledujúce príklady používajú zdroj údajovProducts:

Príklad zdroja údajov výrobkov.

Ak chcete vytvoriť tento zdroj údajov ako kolekciu, nastavte vlastnosť OnSelect ovládacieho prvku Tlačidlo na tento vzorec, otvorte režim ukážky a potom kliknite alebo ťuknite na tlačidlo:

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ším cieľom je pracovať s odvodenou tabuľkou obsahujúcou iba položky, pri ktorých sa požaduje viac, ako je dostupné, a pre ktoré potrebujeme zadať objednávku:

Príklad tabuľky derivácií.

Túto úlohu môžeme vykonať niekoľkými rôznymi spôsobmi, ktoré prinesú rovnaký výsledok s rôznymi výhodami a nevýhodami.

Štruktúrovanie tabuľky na požiadanie

Nevytvárajte kópiu! Nasledujúci vzorec môžeme použiť všade, kde potrebujeme:

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

Funkcie Filter a AddColumns vytvoria rozsah záznamov, aby pomocou polí Quantity Requested a Quantity Available jednotlivých záznamov mohli vykonať operácie porovnania a odčítania.

V tomto príklade je možné funkciu Filter delegovať. To je dôležité, pretože tak môžete vyhľadať všetky produkty, ktoré spĺňajú dané kritériá, aj keď ide iba o pár záznamov z tabuľky obsahujúcej milióny položiek. Funkcie ShowColumns a AddColumns sa momentálne nedajú delegovať, takže skutočný počet produktov, ktoré je potrebné zoradiť, bude obmedzený. Ak viete, že veľkosť tohto výsledku bude vždy relatívne malá, je tento prístup v poriadku.

A vzhľadom na to, že sme nevytvorili kópiu, neexistuje žiadna kópia informácií, ktorú by ste museli spravovať alebo ktorá by mohla zastarať.

Funkcia ForAll na požiadanie

Ďalšou možnosťou je použiť funkciu ForAll na nahradenie funkcií štruktúrovania tabuľky:

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

Čítanie a vytvorenie tohto vzorca môže byť pre niektorých používateľov jednoduchšie.

Žiadnu časť funkcie ForAll nie je možné delegovať. Vyhodnotí sa iba prvá časť tabuľky Products, čo môže predstavovať problém v prípade, že je tabuľka veľká. Keďže funkciu Filter je možné v predchádzajúcom príklade delegovať, mohla by fungovať lepšie v prípade veľkých množín údajov.

Zhromaždenie výsledku

V niektorých situáciách budete potrebovať kópiu údajov. Možno budete potrebovať presunúť informácie z jedného zdroja údajov do iného. V tomto príklade sa objednávky zadávajú prostredníctvom tabuľky NewOrder v systéme dodávateľa. V prípade vysokorýchlostných používateľských interakcií môžete chcieť uložiť miestnu kópiu tabuľky do vyrovnávacej pamäte, aby nedochádzalo k latencii servera.

Použijeme štruktúrovanie tabuľky ako v predchádzajúcich dvoch príkladoch, ale výsledok zaznamenáme v kolekcii:

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

Funkcie ClearCollect a Collect nie je možné delegovať. V dôsledku toho je množstvo údajov, ktoré je možné týmto spôsobom presunúť, obmedzené.

Zhromažďovanie v rámci funkcie ForAll

Nakoniec vykonáme akciu Collect priamo v rámci funkcie ForAll:

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

Ani v tomto prípade nie je možné funkciu ForAll delegovať. Ak je naša tabuľka Products veľká, funkcia ForAll sa pozrie iba na prvú množinu záznamov, a je preto možné, že nám uniknú niektoré produkty, ktoré je potrebné zoradiť. Ale v prípade tabuliek, o ktorých vieme, že zostanú malé, je tento prístup v poriadku.

Všimnite si, že zaznamenávame výsledok funkcie ForAll. Volanie funkcie Collect priamo z tejto funkcie vráti zdroj údajov NewOrder pre všetky záznamy, čo by mohlo viesť k nárastu objemu údajov, ak by sme ich zaznamenávali.

Tabuľka mapy v komponente

Pozri Mapovanie tabuliek.