Descripción de la delegación en una aplicación de lienzo

Power Apps incluye un eficaz conjunto de funciones para filtrar, ordenar y dar forma a tablas de datos en una aplicación de lienzo: las funciones Filter, Sort y AddColumns son solo algunas de ellas. Con estas funciones puede proporcionar a los usuarios acceso a la información que necesitan. Para quienes conozcan bien las bases de datos, el uso de estas funciones es como escribir una consulta de base de datos.

La clave para compilar aplicaciones eficientes es minimizar la cantidad de datos que debe contener el dispositivo. Quizás necesite solo unos pocos registros de un mar de millones o que un único valor agregado pueda representar miles de registros. O quizás solo se pueda recuperar el primer conjunto de registros y el resto se trae cuando el usuario indica que desea más. De esta forma se puede reducir drásticamente la potencia de procesamiento, la memoria y el ancho de banda de red que necesita la aplicación, lo que conlleva menores tiempos de respuesta para los usuarios, incluso en teléfonos conectados a través de una red móvil.

La delegación es el lugar en el que la expresividad de las fórmulas de Power Apps cubre la necesidad de minimizar la cantidad de datos que se mueven a través de la red. En resumen, Power Apps delega el procesamiento de los datos al origen de los mismos, en lugar de moverlos a la aplicación para que los procese localmente.

Esto se complica, y el motivo por el que existe este artículo, porque no todo lo que se puede expresar en una fórmula de Power Apps puede delegarse a todos los orígenes de datos. El lenguaje de Power Apps imita el lenguaje de fórmulas de Excel, diseñado con acceso completo e instantáneo a un libro completo en la memoria, con una amplia variedad de funciones numéricas y de manipulación de texto. Como resultado, el lenguaje de Power Apps es mucho más rico de lo que la mayoría de los orígenes de datos pueden admitir, incluidos potentes motores de base de datos como SQL Server.

El trabajo con grandes conjuntos de datos requiere que se usen orígenes de datos y fórmulas que se puedan delegar. Es la única forma de mantener un buen rendimiento de la aplicación y garantizar que los usuarios puedan acceder a toda la información que necesitan. Preste atención a las advertencias de delegación que identifican los lugares donde la delegación no es posible. Si trabaja con conjuntos de datos pequeños (menos de 500 registros), puede usar cualquier origen de datos y cualquier fórmula, ya que la aplicación puede procesar datos en local si la fórmula no se puede delegar.

Nota

Anteriormente las advertencias de delegación se marcaban en Power Apps como sugerencias de "punto azul", pero desde entonces las sugerencias de delegación se han reclasificado como advertencias. Si los datos del origen de datos superan los 500 registros y no se puede delegar una función, quizás Power Apps no pueda recuperar todos los datos y la aplicación pueda tener resultados incorrectos. Las advertencias de delegación permiten administrar la aplicación para que tenga resultados correctos.

Orígenes de datos delegables

Solo se admite la delegación para ciertos orígenes de datos tabulares. Si un origen de datos admite la delegación, su documentación del conector describe ese apoyo. Por ejemplo, estas fuentes de datos tabulares son las más populares y admiten la delegación:

Los libros de Excel importados (que usan el origen de datos Agregar datos estáticos a la aplicación), las colecciones y las tablas almacenadas en variables de contexto no requieren delegación. Todos estos datos ya están en la memoria y se puede aplicar el lenguaje de Power Apps completo.

Funciones que se pueden delegar

El siguiente paso es usar solo aquellas fórmulas que se puedan delegar. Aquí se incluyen los elementos de las fórmulas que se pueden delegar. Sin embargo, todos los orígenes de datos son diferentes y no todos ellos admiten todos estos elementos. Compruebe si hay advertencias de delegación en la fórmula en cuestión.

Estas listas cambiarán con el tiempo, Estamos trabajando para dar soporte a más funciones y operadores que admitan la delegación.

Funciones de filtro

Filter, Search y LookUp se pueden delegar.

