Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Aplícase a: Aplicacións
de lenzo Copilot Studio
Fluxos
de escritorio Aplicacións
baseadas en modelos Power Platform CLI
Dataverse funcións
Power Pages
Calcula valores e realiza accións para todos os rexistros dunha táboa.
Descripción
A ForAll función avalía unha fórmula para todos os rexistros dunha táboa. A fórmula pode calcular un valor e/ou realizar accións, como modificar datos ou traballar cunha conexión. Use a función With para avaliar a fórmula dun único rexistro.
Usa a función Secuencia coa ForAll función para iterar en función dun reconto.
Os campos do rexistro que se están a procesar actualmente están dispoñibles na fórmula. Use o operador ThisRecord ou simplemente faga referencia aos campos por nome como faría con calquera outro valor. O operador As tamén se pode usar para nomear o rexistro que se está a procesar, o que pode axudar a que a fórmula sexa máis fácil de comprender e facer que os rexistros anidados sexan accesibles. Para obter máis información, consulte os seguintes exemplos e traballar co ámbito do rexistro.
Valor devolto
O resultado de cada avaliación de fórmulas devólvese nunha táboa, na mesma orde que a táboa de entrada.
Se o resultado da fórmula é un único valor, a táboa resultante é unha táboa dunha soa columna. Se o resultado da fórmula é un rexistro, a táboa resultante contén rexistros coas mesmas columnas que o rexistro de resultados.
Se o resultado da fórmula é un valor en branco , entón non hai ningún rexistro na táboa de resultados para ese rexistro de entrada. Neste caso, hai menos rexistros na táboa de resultados que na táboa de orixe.
Tomar medidas
A fórmula pode incluír funcións que tomen medidas, como modificar os rexistros dunha orixe de datos coas funcións Patch e Collect. A fórmula tamén pode chamar métodos sobre conexións. Pódense realizar varias accións por rexistro mediante o operador ;. Non se pode modificar a táboa que é o obxecto da ForAll función.
Ao escribir a súa fórmula, teña en conta que os rexistros pódense procesar en calquera orde e, cando sexa posible, en paralelo. O primeiro rexistro da táboa pode ser procesado despois do último rexistro.
Teña coidado de evitar dependencias de ordenación. Por este motivo, non podes usar as funcións UpdateContext, Clear e ClearCollect dentro dunha ForAll función porque poderían usarse facilmente para conter variables que serían susceptibles a este efecto. Pode usar Collect, pero a orde en que se engaden rexistros non está definida.
Varias funcións que modifican as orixes de datos, incluído Recoller, Quitar e Actualizar, devolven a orixe de datos cambiada como valor de retorno. Estes valores de retorno poden ser grandes e consumir recursos significativos se se devolven para cada rexistro da ForAll táboa. Tamén podes descubrir que estes valores de retorno non son o que esperas porque ForAll poden operar en paralelo e poden separar os efectos secundarios destas funcións da obtención do seu resultado. Se non se usa o valor de retorno, o que adoita ocorrer coas funcións de modificación de ForAll datos, entón o valor de retorno non se creará e non haberá problemas de recursos ou orde. Pero se estás a usar o resultado dunha ForAll e unha das funcións que devolve unha fonte de datos, pensa coidadosamente en como estruturas o resultado e proba primeiro en pequenos conxuntos de datos.
Alternativas
Moitas funcións en Power Apps poden procesar máis dun valor á vez usando unha táboa dunha soa columna. Por exemplo, a función Len pode procesar unha táboa de valores de texto, devolvendo unha táboa de lonxitudes, do mesmo xeito que ForAll podería facelo. Isto pode eliminar a necesidade de usar ForAll en moitos casos, pode ser máis eficiente e é máis fácil de ler.
Outra consideración é que non é delegable, mentres que ForAll outras funcións poden ser, como Filtro.
Delegación
Esta función, cando se usa cunha orixe de datos, non se pode delegar. Só se recuperará a primeira parte da orixe de datos e logo a función aplicada. Pode que o resultado non represente o historial completo. É posible que se mostre un aviso na fase de creación para lembrarlle desta limitación e suxerirlle que mude a alternativas delegables sempre que sexa posible. Para obter máis información, consulte a visión xeral da delegación.
Sintaxe
ForAll(Táboa, fórmula)
- Táboa - Obrigatorio. Táboa na que actuar.
- Fórmula - Obrigatorio. Fórmula para avaliar todos os rexistros da táboa.
Exemplos
Cálculos
Os exemplos seguintes usan a orixe de datosCadrados:
Para crear esta orixe de datos como colección, configure a propiedade OnSelect dun control de Botón nesta fórmula, abra o modo de Vista previa e logo seleccione o botón:
ClearCollect( Squares, [ "1", "4", "9" ] )
| Fórmula | Descripción | Resultado |
|---|---|---|
|
ForAll( cadrados, sqrt( valor ) ) Sqrt (cadrados) |
Para todos os rexistros da táboa de entrada, calcúlase a raíz cadrada da columna Valor. A función Sqrt tamén se pode usar cunha táboa dunha soa columna, o que fai posible realizar este exemplo sen usar ForAll. |
|
| ForAll( Cadrados, Potencia ( Valor, 3 ) ) | Para todos os rexistros da táboa de entrada, eleva a columna Valor á terceira potencia. A función Power non admite táboas dunha soa columna. Polo tanto, ForAll neste caso debe ser utilizado. |
|
Uso dunha conexión
Os exemplos seguintes usan a orixe de datosExpresións:
Para crear esta orixe de datos como colección, configure a propiedade OnSelect dun control de Botón nesta fórmula, abra o modo de Vista previa e logo seleccione o botón:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
Este exemplo tamén usa a conexión do Microsoft Translator. Para engadir esta conexión á súa aplicación, consulte o artigo sobre como xestionar conexións.
| Fórmula | Descripción | Resultado |
|---|---|---|
| ForAll(Expresións, MicrosoftTranslator.Translate(Value, "es")) | Para todos os rexistros da táboa de expresións, traduza o contido da columna Valor a español (abreviado como "es"). |
|
| ForAll(Expresións, MicrosoftTranslator.Translate(Value, "fr")) | Para todos os rexistros da táboa de expresións, traduza o contido da columna Valor a francés (abreviado como "fr"). |
|
Copia dunha táboa
Ás veces é necesario filtrar, dar forma, ordenar e manipular datos. Power Apps fornece moitas funcións para facelo, como Filter, AddColumns e Sort. Power Apps trata cada táboa como un valor, o que lle permite fluír a través de fórmulas e consumirse facilmente.
E ás veces quere facer unha copia deste resultado para o seu uso posterior, ou quere mover a información dunha orixe de datos a outra. Power Apps fornece a función Recoller para copiar datos.
Pero antes de facer esa copia, pensa ben se é necesario. Pódense abordar moitas situacións filtrando e dando forma ás orixes de datos subxacentes baixo demanda cunha fórmula. Entre algúns dos inconvenientes de facer unha copia inclúense:
- Ter dúas copias da mesma información significa que unha delas pode quedar sen ser sincronizada.
- Facer unha copia pode consumir gran parte da memoria do ordenador, ancho de banda de rede e/ou tempo.
- Para a maioría das fontes de datos, a copia non se pode delegar, limitando a cantidade de datos que se poden mover.
Os exemplos seguintes usan a orixe de datosProdutos:
Para crear esta orixe de datos como colección, configure a propiedade OnSelect dun control de Botón nesta fórmula, abra o modo de Vista previa e logo seleccione o botón:
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 }
)
)
O noso obxectivo é traballar cunha táboa derivada que inclúa só os elementos nos que se solicitou máis do que está dispoñible e para os que necesitamos facer un pedido:
Podemos realizar esta tarefa de dúas maneiras diferentes, todas producindo o mesmo resultado, con varios aspectos a favor e en contra.
Dar forma a táboas baixo demanda
Non faga esa copia. Podemos empregar a seguinte fórmula en calquera lugar que necesitemos:
// 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"
)
Crearase un ámbito de rexistro mediante as funcións Filtro e AddColumns para realizar as operacións de comparación e resta respectivamente, cos campos "Cantidade solicitada" e "Cantidade dispoñible" de cada rexistro.
Neste exemplo, a función Filtro pode delegarse. Isto é importante, xa que pode atopar todos os produtos que cumpran os criterios, aínda que só haxa algúns rexistros fóra dunha táboa de millóns. Neste momento, ShowColumns e AddColumns non se poden delegar, polo que o número real de produtos que deben ser pedidos é limitado. Se sabes que o tamaño deste resultado é sempre relativamente pequeno, este enfoque está ben.
E como non fixemos unha copia, non hai ningunha copia adicional da información para xestionar ou quedar desactualizada.
ForAll Baixo demanda
Outro enfoque é usar a ForAll función para substituír as funcións de modelado de táboas:
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
Esta fórmula pode ser máis sinxela para que algunhas persoas a lean e escriban.
Ningunha parte do deles ForAll é delegable. Só se avalía a primeira parte da táboa de produtos , o que podería ser un problema se esta táboa é grande. Debido a que Filtro se podería delegar no exemplo anterior, podería funcionar mellor con grandes conxuntos de datos.
Recoller o resultado
Nalgunhas situacións, pode ser necesaria unha copia de datos. Tamén pode que precise mover a información dunha orixe de datos a outra. Neste exemplo, os pedidos realízanse a través da táboa NewOrder do sistema dun provedor. Para interaccións de usuario de alta velocidade, pode querer almacenar en caché unha copia local dunha táboa para que non haxa latencia do servidor.
Usamos a mesma forma de táboa que a dos dous exemplos anteriores, pero captamos o resultado nunha colección:
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 e Collect non se poden delegar. Como resultado, a cantidade de datos que se poden mover deste xeito é limitada.
Recollida dentro ForAll
Finalmente, podemos realizar a recollida directamente dentro ForAll:
Clear( NewOrder );
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
Collect( NewOrder,
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
De novo, a ForAll función non se pode delegar neste momento. Se a nosa táboa de produtos é grande, ForAll mira só o primeiro conxunto de rexistros e podemos perder algúns produtos que deben ser pedidos. Pero para as táboas que sabemos que permanecen pequenas, este enfoque está ben.
Teña en conta que non estamos a recoller o resultado do ForAll. As chamadas á función Collect feitas desde dentro dela devolve a fonte de datos NewOrder para todos os rexistros, o que podería sumar numerosos datos se o capturamos.
Táboa de mapas nun compoñente
Consulte Asignar táboas.