Funkcia ForAll v službe PowerAppsForAll function in PowerApps

Vypočíta hodnoty a vykoná akcie v prípade všetkých záznamov v tabuľke.Calculates values and performs actions for all records of a table.

PopisDescription

Funkcia ForAll vyhodnocuje vzorec pre všetky záznamy v tabuľke.The ForAll function evaluates a formula for all records of a table. Vzorec môže vypočítať hodnotu alebo vykonať akcie, ako sú napríklad úpravy údajov alebo práca s pripojením.The formula can calculate a value and/or perform actions, such as modifying data or working with a connection.

Polia práve spracúvaného záznamu sú k dispozícii vo vzorci.Fields of the record currently being processed are available within the formula. Jednoducho na ne odkážte podľa názvu ako pri akejkoľvek inej hodnote.You simply reference them by name as you would any other value. Môžete tiež odkazovať na vlastnosti ovládacích prvkov a iné hodnoty z vašej aplikácie.You can also reference control properties and other values from throughout your app. Ďalšie podrobnosti nájdete v nasledujúcich príkladoch a pri práci s rozsahom záznamu.For more details, see the examples below and working with record scope.

Vrátená hodnotaReturn value

Výsledok vyhodnotenia jednotlivých vzorcov sa vráti v tabuľke v rovnakom poradí ako vo vstupnej tabuľke.The result of each formula evaluation is returned in a table, in the same order as the input table.

Ak je výsledkom vzorca jedna hodnota, výslednú tabuľku bude tvoriť jeden stĺpec.If the result of the formula is a single value, the resulting table will be a single column table. 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.If the result of the formula is a record, the resulting table will contain records with the same columns as the result record.

Ak je výsledkom vzorca prázdna hodnota, nebude vo výslednej tabuľke existovať pre danú vstupnú tabuľku žiadny záznam.If the result of the formula is a blank value, then there will be no record in the result table for that input record. V takom prípade bude výsledná tabuľka obsahovať menej záznamov ako zdrojová tabuľka.In this case, there will be fewer records in the result table than the source table.

Vykonanie akcieTaking action

Vzorec môže obsahovať funkcie, ktoré vykonávajú akciu, ako je napríklad zmena záznamov zdroja údajov pomocou funkcií Patch a Collect.The formula can include functions that take action, such as modifying the records of a data source with the Patch and Collect functions. Vzorec môže tiež volať metódy v prípade pripojení.The formula can also call methods on connections. Pomocou operátora ; je tiež možné v prípade záznamov vykonať viac akcií.Multiple actions can be performed per record by using the ; operator. Tabuľku, ktorá je predmetom funkcie ForAll, zmeniť nie je možné.You can't modify the table that is the subject of the ForAll function.

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.When writing your formula, keep in mind that records can be processed in any order and, when possible, in parallel. Prvý záznam tabuľky môže byť spracovaný až po poslednom zázname.The first record of the table may be processed after the last record. Snažte sa vyhnúť závislostiam radenia.Take care to avoid ordering dependencies. 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.For this reason, you can't use the UpdateContext, Clear, and ClearCollect functions within a ForAll function because they could easily be used to hold variables that would be susceptible to this effect. Môžete použiť funkciu Collect, ale poradie, v ktorom sa záznamy pridávajú, nie je definované.You can use Collect, but the order in which records are added is undefined.

Niekoľko funkcií, ktoré menia zdroje údajov, vrátane funkcií Collect, Remove a Update, vracajú ako svoju vrátenú hodnotu zmenený zdroj údajov.Several functions that modify data sources, including Collect, Remove, and Update, return the changed data source as their return value. 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 tabuľky ForAll.These return values can be large and consume significant resources if returned for every record of the ForAll table. 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.You may also find that these return values are not what you expect, because ForAll can operate in parallel and may separate the side effects of these functions from obtaining their result. Našťastie 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.Fortunately, if the return value from ForAll is not actually used, which is often the case with data modification functions, then the return value will not be created and there are no resource or ordering concerns. 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.But if you are using the result of a ForAll and one of the functions that returns a data source, think carefully about how you structure the result and try it out first on small data sets.

AlternatívyAlternatives

Mnoho funkcií v PowerApps môže spracovať viac hodnôt súčasne pomocou tabuľky s jedným stĺpcom.Many functions in PowerApps can process more than one value at a time through the use of a single-column table. 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.For example, the Len function can process a table of text values, returning a table of lengths, in the same manner that ForAll could. V mnohých prípadoch sa tým môžete vynúť použitiu funkcie ForAll a dosiahnuť tak efektívnejších a čitateľnejších výsledkov.This can eliminate the need to use ForAll in many cases, can be more efficient, and is easier to read.

Ďalej je potrebné vziať do úvahy, že funkciu ForAll nie je možné delegovať, ale iné funkcie áno, napríklad funkciu Filter.Another consideration is that ForAll is not delegable while other functions may be, such as Filter.

DelegovanieDelegation