Las funciones Filter y LookUp se pueden usar con columnas de la tabla para seleccionar los registros apropiados:

  • And (incluyendo &&), Or (incluyendo ||), Not (incluyendo !)
  • In

    Nota

    In solo se delega para columnas en la base origen de datos. Por ejemplo, si origen de datos es la tabla Cuentas entonces Filter(Accounts, Name in ["name1", "name2"]) delega al origen de datos para su evaluación. Sin embargo, Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) no delega ya que la columna Fullname está en una tabla diferente (PrimaryContact) que Cuentas. La expresión se evalúa localmente.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Valores constantes que son iguales en todos los registros, como las propiedades del control y las variables globales y de contexto.

También se pueden usar partes de la fórmula que se evalúen en un valor constante para todos los registros. Por ejemplo, Left(Language(), 2 ), Date( 2019, 3, 31 ) y Today() no dependen de ninguna columna del registro y, por tanto, devuelven el mismo valor para todos los registros. Estos valores se pueden enviar a origen de datos como una constante y no bloquearán la delegación.

La lista anterior no incluye estos elementos importantes:

Funciones de ordenación

Sort y SortByColumns se pueden delegar.

En Sort, la fórmula solo puede ser el nombre de una columna individual y no puede incluir otros operadores o funciones.

Funciones de agregado

Sum, Average, Min y Max pueden delegarse. En este momento, solo un número limitado de orígenes de datos admite esta delegación. Para obtener más detalles, vea la lista de delegación.

Nota

Si no se delega una expresión , solo funcionará en los primeros 500 registros recuperados (se puede configurar un valor de hasta 2000; consulte Cambiar el límite) del origen de datos en lugar de delegar el procesamiento de todos los datos en el origen de datos.

Las funciones de recuento como CountRows, CountA y Count no se pueden delegar.

Otras funciones de agregado, como StdevP y VarP, no se pueden delegar.

Funciones de modelado de tablas

AddColumns, DropColumns, RenameColumns y ShowColumns son compatibles parcialmente con la delegación. Las fórmulas en sus argumentos se pueden delegar. Sin embargo, la salida de estas funciones está sujeta al límite de registro sin delegación.

Como en este ejemplo, los creadores a menudo usan AddColumns y LookUp para mezclar información de una tabla en otra, lo que comúnmente se conoce como una combinación en la jerga de bases de datos:

AddColumns( Products, 
    "Supplier Name", 
    LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name 
)

Aunque Products y Suppliers sean orígenes de datos delegables y LookUp sea una función delegable, el resultado de la función AddColumns no es delegable. El resultado de la fórmula completa se limitará a la primera parte del origen de datos Products. Como la función LookUp y su origen de datos son delegables, se puede encontrar una coincidencia de Suppliers en cualquier parte del origen de datos, incluso si este es muy grande.

Si utiliza AddColumns de esta forma, LookUp debe realizar llamadas separadas a origen de datos para cada uno de esos primeros registros en Products, lo que causa mucha charla en la red. Si Proveedores es lo suficientemente pequeño y no cambia con frecuencia, podría llamar la función Collect en OnStart para almacenar en caché el origen de datos en su aplicación cuando se inicia. Como alternativa, puede reestructurar su aplicación para que obtenga los registros relacionados solo cuando el usuario los solicite.

Funciones no delegables

Las demás funciones no admiten la delegación, incluidas estas importantes funciones:

Límites no delegables

Las fórmulas que no se pueden delegar se procesan localmente. Esto permite usar todo el espectro del lenguaje de fórmulas de Power Apps. Pero esto tiene un precio: primero deben pasarse todos los datos al dispositivo, lo que podría implicar la recuperación de una gran cantidad de datos a través de la red. Esta operación puede tardar un tiempo, lo que daría la impresión de que la aplicación se ejecuta con lentitud, o incluso que está bloqueada.

Para evitarlo, Power Apps impone un límite en la cantidad de datos que se pueden procesar localmente: 500 registros de forma predeterminada. Elegimos este número para que tuviera acceso completo a los conjuntos de datos pequeños y pudiera pueda refinar su uso de conjuntos de datos grandes viendo los resultados parciales.

Obviamente, si se usa este recurso, es preciso tener cuidado, ya que puede confundir a los usuarios. Por ejemplo, imagine una función Filter con una fórmula de selección que no se puede delegar en lugar de un origen de datos que contiene un millón de registros. Dado que el filtrado se realiza localmente, solo se examinan los primeros 500 registros. Si el registro deseado es el 501, o el 500 001, Filter no lo tiene en cuenta o no lo devuelve.

