Compartir por


Función ForAll

Aplícase a: Aplicacións de lenzo Fluxos de escritorio Aplicacións baseadas en modelos Power Pages Power Platform CLI

Calcula valores e realiza accións para todos os rexistros dunha táboa.

Descripción

A función Para todos 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.

Use a función Sequence coa función ForAll para repetir en función dunha conta.

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 será unha táboa de columna única. 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 rexistro na táboa de resultados para ese rexistro de entrada. Neste caso, haberá 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 pode modificar a táboa suxeito da función ForAll.

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 pode usar as funcións UpdateContext, Clear e ClearCollect cunha función ForAll porque poderían usarse facilmente para manter variables 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 importantes se se devolven para cada rexistro da táboa ForAll. Tamén pode que estes valores de retorno non sexan o que espera, porque ForAll pode operar en paralelo e pode separar os efectos secundarios destas funcións de obter o seu resultado. Se o valor devolto de ForAll non se usa, que adoita suceder con funcións de modificación de datos, entón o valor devolto non se creará e non hai problemas de recursos ou pedidos. Pero se está a usar o resultado de ForAll e unha das funcións que devolve unha orixe de datos, pense con atención sobre como estrutura o resultado e próbeo primeiro en conxuntos de datos pequenos.

Alternativas

Moitas funcións de Power Apps poden procesar máis dun valor á vez mediante o uso dunha táboa dunha única 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. 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 ForAll non é delegable mentres outras funcións poden selo, 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( Table, Formula )

  • Table - Obrigatorio. Táboa na que actuar.
  • Formula - Obrigatorio. Fórmula para avaliar todos os rexistros da táboa.

Exemplos

Cálculos

Os exemplos seguintes usan a orixe de datosCadrados:

Exemplo de cadrados.

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( Squares, Sqrt( Value ) )

Sqrt( Squares )
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 permite realizar este exemplo sen usar ForAll. Exemplo de Sqrt.
ForAll( Squares, Power( Value, 3 ) ) Para todos os rexistros da táboa de entrada, eleva a columna Valor á terceira potencia. A función Potencia non admite táboas dunha única columna. Polo tanto, ForAll debe usarse neste caso. Exemplo de Power.

Uso dunha conexión

Os exemplos seguintes usan a orixe de datosExpresións:

Exemplo de expressions.

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( Expressions, 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"). Exemplo con valor
ForAll( Expressions, 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"). Exemplo con valor

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, permitíndolle fluír por 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, pense con atención se é preciso. 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 orixes de datos, non se pode delegar a copia, limitando a cantidade de datos que se poden mover.

Os exemplos seguintes usan a orixe de datosProdutos:

Exemplo da orixe de datos dos produtos.

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:

Exemplo de táboa derivada.

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 hai que solicitar será limitado. Se sabe o tamaño deste resultado sempre vai ser relativamente pequeno, este enfoque estará ben.

Debido a que non fixemos unha copia, non hai ningunha copia adicional da información para xestionar ou presentar fóra de data.

ForAll a petición

Outro enfoque é usar a función ForAll para substituír as funcións de formación 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 de ForAll é delegable. Só a primeira parte da táboa Produtos se avaliará, 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 usuarios de alta velocidade, pode almacenar na caché unha copia local dunha táboa para que non haxa latencia no 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 Recoller non se poden delegar. Como resultado, a cantidade de datos que se poden mover deste xeito é limitada.

Recóllense de dentro de ForAll

Finalmente, podemos realizar a Recollida directamente dentro de ForAll:

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

De novo, a función ForAll non se pode delegar neste momento. Se a nosa táboa de Produtos é grande, ForAll só mirará ao primeiro conxunto de rexistros e é posible que perdamos algúns produtos que sexa necesario pedir. Pero para as táboas que sabemos que serán pequenas, este enfoque está ben.

Teña en conta que non estamos a capturar o resultado de ForAll. As chamadas da función Collect feitas desde dentro devolverán a orixe de datos NewOrder para todos os rexistros, o que podería engadir numerosos datos se a capturásemos.

Táboa de mapas nun compoñente

Consulte Asignar táboas.