Ak sa táto funkcia používa so zdrojom údajov, nedá sa delegovať.When used with a data source, this function can't be delegated. Načíta sa iba prvá časť zdroja údajov a potom sa použije funkcia.Only the first portion of the data source will be retrieved and then the function applied. Výsledok nemusí byť úplný.The result may not represent the complete story. Počas vytvárania obsahu sa zobrazí modrá bodka, ktorá vás na toto obmedzenie upozorní a navrhne vám, aby ste, ak je to možné, prepli na delegovateľné alternatívy.A blue dot will appear at authoring time to remind you of this limitation and to suggest switching to delegable alternatives where possible. Ďalšie informácie nájdete v článku Prehľad delegovania.For more information, see the delegation overview.

SyntaxSyntax

ForAll( Tabuľka, vzorec )ForAll( Table, Formula )

  • Tabuľka – povinné.Table - Required. Tabuľka, v prípade ktorej sa má akcia vykonať.Table to be acted upon.
  • Vzorec – povinné.Formula - Required. Vzorec na vyhodnotenie všetkých záznamov tabuľky.The formula to evaluate for all records of the Table.

PríkladyExamples

VýpočtyCalculations

Nasledujúce príklady používajú zdroj údajov Squares:The following examples use the Squares data source:

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:To create this data source as a collection, set the OnSelect property of a Button control to this formula, open Preview mode, and then click or tap the button:

  • ClearCollect( Squares, [ "1", "4", "9" ] )ClearCollect( Squares, [ "1", "4", "9" ] )
VzorecFormula PopisDescription VýsledokResult
ForAll( Squares, Sqrt( Value ) )ForAll( Squares, Sqrt( Value ) )

Sqrt( Squares )Sqrt( Squares )
Pre všetky záznamy vo vstupnej tabuľke vypočíta druhú odmocninu stĺpca Value.For all the records of the input table, calculates the square root of the Value column. Funkciu Sqrt môžete tiež použiť v prípade tabuľky s jedným stĺpcom a tým vykonať túto akciu bez použitia funkcie ForAll.The Sqrt function can also be used with a single-column table, making it possible perform this example without using ForAll.
ForAll( Squares, Power( Value, 3 ) )ForAll( Squares, Power( Value, 3 ) ) V prípade všetkých záznamov vo vstupnej tabuľke umocní stĺpec Value na tretiu.For all the records of the input table, raises the Value column to the third power. Funkcia Power nepodporuje tabuľky s jedným stĺpcom.The Power function does not support single-column tables. Z tohto dôvodu je v tomto prípade potrebné použiť funkciu ForAll.Therefore, ForAll must be used in this case.

Použitie pripojeniaUsing a connection

Nasledujúce príklady používajú zdroj údajov Expressions:The following examples use the Expressions data source:

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:To create this data source as a collection, set the OnSelect property of a Button control to this formula, open Preview mode, and then click or tap the button:

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

V tomto príklade sa tiež používa pripojenie Microsoft Translator.This example also uses a Microsoft Translator connection. Ak chcete pridať toto pripojenie do svojej aplikácie, nájdite potrebné informácie v téme venovanej správe pripojení.To add this connection to your app, see the topic about how to manage connections.

VzorecFormula PopisDescription VýsledokResult
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "es" ) )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“).For all the records in the Expressions table, translate the contents of the Value column into Spanish (abbreviated "es").
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "fr" ) )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“).For all the records in the Expressions table, translate the contents of the Value column into French (abbreviated "fr").

Kopírovanie tabuľkyCopying a table

Niekedy potrebujete filtrovať, štruktúrovať a radiť údaje alebo s nimi inak pracovať.Sometimes you need to filter, shape, sort, and manipulate data. PowerApps poskytuje na tieto účely rad funkcií, ako sú napríklad Filter, AddColumns a Sort.PowerApps provides a number of functions for doing this, such as Filter, AddColumns, and Sort. PowerApps nakladá s každou tabuľkou ako s hodnotou a umožňuje ju jednoducho používať vo vzorcoch a ďalej využívať.PowerApps treats each table as a value, allowing it to flow through formulas and be consumed easily.

Môže sa tiež stať, že budete chcieť vytvoriť kópiu tohto výsledku, aby ste ho mohli neskôr použiť.And sometime you will want to make a copy of this result for later use. Alebo budete chcieť presunúť informácie z jedného zdroja údajov do iného.Or you will want to move information from one data source to another. Na kopírovanie údajov poskytuje PowerApps funkciu Collect.PowerApps provides the Collect function to copy data.

Než vytvoríte kópiu, dôkladne zvážte, či ju skutočne potrebujete.But before you make that copy, think carefully if it is really needed. V mnohých situáciách postačí filtrovanie a štruktúrovanie základného zdroja údajov na požiadanie pomocou vzorca.Many situations can be addressed by filtering and shaping the underlying data source on demand with a formula. Nevýhody vytvárania kópií zahrnujú:Some of the downsides to making a copy include:

  • Dve kópie rovnakých informácií spôsobia, že jedna z nich nebude synchronizovaná.Two copies of the same information means that one of them can fall out of sync.
  • Vytvorenie kópie môže spotrebovať veľa počítačovej pamäte, šírky pásma siete a času.Making a copy can consume a lot of computer memory, network bandwidth, and/or time.
  • V prípade väčšiny zdrojov údajov nie je možné kopírovanie delegovať, čo obmedzuje množstvo údajov, ktoré je možné presunúť.For most data sources, copying cannot be delegated, limiting how much data can be moved.

