PowerLens
Todas las publicaciones
Power Apps8 de abril de 2026· 5 min de lectura

Delegación de Servidor en Power Apps: Supera el Límite de 500 Registros en tu Directorio de Empleados

Juan Carlos Santiago

Juan Carlos Santiago

Delegación de Servidor en Power Apps: Supera el Límite de 500 Registros en tu Directorio de Empleados

Delegación de Servidor en Power Apps: Supera el Límite de 500 Registros en tu Directorio de Empleados

El Problema Real: Cuando tu App Colapsa con Datos

Imagina que trabajas en una empresa mediana con 12,000 empleados. Tu director ejecutivo te pide construir un directorio corporativo en Power Apps conectado a SharePoint. Suena simple, ¿verdad? Implementas rápidamente una galería con todos los registros y... la aplicación carga solo 500 registros. Los usuarios no pueden encontrar a nadie más allá de ese límite.

Esto sucede porque Power Apps, por defecto, carga los datos localmente en el cliente. El límite de delegación de 500 registros (2,000 en Dataverse) es una trampa silenciosa que destruye la experiencia del usuario.

La solución: delegación de servidor. En lugar de traer todos los datos al dispositivo, enviamos las instrucciones de filtrado y búsqueda al servidor (SharePoint, Dataverse) para que haga el trabajo pesado.

¿Por Qué Importa la Delegación?

Sin delegación:

  • ❌ Carga inicial lenta (descargando 12,000 registros)
  • ❌ Alto uso de memoria en el dispositivo
  • ❌ Búsquedas y filtros solo funcionan en los primeros 500 registros
  • ❌ Experiencia de usuario frustrante

Con delegación correcta:

  • ✅ Solo se traen los datos necesarios
  • ✅ El servidor maneja el filtrado
  • ✅ Búsquedas instantáneas en toda la base de datos
  • ✅ Escalabilidad para millones de registros

Patrón 1: Filtrado Básico

❌ INCORRECTO (No Delegable)

AddColumns(
  Filter(
    DirectorioEmpleados.AllRecords,
    departamento = "Ventas"
  ),
  "NombreCompleto",
  Concatenate(nombre, " ", apellido)
)

Problema: Concatenate() no es delegable. Power Apps carga TODOS los empleados, luego filtra localmente.

✅ CORRECTO (Delegable)

Filter(
  DirectorioEmpleados,
  departamento = "Ventas"
)

Ventaja: El filtro se ejecuta en SharePoint/Dataverse. Solo se traen los registros necesarios.

Patrón 2: Búsqueda de Texto

❌ INCORRECTO (No Delegable)

Filter(
  DirectorioEmpleados.AllRecords,
  nombre & apellido = SearchBox1.Value
)

Problema: La concatenación & no es delegable. Búsquedas lentas en bases de datos grandes.

✅ CORRECTO (Delegable con StartsWith)

Filter(
  DirectorioEmpleados,
  StartsWith(nombre, SearchBox1.Value)
)

Pro Tip: Usa StartsWith() para búsquedas de texto delegables. Para búsquedas más flexibles, considera usar búsqueda de Dataverse nativa.

Patrón 3: Ordenamiento Eficiente

❌ INCORRECTO (No Delegable)

Sort(
  Filter(DirectorioEmpleados.AllRecords, departamento = "IT"),
  Lower(nombre)
)

Problema: Lower() dentro de Sort() no es delegable.

✅ CORRECTO (Delegable)

Sort(
  Filter(
    DirectorioEmpleados,
    departamento = "IT"
  ),
  nombre,
  SortOrder.Ascending
)

Resultado: El servidor ordena directamente. Múltiples órdenes de magnitud más rápido.

Tabla de Funciones Delegables

FunciónSharePointDataverseNotas
FilterOperadores básicos: =, <>, <, >, <=, >=
StartsWithMejor opción para búsquedas de texto
SearchDataverse ofrece búsqueda flexible nativa
SortSin transformaciones en el campo
ConcatenateNo delegable en ningún contexto
Lower/UpperNo delegable para ordenamiento
Contains⚠️ LimitadoSharePoint: solo con AND, Dataverse: completo
InUsa Filter con OR para SharePoint

Caso de Estudio: Sistema de Inventario con 50,000 SKUs

Tu empresa necesita un app de inventario que permita buscar productos por código, categoría y ubicación de almacén.

Implementación Correcta:

Let(
  filtroCategoria = If(
    ddlCategoria.Value = "Todos",
    true,
    categoria = ddlCategoria.Value
  ),
  filtroBusqueda = If(
    IsBlank(txtCodigoProducto.Value),
    true,
    StartsWith(codigoProducto, txtCodigoProducto.Value)
  ),
  Sort(
    Filter(
      Inventario,
      filtroCategoria,
      filtroBusqueda,
      almacen = ddlAlmacen.Value
    ),
    nombre
  )
)

¿Por qué funciona?

  • Usa Filter() con operadores delegables
  • StartsWith() para búsqueda delegable
  • El servidor filtra antes de traer datos
  • Resultado: buscar entre 50,000 productos en < 100ms

Indicador de Delegación en Power Apps

En tu fórmula, Power Apps muestra un indicador azul si hay una advertencia de delegación. No ignores ese símbolo: significa que tu función no es delegable y potencialmente causará problemas con datos grandes.

Mejores Prácticas Finales

  1. Siempre verifica la advertencia de delegación (ícono azul en la barra de fórmulas)
  2. Prefiere FilterBy() sobre Filter() con múltiples condiciones complejas
  3. Usa búsqueda nativa de Dataverse en lugar de custom filters para texto
  4. Evita transformaciones de datos en funciones de filtrado (Concatenate, Lower, etc.)
  5. Prueba con datos reales: 10,000+ registros, no 100
  6. Implementa paginación como fallback para casos de uso específicos

Conclusión

La delegación de servidor no es una característica avanzada: es fundamental para cualquier app de Power Apps que maneje datos serios. Aplicando estos patrones correctos, transformarás tu directorio de 12,000 empleados de una aplicación lenta en herramienta de búsqueda rápida y confiable.

El secreto está en hacer que el servidor trabaje para ti desde el inicio. Pequeños cambios de código = grandes cambios en rendimiento.

#power-apps#delegación#dataverse#sharepoint#rendimiento#tutorial