Nota
L'accés a aquesta pàgina requereix autorització. Pots provar d'iniciar sessió o canviar de directori.
L'accés a aquesta pàgina requereix autorització. Pots provar de canviar directoris.
S'aplica a: Aplicacions
de llenç Copilot Studio
Fluxos
d'escriptori Aplicacions
basades en models CLI
del Power Platform Funcions
del Dataverse Power Pages
Calcula els valors i realitza accions per a tots els registres d'una taula.
Descripció
La ForAll funció avalua una fórmula per a tots els registres d'una taula. La fórmula pot calcular un valor i/o dur a terme accions, com ara modificar dades o treballar amb una connexió. Utilitzeu la funció With per avaluar la fórmula per a un únic registre.
Utilitzeu la funció Seqüència amb la funció per iterar en funció d'un ForAll recompte.
Els camps del registre que s’està processant actualment estan disponibles dins de la fórmula. Utilitzeu l’operador ThisRecord o simplement els camps de referència per nom com si fos qualsevol altre valor. L’operador As també es pot utilitzar per nomenar el registre que s’està processant i que pot ajudar-vos a fer que la fórmula sigui més fàcil d’entendre i fer accessible els registres incrustats. Per obtenir més informació, vegeu els exemples següents i la secció Treballar amb l’àmbit de registre.
Valor de retorn
El resultat de cada avaluació de la fórmula es torna en una taula, en el mateix ordre que la taula d'entrada.
Si el resultat de la fórmula és un sol valor, la taula resultant és una taula d'una sola columna. Si el resultat de la fórmula és un registre, la taula resultant conté registres amb les mateixes columnes que el registre del resultat.
Si el resultat de la fórmula és un valor en blanc , no hi ha cap registre a la taula de resultats per a aquest registre d'entrada. En aquest cas, hi ha menys registres a la taula de resultats que a la taula d'origen.
Prendre una acció
La fórmula pot incloure funcions que fan una acció, per exemple, la modificació dels registres d'una font de dades amb les funcions Patch i Collect. La fórmula també pot trucar els mètodes de les connexions. Es poden dur a terme diverses accions per registre mitjançant l'operador ;. No podeu modificar la taula que és el tema de la ForAll funció.
Quan redacteu la fórmula, heu de tenir en compte que els registres es poden processar en qualsevol ordre i, sempre que sigui possible, en paral·lel. El primer registre de la taula es pot processar després de l'últim registre.
Aneu amb compte per evitar dependències d'ordre. Per aquest motiu, no podeu utilitzar les funcions UpdateContext, Clear i ClearCollect dins d'una ForAll funció perquè es podrien utilitzar fàcilment per contenir variables que serien susceptibles a aquest efecte. Podeu utilitzar Collect, però l'ordre en què s'afegeixen els registres no està definit.
Diverses funcions que modifiquen fonts de dades, com ara Collect, Remove i Update, us retornen la font de dades canviada com a valor retornat. Aquests valors retornats poden ser grans i consumir recursos significatius si es retornen per a cada registre de la ForAll taula. També podeu trobar que aquests valors de retorn no són els que espereu perquè ForAll poden funcionar en paral·lel i poden separar els efectes secundaris d'aquestes funcions de l'obtenció del seu resultat. Si no s'utilitza el valor retornat de, que sovint passa amb les funcions de modificació de ForAll dades, el valor retornat no es crearà i no hi haurà problemes de recursos o ordres. Però si utilitzeu el resultat d'una ForAll i una de les funcions que retorna una font de dades, penseu bé com estructureu el resultat i proveu-lo primer en petits conjunts de dades.
Alternatives
Moltes funcions del Power Apps poden processar més d'un valor alhora mitjançant una taula d'una sola columna. Per exemple, la funció Len pot processar una taula de valors de text, retornant una taula de longituds, de la mateixa manera que ForAll podria. Això pot eliminar la necessitat d'utilitzar-lo ForAll en molts casos, pot ser més eficient i és més fàcil de llegir.
Una altra consideració és que no és delegable, mentre que ForAll altres funcions poden ser-ho, com ara Filter.
Delegació
Quan s'utilitza amb una font de dades, aquesta funció no es pot delegar. Només es recuperarà la primera part de la font de dades i, a continuació, s'aplicarà la funció. És possible que el resultat no representi la història completa. És possible que aparegui un advertiment en el moment de la creació per recordar-vos aquesta limitació i suggerir-vos que canvieu a alternatives delegables sempre que sigui possible. Per obtenir més informació, vegeu la informació general sobre la delegació.
Sintaxi
ForAll(Taula, Fórmula)
- Taula : obligatòria. Taula sobre la qual actuar.
- Fórmula : obligatòria. La fórmula que s'avaluarà per a tots els registres de la Taula.
Exemples
Càlculs
Els exemples següents utilitzen la font de dadesQuadrats:
Per crear aquesta font de dades com una col·lecció, definiu la propietat OnSelect d'un control Botó en aquesta fórmula, obriu el mode de visualització prèvia i, a continuació, seleccioneu el botó:
ClearCollect( Squares, [ "1", "4", "9" ] )
| Fórmula | Descripció | Resultat |
|---|---|---|
|
ForAll( Quadrats, sqrt( Valor ) ) Sqrt( Quadrats ) |
Per a tots els registres de la taula d'entrada, el calcula l'arrel quadrada de la columna Valor. La funció Sqrt també es pot utilitzar amb una taula d'una sola columna, cosa que permet realitzar aquest exemple sense utilitzar ForAll. |
|
| ForAll( Quadrats, Potència ( Valor, 3 ) ) | Per a tots els registres de la taula d'entrada, eleva la columna Valor al cub. La funció Power no admet taules d'una sola columna. Per tant, ForAll s'ha d'utilitzar en aquest cas. |
|
Utilitzar una connexió
Els exemples següents utilitzen la font de dadesExpressions:
Per crear aquesta font de dades com una col·lecció, definiu la propietat OnSelect d'un control Botó en aquesta fórmula, obriu el mode de visualització prèvia i, a continuació, seleccioneu el botó:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
Aquest exemple també utilitza una connexió del Microsoft Translator. Per afegir aquesta connexió a l'aplicació, vegeu l'article quant a com administrar connexions.
| Fórmula | Descripció | Resultat |
|---|---|---|
| ForAll(Expressions, MicrosoftTranslator.Translate(Value, "es")) | Per a tots els registres de la taula Expressions, traduïu el contingut de la columna Valor al castellà (abreujat "es"). |
|
| ForAll(Expressions, MicrosoftTranslator.Translate(Value, "fr")) | Per a tots els registres de la taula Expressions, traduïu el contingut de la columna Valor al francès (abreujat "fr"). |
|
Copiar una taula
De vegades necessitareu filtrar, configurar, ordenar i manipular dades. El Power Apps proporciona moltes funcions per fer-ho, com ara Filter, AddColumns i Sort. El Power Apps tracta cada taula com un valor, cosa que li permet fluir a través de fórmules i consumir-la fàcilment.
De vegades, pot ser que vulgueu fer una còpia d'aquest resultat per a utilitzar-lo més endavant o que vulgueu desplaçar la informació d'una font de dades a una altra. El Power Apps proporciona la funció Collect per copiar dades.
Però abans de fer aquesta còpia, penseu bé si és necessari. Es poden abordar moltes situacions filtrant i configurant la font de dades subjacent a la demanda amb una fórmula. Alguns dels desavantatges de fer una còpia inclouen:
- Dues còpies de la mateixa informació fan que potser una no se sincronitzi.
- Fer una còpia pot consumir gran part de la memòria de l'ordinador, l'amplada de banda de la xarxa o temps.
- Per a la majoria de fonts de dades, la còpia no es pot delegar, la qual cosa limita la quantitat de dades que es poden moure.
Els exemples següents utilitzen la font de dadesProductes:
Per crear aquesta font de dades com una col·lecció, definiu la propietat OnSelect d'un control Botó en aquesta fórmula, obriu el mode de visualització prèvia i, a continuació, seleccioneu el botó:
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 }
)
)
El nostre objectiu és treballar amb una taula derivada que inclogui només els elements on s'hagi sol·licitat més del que hi ha disponible i per als quals necessitem fer una comanda:
Podem dur a terme aquesta tasca de dues maneres diferents, que produeixen el mateix resultat, amb diversos pros i contres.
Formació de taules a la demanda
No feu aquesta còpia! Podem utilitzar la següent fórmula en qualsevol part que necessitem:
// 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"
)
Un àmbit de registre es crea mitjançant les funcions Filter i AddColumns per dur a terme les operacions de comparació i de resta, respectivament, amb els camps "Quantitat sol·licitada" i "Quantitat disponible" de cada registre.
En aquest exemple, pot delegar-se la funció Filter. Això és important, ja que pot trobar tots els productes que compleixen els criteris, fins i tot si això és només alguns registres d'una taula de milions de registres. En aquest moment, ShowColumns i AddColumns no es poden delegar, de manera que el nombre real de productes que s'han de demanar és limitat. Si sabeu que la mida d'aquest resultat sempre és relativament petita, aquest enfocament està bé.
I com que no hem fet una còpia, no hi ha cap còpia addicional de la informació per gestionar o quedar desactualitzada.
ForAll sota demanda
Un altre enfocament és utilitzar la ForAll funció per reemplaçar les funcions de modelatge de taula:
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
Aquesta fórmula pot ser més senzilla perquè algunes persones llegeixin i escriguin.
Cap part de la ForAll és delegable. Només s'avalua la primera part de la taula Productes , cosa que podria ser un problema si aquesta taula és gran. Com que Filter es podia delegar en l'exemple anterior, podia funcionar millor amb conjunts de dades grans.
Recollir el resultat
En algunes situacions, pot ser que es necessiti una còpia de dades. Pot ser que vulgueu desplaçar la informació d'una font de dades a una altra. En aquest exemple, les comandes es realitzen a través d'una taula NewOrder al sistema del proveïdor. Per a interaccions d'usuari d'alta velocitat, és possible que vulgueu emmagatzemar a la memòria cau una còpia local d'una taula perquè no hi hagi latència del servidor.
Utilitzem la mateixa taula en la qual es configuren els dos exemples anteriors, però captem el resultat en una col·lecció:
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 i Collect no es poden delegar. Com a resultat, la quantitat de dades que es poden moure d'aquesta manera és limitada.
Recollida dins ForAll
Finalment, podem realitzar el Collect directament dins del ForAll:
Clear( NewOrder );
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
Collect( NewOrder,
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
De nou, la ForAll funció no es pot delegar en aquest moment. Si la nostra taula de productes és gran, ForAll només mira el primer conjunt de registres i és possible que ens perdem alguns productes que s'han de demanar. Però per a les taules que sabem que segueixen sent petites, aquest enfocament està bé.
Tingueu en compte que no estem capturant el resultat del ForAll. Les crides a la funció Collect fetes des de dins retornen la font de dades NewOrder per a tots els registres, que podrien sumar nombroses dades si les capturéssim.
Assignar una taula en un component
Vegeu Assignar taules.