Zdieľať cez


Funkcia ForAll

Vzťahuje sa na: Aplikácie plátna Copilot Studio Desktop postupy modelom riadené aplikácie Power Platform CLI Dataverse funkcie Power Pages

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

Popis

Funkcia ForAll vyhodnotí 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.

Na iterovanie na základe počtu použite funkciu Sequence s ForAll funkciou .

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ľka je tabuľka s jedným stĺpcom. 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, vo výslednej tabuľke pre tento vstupný záznam neexistuje žiadny záznam. V tomto prípade je výsledná tabuľka 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í. Nemôžete upraviť tabuľku, ktorá je predmetom ForAll funkcie.

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 ForAll funkcii použiť funkcie UpdateContext, Clear a ClearCollect, pretože by mohli ľahko uchovávať premenné, ktoré môžu byť náchylné k tomuto efektu. 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 prostriedkov, ak sa vracajú pre každý záznam ForAll tabuľky. Môžete tiež zistiť, že tieto vrátené hodnoty nie sú to, čo ste očakávali, pretože ForAll môžu fungovať paralelne a môžu oddeliť vedľajšie účinky týchto funkcií od získania ich výsledku. Ak sa nepoužije vrátená hodnota ForAll , čo je často prípad funkcií zmeny údajov, nevytvorí sa vrátená hodnota a nie sú tu žiadne obavy týkajúce sa zdrojov alebo objednávok. Ak však používate výsledok funkcie a niektorú ForAll z funkcií, ktoré vracajú zdroj údajov, premyslite dôkladne spôsob štruktúrovania výsledku a vyskúšajte si to najprv na malých množinách údajov.

Alternatívy

Mnohé funkcie v službe Power Apps dokážu spracovať viac hodnôt súčasne pomocou tabuľky s jedným stĺpcom. Funkcia Len napríklad môže spracovať tabuľku textových hodnôt a vrátiť tabuľku dĺžok rovnakým spôsobom, ako by to ForAll mohlo. Vďaka tomu sa dá odstrániť potreba použitia ForAll v mnohých prípadoch, môže byť efektívnejšia a čitateľnejšia.

Ďalej je potrebné vziať do úvahy, že ForAll delegovanie je možné, zatiaľ čo iné funkcie môžu byť, ako napríklad 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

ForAll(Tabuľka, Vzorec)

  • Tabuľka – 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 ( štvorce )
Pre všetky záznamy vo vstupnej tabuľke vypočíta druhú odmocninu stĺpca Value. Funkciu Sqrt môžete tiež použiť s tabuľkou s jedným stĺpcom a tým vykonať tento príklad bez použitia funkcie 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. ForAll Preto sa musia použiť v tomto prípade. 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(Výrazy, 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(Výrazy, 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, čo jej umožňuje jednoducho používať vzorce a využívať ich.

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 je potrebná. 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ť, je obmedzený. Ak viete, že veľkosť tohto výsledku je 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 mohli spravovať alebo ktoré by mohli zastarať.

ForAll na požiadanie

Ďalšou možnosťou je použiť ForAll funkciu na nahradenie funkcií tvarovania 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ť skopírovať lokálnu kópiu tabuľky do vyrovnávacej pamäte, aby nedochádza 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'
            }
        )
    )
)

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 ForAll

Nakoniec vykonáme funkciu Collect priamo v rámci :ForAll

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

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

Všimnite si, že zaznamenávame výsledok ForAllfunkcie . Volanie funkcie Collect zvnútra vráti zdroj údajov NewOrder pre všetky záznamy, čo by mohlo pridať k množstvu údajov, ak by sme ich zaznamenávali.

Tabuľka mapy v komponente

Pozri Mapovanie tabuliek.