Compartir a través de


Limitaciones de consultas: límites de delegación y consultas

Power Apps funciona mejor con un origen de datos back-end cuando una consulta de Power Fx se traduce completamente en una consulta equivalente que se ejecuta en el origen de datos. Power Apps envía una consulta que el origen de datos comprende, el origen de datos ejecuta la consulta y Power Apps obtiene los resultados. Por ejemplo, el origen de datos filtra los datos y solo devuelve las filas que cumplen los criterios de filtro. Cuando esto sucede, la consulta se delega al origen de datos.

Pero las consultas de Power Fx no siempre se pueden traducir en consultas equivalentes en todos los orígenes de datos. Por ejemplo, Dataverse admite más características de consulta que Excel. Dataverse admite el operador de consulta "in" (pertenencia), pero Excel no. Una consulta no es delegable si usa una característica que el origen de datos no admite. Si alguna parte de una expresión de consulta no es delegable, Power Apps no delega ninguna parte de la consulta.

Cuando una consulta no es delegable, Power Apps obtiene los primeros 500 registros del origen de datos y, a continuación, realiza las acciones de la consulta. Puede aumentar este límite a 2000 registros. Al cambiar el límitePower Apps limita el tamaño del resultado a 500 registros para que la aplicación siga funcionando correctamente. Los conjuntos de resultados más grandes pueden causar problemas de rendimiento para su aplicación y Power Apps.

Pero esta limitación puede ser un problema, ya que la consulta puede devolver resultados incorrectos si el origen de datos tiene más de 500 o 2.000 registros. Por ejemplo, si el origen de datos tiene 10 millones de registros y la consulta debe funcionar en la última parte de los datos, como los apellidos que empiezan por "Z", y la consulta usa un operador indelegable como distinct, solo obtendrá los primeros 500 o 2000 registros. Por lo tanto, obtendrá resultados incorrectos.

Cree sus consultas de Power Fx utilizando las tablas delegables para su origen de datos. Utilice únicamente funciones de consulta que se puedan delegar. Es la única manera de mantener la aplicación funcionando bien y asegurarse de que los usuarios obtienen toda la información que necesitan.

Presta atención a las advertencias de delegación que muestran dónde no es posible delegar. Si trabaja con conjuntos de datos pequeños (menos de 500 registros), puede usar cualquier origen de datos y fórmula porque la aplicación procesa los datos localmente si la fórmula no está delegada.

Nota

Las advertencias de delegación permiten administrar la aplicación para que tenga resultados correctos. Si los datos del origen de datos superan los 500 registros y una función no está delegada, Power Fx marca la fórmula con un subrayado azul.

Orígenes de datos delegables

La delegación solo funciona con determinados orígenes de datos tabulares. Si un origen de datos admite la delegación, su documentación del conector describe ese apoyo. Estos orígenes de datos tabulares populares admiten 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. Estos datos ya están en memoria, por lo que se usa el lenguaje completo de Power Apps.

Funciones que se pueden delegar

Use solo fórmulas que se puedan delegar. En este artículo se enumeran los elementos de fórmula 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 el origen de datos base. 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 Nombre completo está en una tabla diferente (PrimaryContact) que Cuentas. La expresión se evalúa localmente.

  • =, <>>=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Valores constantes que son los mismos en todos los registros, como las propiedades de 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:

Delegación y colecciones

Cuando se usa With, UpdateContexto Set, estas funciones crean colecciones internamente. Las colecciones son una lista estática en memoria de registros y no pueden participar en la delegación. No ve una advertencia de delegación.

Limitaciones de consulta

Búsqueda y expandir niveles

Power Apps permite usar hasta dos niveles de búsqueda. Esto significa que una expresión de consulta de Power Fx puede incluir un máximo de dos funciones de búsqueda para mantener el rendimiento. Cuando una expresión de consulta incluye una búsqueda, Power Apps primero consulta la tabla base y, a continuación, realiza una segunda consulta para expandir la primera tabla con la información de búsqueda. Se admite un nivel adicional como máximo. En escenarios sin conexión, solo se admite un nivel de expansión de búsqueda.

Expanda o combine hasta 20 entidades en una sola consulta. Si necesita unir más de 20 tablas en una consulta, intente crear una vista en el servidor de datos si es posible.

Evaluación de expresiones: la propiedad de la entidad debe estar en el lado izquierdo 'LHS' del operador de igualdad

Coloque la propiedad de una entidad que se comparará en el lado izquierdo (LHS) de una ecuación. Por ejemplo, en la siguiente expresión, la propiedad de la entidad "Id. de unidad de negocio".Nombre está en el LHS y la expresión funciona:

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 funciona:

 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

Algunas 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, no se pueden delegar. Sin embargo, RemoveIf y UpdateIf tienen restricciones de delegación. Solo un número limitado de orígenes de datos admiten la delegación de estas funciones. Para obtener más información, consulte la Lista de delegación.

Funciones no delegables

Todas las demás funciones no se pueden delegar. Entre las funciones importantes se incluyen las siguientes:

Límites no delegables

Las fórmulas que no se pueden delegar se procesan localmente. El procesamiento local le permite utilizar el lenguaje de fórmulas de Power Apps completo. Pero hay un equilibrio: todos los datos llegan primero al dispositivo, lo que puede significar obtener una gran cantidad de datos a través de la red. Este proceso puede llevar tiempo y hacer que su aplicación parezca lenta o no responda.

Para evitarlo, Power Apps limita la cantidad de datos que se pueden procesar localmente a 500 registros de manera predeterminada. Este límite permite usar conjuntos de datos pequeños por completo y trabajar con grandes conjuntos de datos viendo resultados parciales.

Obviamente, si se usa este recurso, es preciso tener cuidado, ya que puede confundir a los usuarios. Por ejemplo, si utiliza la función Filtro con una fórmula de selección que no se puede delegar sobre una fuente de datos con un millón de registros, sólo se escanearán los 500 primeros registros. Si el registro que desea es el registro 501 o 500 001, Filter no encuentra ni lo devuelve.

Las funciones agregadas también pueden resultar confusas. Por ejemplo, si usa Average en una columna de ese mismo origen de datos de un millón de registros, Average no se puede delegar porque la expresión no se delega (consulte la nota anterior). Solo se obtiene el promedio de los primeros 500 registros. Si no tiene cuidado, un usuario podría pensar que una respuesta parcial es la respuesta completa.

Cambio del límite

El número predeterminado de registros es 500, pero puedes cambiar este número para la 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, 2000, 1000 o 1500 registros son suficientes para su escenario. Puedes aumentar este número para adaptarlo a tus necesidades, pero a medida que lo hagas, el rendimiento de tu aplicación puede degradarse, especialmente en el caso de tablas anchas con muchas columnas. Aun así, es mejor delegar tanto como sea posible.

Para asegurarse de que la aplicación se escala a grandes conjuntos de datos, establezca este valor en 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

Power Apps muestra una advertencia (triángulo amarillo) cuando se crea una fórmula que no se puede delegar. Es más fácil saber qué está delegado y qué no lo está.

Las advertencias de delegación solo aparecen en fórmulas que usan 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 artículo 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". Aparece un triángulo amarillo junto a la galería y en la miniatura de la pantalla si la barra de navegación izquierda muestra miniaturas. Aparece una línea ondulada azul debajo de 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. Mid y Len no se pueden delegar en ningún origen de datos.

Pero funciona, ¿verdad? 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.

Vea también