💡 Introducción: Superando el Límite de 500/2000 Registros
Uno de los desafíos más comunes que enfrentan los Makers al desarrollar Power Apps Canvas es la gestión eficiente de grandes volúmenes de datos. Cuando una aplicación se vuelve lenta o no muestra todos los registros esperados, la causa principal suele ser la No-Delegación y la ineficiente gestión de datos en la memoria local.
💻 Desarrollo Técnico: La Delegación como Pilar del Rendimiento
La Delegación es la capacidad de Power Apps de «delegar» el procesamiento de datos (filtrado, ordenación, búsqueda) directamente al sistema de origen de datos (como Dataverse, SQL Server o SharePoint). Esto significa que la fuente de datos realiza el trabajo pesado y solo devuelve a la aplicación los registros exactos que necesita, en lugar de intentar descargar toda la tabla.
🛠️ Fórmulas y Funciones Delegables vs. No Delegables
Cuando se utiliza una función delegable, Power Apps le pide a la fuente que procese la consulta. Cuando se usa una función no delegable, Power Apps descarga el límite de registros permitidos (por defecto 500, ampliable a 2000) y realiza el procesamiento localmente. Este límite de 500/2000 registros es el error más común que se debe evitar.
| Función Delegable Típica | Función No Delegable Típica | Recomendación |
| Filter(), Search() (en Dataverse) | Filter() (con condiciones complejas en SharePoint) | Utilizar Dataverse o SQL como fuente principal. |
| Sort(), SortByColumns() | ClearCollect() (en la carga inicial) | Minimizar colecciones y operar sobre la fuente directa. |
Operadores: =, <>, <, > | Operadores: Not, In (en algunos contextos) | Usar Delegation Warnings para refactorizar. |
✏️ Nota: Para fuentes como SharePoint, las funciones Search() y LookUp() tienen restricciones estrictas; solo funcionan correctamente con la delegación si la columna de búsqueda es indexable. Siempre preste atención al triángulo azul o amarillo de advertencia.
⚙️ Carga Diferida (Lazy Loading) para la Experiencia de Usuario
La Carga Diferida es un patrón de diseño que se utiliza para mejorar la velocidad de inicio de la aplicación. En lugar de cargar todos los datos, imágenes y componentes al iniciar la app, solo se cargan los elementos que el usuario está viendo actualmente o que son estrictamente necesarios.
Para Canvas Apps, esto se aplica principalmente a:
- Galerías: Las galerías cargan automáticamente los registros a medida que el usuario se desplaza (una forma de carga diferida).
- Pantallas (Screens): Utilice la función LoadData() con prudencia y no cargue todas las colecciones y variables globales en el App.OnStart. En su lugar, utilice la propiedad OnVisible de cada pantalla para cargar solo los datos que esa pantalla necesita.
Ejemplo de Optimización con OnVisible:
En lugar de poner todas las llamadas a colecciones en App.OnStart:
// En App.OnStart (Malo, tarda en cargar la app)ClearCollect(ColClientes, 'Clientes');ClearCollect(ColProductos, 'Productos');
Optimice usando el evento Screen.OnVisible:
// En Screen1.OnVisible (Bueno, carga solo cuando se necesita)If(IsEmpty(ColClientes), ClearCollect(ColClientes, 'Clientes'));
✍️ Mini Ejercicio Práctico: Identificación y Corrección de Delegación
Objetivo: Identificar un problema de delegación y corregirlo en una fórmula simple.
- Cree una nueva Canvas App y conéctela a una lista de SharePoint o una tabla de Dataverse con más de 500 registros.
- Inserte una galería y en su propiedad Items, use la siguiente fórmula (NO DELEGABLE en la mayoría de las fuentes relacionales):
Filter('MiTablaGrande', Not(StartsWith(Nombre, "A")))
- Observe la advertencia de delegación (el triángulo azul) en la barra de fórmulas. La aplicación solo está filtrando los primeros 500/2000 registros descargados.
- Corrección (Delegable): Cambie la fórmula a una operación delegable (asumiendo que la fuente lo soporta):
Filter('MiTablaGrande', StartsWith(Nombre, "B"))
- Observe cómo la advertencia desaparece. La base de datos ahora procesa el filtro, asegurando que todos los registros de la tabla sean considerados.
💡 Usa el siguiente Sandbox para tus pruebas!
Power Fx Interactive Sandbox: Registros
Cargando el entorno interactivo de Power Fx…


Deja un comentario