Limitaciones de consultas: límites de delegación y consultas
Concepto de delegación
Power Apps funciona mejor con un back-end origen de datos cuando una Power Fx consulta se puede traducir completamente a una consulta equivalente que se puede ejecutar en origen de datos. Power Apps envía una consulta que origen de datos comprende, la consulta se realiza en origen de datos y los resultados de la consulta se devuelven a Power Apps. Por ejemplo, origen de datos podría hacer el trabajo de filtrar los datos en origen de datos y solo devolver las filas que cumplan con los criterios de filtro. Cuando esto funciona correctamente, decimos que la consulta se delega al origen de datos para realizar el trabajo de la consulta.
Sin embargo, las consultas Power Fx no siempre se pueden traducir en consultas equivalentes en todas las fuentes de datos. Por ejemplo, Dataverse admite más funciones de consulta que Excel. Dataverse admite el operador de consulta 'en' (membresía) y Excel no. Decimos que la consulta es no delegable si una consulta utiliza una característica que origen de datos no admite. En general, si alguna parte de una expresión de consulta no es delegable, no delegamos ninguna parte de la consulta.
Cuando una consulta no es delegable, Power Apps solo obtiene los primeros 500 registros de origen de datos y luego realiza las acciones en la consulta. Este límite puede aumentarse a 2000 registros Cambio del límitePower Apps limita el tamaño del resultado a 500 registros para preservar un buen rendimiento de Power Apps. Hemos descubierto mediante experimentación que conjuntos de resultados mayores a estos tamaños provocan problemas de rendimiento para su aplicación y Power Apps en general.
Sin embargo, esta limitación puede ser un problema ya que la consulta puede arrojar resultados incorrectos si los datos en origen de datos superan los 500/2000 registros. Por ejemplo, considere el ejemplo en el que su origen de datos tiene 10 millones de registros y su consulta debe operar en la última parte de los datos. (Por ejemplo, los apellidos que comienzan con 'Z') Sin embargo, su consulta tiene un operador no delegable (por ejemplo, distinto). En este caso, solo obtiene los primeros 500/2000 registros y tiene errores resultados.
Cree sus consultas de Power Fx utilizando las tablas delegables para su origen de datos. Sólo debe utilizar funciones de consulta que se puedan delegar. Es la única forma de mantener un buen rendimiento de la aplicación para 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
Las advertencias de delegación permiten administrar la aplicación para que tenga resultados correctos. Si los datos en su origen de datos superan los 500 registros y no se puede delegar una función, Power Fx marcará la fórmula con un subrayado azul.
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:
- Funciones y operaciones delegables de Power Apps para Microsoft Dataverse
- Funciones y operaciones delegables de Power Apps para SharePoint
- Funciones y operaciones delegables de Power Apps para SQL Server
- Funciones y operaciones delegables de Power Apps para Salesforce
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.
Funciones de filtro
Filter, Search, First y LookUp se pueden delegar.
Las funciones Filter y LookUp se pueden usar con columnas de la tabla para seleccionar los registros apropiados:
- Y (incluido &&), O (incluido ||), No (incluido !)
- 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:
- If
- *, /, Mod
- Operaciones de conversión de columna Texto, Valor
- Concatenate (incluyendo y )
- ExactIn
- Funciones de manipulación de cadenas: Lower, Upper, Left, Mid, Len, ...
- Señales: Location, Acceleration, Compas, ...
- Volátiles: Rand, ...
- Colecciones
Limitaciones de consulta
Niveles de búsqueda
Power Apps admite dos niveles de búsqueda. Esto significa que una expresión de consulta Power Fx puede tener, como máximo, dos funciones de búsqueda. Esta limitación es para proteger el rendimiento. Si una expresión de consulta incluye una búsqueda, Power Apps primero hace una consulta para obtener la tabla base. Luego, realiza una segunda consulta que expande la primera tabla con la información de búsqueda. Apoyamos un nivel más más allá de ese como máximo. Sin embargo, sin conexión, solo admitimos un nivel de expansión de búsqueda.
Evaluación de expresiones: la propiedad de la entidad debe estar en el lado izquierdo 'LHS' del operador de igualdad
Es importante colocar la propiedad de una entidad a comparar en una expresión en el lado izquierdo 'LHS' de una ecuación. Para ilustrar, en el ejemplo siguiente, la propiedad de la entidad 'ID de unidad de negocio'.Nombre es un valor de propiedad y debe colocarse en el LHS de la expresión a evaluar. La siguiente expresión tiene éxito:
Filter(
Budgets,
'Business unit ID'.Name = LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name,
DataCardValue37.Selected.'Date Range String'='Date Range String'
)
Sin embargo, esta expresión no:
Filter(
Budgets,
LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name = 'Business unit ID'.Name,
'Date Range String'=DataCardValue37.Selected.'Date Range String'
)
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
Ciertas funciones agregadas se pueden delegar en función de la compatibilidad de back-end. Funciones como Sum, Average, Min y Max pueden delegarse. Las funciones de recuento como CountRows y Count también se pueden delegar. Sin embargo Removelf y UpdateIf tienen restricciones de delegación. Actualmente, solo un número limitado de orígenes de datos admiten la delegación de estas funciones. Para más detalles, consulte la lista de delegación.
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. El procesamiento local 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:
- Seleccione Configuración.
- En General, cambie la configuración Límite de filas de datos de 1 a 2000.
En algunos casos, sabe 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 artículo.
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 artículo sobre Dataverse a SQL Server.
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.
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).
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:
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