Nasledujúce príklady používajú zdroj údajov Products:The following examples use the Products data source:

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:To create this data source as a collection, set the OnSelect property of a Button control to this formula, open Preview mode, and then click or tap the 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 } ) )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:Our goal is to work with a derivative table that includes only the items where more has been requested than is available, and for which we need to place an order:

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.We can perform this task in a couple of different ways, all of which produce the same result, with various pros and cons.

Štruktúrovanie tabuľky na požiadanieTable shaping on demand

Nevytvárajte kópiu.Don't make that copy! Nasledujúci vzorec môžeme použiť všade, kde potrebujeme:We can use the following formula anywhere we need:

  • ShowColumns( AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' ), "Product", "Quantity To Order" )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.A record scope is created by the Filter and AddColumns functions to perform the comparison and subtraction operations, respectively, with the 'Quantity Requested' and 'Quantity Available' fields of each record.

V tomto príklade je možné funkciu Filter delegovať.In this example, the Filter function can be delegated. 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.This is important, as it can find all the products that meet the criteria, even if that is only a few records out of a table of millions. Funkcie ShowColumns a AddColumns sa momentálne nedajú delegovať, takže skutočný počet produktov, ktoré je potrebné zoradiť, bude obmedzený.At this time, ShowColumns and AddColumns cannot be delegated, so the actual number of products that needs to be ordered will be limited. Ak viete, že veľkosť tohto výsledku bude vždy relatívne malá, je tento prístup v poriadku.If you know the size of this result will always be relatively small, this approach is fine.

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ť.And because we didn't make a copy, there is no additional copy of the information to manage or fall out of date.

Funkcia ForAll na požiadanieForAll on demand

Ďalšou možnosťou je použiť funkciu ForAll na nahradenie funkcií štruktúrovania tabuľky:Another approach is to use the ForAll function to replace the table-shaping functions:

  • ForAll( Products, If( 'Quantity Requested' > 'Quantity Available', { Product: Product, 'Quantity To Order': 'Quantity Requested' - 'Quantity Available' } ) )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.This formula may be simpler for some people to read and write.

Žiadnu časť funkcie ForAll nie je možné delegovať.No part of the ForAll is delegable. Vyhodnotí sa iba prvá časť tabuľky Products, čo môže predstavovať problém v prípade, že je tabuľka veľmi veľká.Only the first portion of the Products table will be evaluated, which could be a problem if this table is very large. 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.Because Filter could be delegated in the previous example, it could work better with large data sets.

Zhromaždenie výsledkuCollect the result

V niektorých situáciách budete potrebovať kópiu údajov.In some situations, a copy of data may be required. Môžno budete potrebovať presunúť informácie z jedného zdroja údajov do iného.You may need to move information from one data source to another. V tomto príklade sa objednávky zadávajú prostredníctvom tabuľky NewOrder v systéme dodávateľa.In this example, orders are placed through a NewOrder table on a vendor's system. 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.For high-speed user interactions, you may want to cache a local copy of a table so that there is no server latency.

Použijeme štruktúrovanie tabuľky ako v predchádzajúcich dvoch príkladoch, ale výsledok zaznamenáme v kolekcii:We use the same table shaping as the previous two examples, but we capture the result into a collection:

  • ClearCollect( NewOrder, ShowColumns( AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' ), "Product", "Quantity To Order" ) )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( 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ť.ClearCollect and Collect can't be delegated. V dôsledku toho je množstvo údajov, ktoré je možné týmto spôsobom presunúť, obmedzené.As a result the amount of data that can be moved in this manner is limited.

Zhromažďovanie v rámci funkcie ForAllCollect within ForAll

Nakoniec vykonáme akciu Collect priamo v rámci funkcie ForAll:Finally, we can perform the Collect directly within the ForAll:

  • Clear( ProductsToOrder ); ForAll( Products, If( 'Quantity Requested' > 'Quantity Available', Collect( NewOrder, { Product: Product, 'Quantity To Order': 'Quantity Requested' - 'Quantity Available' } ) ) )Clear( ProductsToOrder ); 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ť.Again, the ForAll function can't be delegated at this time. 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ť.If our Products table is large, ForAll will look at the first set of records only and we may miss some products that need to be ordered. Ale v prípade tabuliek, o ktorých vieme, že zostanú malé, je tento prístup v poriadku.But for tables that we know will remain small, this approach is fine.

Všimnite si, že zaznamenávame výsledok funkcie ForAll.Note that we are not capturing the result of the 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.The Collect function calls made from within it will return the NewOrder data source for all the records, which could add up to a lot of data if we were capturing it.