Funkce ForAll

Platí pro: aplikace plátna desktopové toky modelem řízené aplikace Power Platform CLI

Vypočítá hodnoty a provede akce u všech záznamů v tabulce.

Popis

Funkce ForAll vyhodnocuje vzorec pro všechny záznamy v tabulce. Vzorec může vypočítat hodnotu nebo provést akce, jako jsou třeba úpravy dat nebo práce s připojením. Pomocí funkce With vyhodnoťte vzorec pro jeden záznam.

Pomocí funkce Sequences funkcí ForAll proveďte iteraci na základě počtu.

Aktuálně zpracovávaná pole záznamu jsou dostupná v rámci vzorce. Použijte operátor ThisRecord nebo jednoduše odkazujte na pole podle jména, jako byste měli jakoukoli jinou hodnotu. Operátor As lze také použít k pojmenování zpracovávaného záznamu, což může usnadnit pochopení vzorce a zpřístupnit vnořené záznamy. Další informace uvádějí následující příklady a práce s rozsahem záznamu.

Vrácená hodnota

Výsledek vyhodnocení jednotlivých vzorců se vrátí v tabulce ve stejném pořadí jako ve vstupní tabulce.

Pokud je výsledkem vzorce jedna hodnota, výslednou tabulku bude tvořit jeden sloupec. Pokud je výsledkem vzorce záznam, bude výsledná tabulka obsahovat záznamy se stejnými sloupci, jako má výsledný záznam.

Pokud je výsledkem vzorce prázdná hodnota, nebude ve výsledné tabulce existovat pro danou vstupní tabulku žádný záznam. V takovém případě bude výsledná tabulka obsahovat méně záznamů než zdrojová tabulka.

Provedení akce

Vzorec může obsahovat funkce, které provádějí akci, jako je třeba změna záznamů zdroje dat pomocí funkcí Patch a Collect. Vzorec může také volat metody u připojení. Pomocí operátoru ; je také možné u záznamu provést více akcí. Tabulku, která je předmětem funkce ForAll, změnit nelze.

Když píšete vzorec, nezapomeňte, že záznamy je možné zpracovávat v libovolném pořadí a tam, kde je to možné, i paralelně. První záznam tabulky může být zpracován až po posledním záznamu.

Snažte se vyhnout závislostem řazení. Z tohoto důvodu nemůžete ve funkci ForAll použít funkce UpdateContext, Clear a ClearCollect, protože mohou snadno uchovávat proměnné, které mohou být náchylné k tomuto chování. Můžete použít funkci Collect, ale pořadí, ve kterém se záznamy přidávají, není definováno.

Několik funkcí, které mění zdroje dat, včetně funkcí Collect, Remove, a Update, vrací jako svoji návratovou hodnotu změněný zdroj dat. Tyto návratové hodnoty mohou být velké a mohou spotřebovávat výrazné množství prostředků, pokud se vrací pro každý záznam tabulky ForAll. Můžete také zjistit, že tyto návratové hodnoty nejsou těmi, které jste očekávali, protože ForAll může fungovat paralelně a může izolovat vedlejší efekty těchto funkcí od získání jejich výsledku. Naštěstí pokud se návratová hodnota z funkce ForAll doopravdy nepoužije, k čemuž často dochází u funkcí změny dat, nevytvoří se návratová hodnota a není třeba si dělat starosti s prostředky nebo řazením. Pokud ale používáte výsledek funkce ForAll a některou z funkcí, které vrací zdroj dat, promyslete důkladně způsob strukturování daného výsledku a vyzkoušejte si to nejprve na malých sadách dat.

Alternativy

Mnoho funkcí v Power Apps může zpracovat více hodnot současně pomocí tabulky s jedním sloupcem. Funkce Len například může zpracovat tabulku s textovými hodnotami a vrátit tabulku délek stejným způsobem jako funkce ForAll. V mnoha případech se tím můžete vyhnout použití funkce ForAll a dosáhnout tak efektivnějších a čitelnějších výsledků.

Dále je potřeba vzít v úvahu, že funkci ForAll není možné delegovat, ale jiné funkce ano, například funkci Filter.

Delegování

Tuto funkci nelze delegovat, pokud se používá se zdrojem dat. Bude načtena pouze první část zdroje dat a pak se tato funkce použije. Výsledek nemusí být zcela reprezentativní. V době vytvoření se může zobrazit upozornění, které na toto omezení upozorňuje a doporučuje přepnutí na delegovatelné alternativy tam, kde to je možné. Další informace získáte v přehledu delegování.

Syntaxe

ForAll( Tabulka; vzorec )

  • Tabulka – povinné. Tabulka, u které se má akce provést.
  • Vzorec – povinné. Vzorec pro vyhodnocení všech záznamů tabulky.

Příklady

Výpočty

Následující příklady používají zdroj datSquares:

Příklad čtverců.

Pokud chcete vytvořit tento zdroj dat jako kolekci, nastavte vlastnost OnSelect ovládacího prvku Button na tento vzorec, otevřete režim náhledu a pak vyberte tlačítko:

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

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

Sqrt( Squares )
U všech záznamů ve vstupní tabulce vypočítá druhou odmocninu sloupce Value. Funkci Sqrt můžete také použít u tabulky s jedním sloupcem a tím provést tuto akci, aniž byste použili funkci ForAll. Příklad Sqrt.
ForAll( Squares, Power( Value, 3 ) ) U všech záznamů ve vstupní tabulce umocní sloupec Value na třetí. Funkce Power nepodporuje tabulky s jedním sloupcem. Z tohoto důvodu je v tomto případě třeba použít funkci ForAll. Příklad Power.

Použití připojení