Las funciones de agregado también pueden provocar confusión. Tome Average en lugar de una columna de ese mismo origen de datos de un millón de registros. Promedio no se puede delegar en este caso, ya que la expresión no está delegada (consulte la nota anterior), por lo que solo se promedian los primeros 500 registros. Si no tiene cuidado, algún usuario de la aplicación podría malinterpretar una respuesta parcial como una respuesta completa.

Cambio del límite

500 es el número predeterminado de registros, pero se puede cambiar este número para toda una aplicación:

  1. Seleccione Configuración.
  2. En General, cambie la configuración Límite de filas de datos de 1 a 2000.

En algunos casos, sabrá que 2000 (o 1000 o 1500) satisfará las necesidades del escenario. Puede aumentar esta cifra con precaución para que se ajuste a su escenario. A medida que aumenta esta cifra, el rendimiento de la aplicación puede verse afectado, sobre todo en las tablas anchas que contienen muchas columnas. Aun así, la mejor respuesta es delegar lo máximo posible.

Para asegurarse de que la aplicación se pueda escalar a grandes conjuntos de datos, reduzca este valor a 1. Todo lo que no se puede delegar devuelve un único registro, que debería ser fácil de detectar al probar la aplicación. De esta manera se pueden evitar sorpresas al intentar llevar una aplicación de prueba de concepto a producción.

Advertencias de delegación

Para que sea más fácil saber qué se delega y qué no, Power Apps proporciona una advertencia (triángulo amarillo) cuando se crea una fórmula que contiene algo que no se puede delegar.

Las advertencias de delegación solo aparecen en las fórmulas que operan en orígenes de datos delegables. Si no ve una advertencia y cree que la fórmula no se delega correctamente, compruebe el tipo de origen de datos en la lista anterior de orígenes de datos que se pueden delegar de este tema.

Ejemplos

En este ejemplo se genera automáticamente una aplicación de tres pantallas basada en una tabla de SQL Server denominada [dbo].[Fruit]. Para obtener información sobre cómo generar la aplicación, puede aplicar principios similares a los del tema sobre Dataverse a SQL Server.

Aplicación de tres pantallas.

La propiedad Items de la galería está establecida en una fórmula que contiene las funciones SortByColumns y Search, que se pueden delegar.

En el cuadro de búsqueda, escriba "Apple".

Una fila de puntos aparece momentáneamente junto a la parte superior de la pantalla mientras la aplicación se comunica con SQL Server para procesar la solicitud de búsqueda. Aparecen todos los registros que cumplen los criterios de búsqueda, aunque el origen de datos contenga millones de registros.

Control de entrada de texto de búsqueda.

Los resultados de búsqueda incluyen "Apples" y "Pineapple", porque la función Search busca por todas las partes de un columna de texto. Si solo quiere buscar los registros que contienen el término de búsqueda al principio del nombre de la fruta, puede usar otra función delegable, Filter, con un término de búsqueda más complicado. (Por motivos de simplicidad, quite la llamada a SortByColumns).

Quitar la llamada a SortByColumns.

Los nuevos resultados incluyen "Apples", pero no "Pineapple". Pero aparece un triángulo amarillo junto a la galería (y en la miniatura de pantalla si la barra de navegación izquierda muestra miniaturas) y una línea ondulada azul debajo de una parte de la fórmula. Cada uno de estos elementos indica una advertencia. Si mantiene el puntero sobre el triángulo amarillo junto a la galería, aparece este mensaje:

Pasar el puntero sobre la advertencia de delegación.

SQL Server es un origen de datos delegable y Filter es una función delegable, pero Mid y Len no se pueden delegar a cualquier origen de datos.

Pero ha funcionado, ¿no? Bueno, más o menos. Por eso es una advertencia y no un subrayado ondulado rojo.

  • Si la tabla contiene menos de 500 registros, la fórmula ha funcionado perfectamente. Todos los registros se han pasado al dispositivo y Filter se ha aplicado localmente.
  • Si la tabla contiene más de 500 registros, la fórmula no devuelve los registros desde el 501, aun cuando cumplan los criterios.

Consultar también

Impacto en el rendimiento del uso de funciones no delegables y límites de filas de datos inadecuados para consultas no delegables
Sugerencias y procedimientos recomendados para usar la delegación

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).