Následující příklady používají zdroj datExpressions:

Příklad výrazů.

Pokud chcete vytvořit tento zdroj dat jako kolekci, nastavte vlastnost OnSelect ovládacího prvku Button na tento vzorec, otevřete režim náhledu a pak vyberte tlačítko:

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

V tomto příkladu se také používá připojení Microsoft Translator. Pokud chcete přidat toto připojení do své aplikace, najdete potřebné informace v článku věnovaném správě připojení.

Vzorec Popis Výsledek
ForAll( Expressions; MicrosoftTranslator.Translate( Value; "es" ) ) U všech záznamů v tabulce Expressions přeloží obsah sloupce Value do španělštiny (zkráceně „es“). Příklad s hodnotou „es“.
ForAll( Expressions; MicrosoftTranslator.Translate( Value; "fr" ) ) U všech záznamů v tabulce Expressions přeloží obsah sloupce Value do francouzštiny (zkráceně „fr“). Příklad s hodnotou „fr“.

Kopírování tabulky

Někdy potřebujete filtrovat, strukturovat a řadit data nebo s nimi jinak pracovat. Power Apps poskytuje mnoho funkcí pro to, jako postupovat, jako je Filter, AddColumns a Sort. Power Apps nakládá s každou tabulkou jako s hodnotou a umožňuje ji snadno používat ve vzorcích a dále využívat.

A někdy chcete vytvořit kopii tohoto výsledku pro pozdější použití, nebo chcete přesunout informace z jednoho zdroj dat do druhého. Pro kopírování dat poskytuje Power Apps funkci Collect.

Než vytvoříte kopii, důkladně zvažte, zda ji potřebujete. V mnoha situacích postačí filtrování a strukturování základního zdroje dat na vyžádání pomocí vzorce. Mezi nevýhody vytváření kopií patří:

  • Dvě kopie stejných informací způsobí, že jedna z nich nebude synchronizovaná.
  • Vytvoření kopie může spotřebovat spoustu počítačové paměti, šířky pásma sítě a času.
  • U většiny zdrojů dat není možné kopírování delegovat, což omezuje množství dat, které lze přesunout.

Následující příklady používají zdroj datProducts:

Příklad zdroje dat produktů.

Pokud chcete vytvořit tento zdroj dat jako kolekci, nastavte vlastnost OnSelect ovládacího prvku Button na tento vzorec, otevřete režim náhledu a pak vyberte tlačítko:

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 cílem je pracovat s odvozenou tabulkou obsahující jenom položky, u kterých se požaduje více, než je dostupné, a pro které potřebujeme zadat objednávku:

Příklad odvozené tabulky.

Tento úkol můžeme provést několika různými způsoby, které přinesou stejný výsledek s různými výhodami a nevýhodami.

Strukturování tabulky na vyžádání

Nevytvářejte kopii. Následující vzorec můžeme použít všude, kde potřebujeme:

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

Funkce Filter a AddColumns vytvoří obor záznamů, aby pomocí polí Quantity Requested a Quantity Available jednotlivých záznamů mohly provést operace porovnání a odečítání.

V tomto příkladu je možné funkci Filter delegovat. To je důležité, protože tak můžete vyhledat všechny produkty, které splňují daná kritéria, i když se jedná jenom o pár záznamů z tabulky obsahující milióny položek. V tuto chvíli není možné funkce ShowColumns a AddColumns delegovat, takže skutečný počet produktů, které je třeba seřadit, bude omezen. Pokud víte, že velikost tohoto výsledku bude vždycky relativně malá, je tento přístup v pořádku.

A vzhledem k tomu, že jsme nevytvořili kopii, neexistuje žádná kopie informací, kterou byste museli spravovat nebo která by mohla zastarat.

Funkce ForAll na vyžádání

Další možností je použít funkci ForAll k nahrazení funkcí strukturování tabulky:

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

Čtení a vytvoření tohoto vzorce může být pro některé uživatele jednodušší.

Žádnou část funkce ForAll není možné delegovat. Vyhodnotí se jenom první část tabulky Products, což může představovat problém v případě, že je tabulka velká. Protože funkci Filter v předchozím příkladu je možné delegovat, mohla by fungovat lépe u velkých sad dat.

Shromáždění výsledku

V některých situacích budete potřebovat kopii dat. Možná budete potřebovat přesunout informace z jednoho zdroje dat do jiného. V tomto příkladu se objednávky zadávají prostřednictvím tabulky NewOrder v systému dodavatele. U vysokorychlostních uživatelských interakcí můžete chtít uložit místní kopii tabulky do mezipaměti, aby nedocházelo k latenci serveru.

Použijeme strukturování tabulky jako v předchozích dvou příkladech, ale výsledek zaznamenáme v kolekci:

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

Funkce ClearCollect a Collect není možné delegovat. V důsledku toho je množství dat, které lze tímto způsobem přesunout, omezeno.

Shromažďování v rámci funkce ForAll

Nakonec provedeme akci Collect přímo v rámci funkce ForAll:

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

Ani v tomto případě nelze funkci ForAll delegovat. Pokud je naše tabulka Products velká, funkce ForAll se podívá jenom na první sadu záznamů, a je tedy možné, že nám uniknou některé produkty, které je třeba seřadit. Ale u tabulek, u kterých víme, že zůstanou malé, je tento přístup v pořádku.

Všimněte si, že zaznamenáváme výsledek funkce ForAll. Volání funkce Collect přímo z této funkce vrátí zdroj dat NewOrder pro všechny záznamy, což by mohlo vést k nárůstu objemu dat, pokud bychom je zaznamenávali.

Mapování tabulky v komponentě

Viz Mapování tabulek.