Novedades Power Platform

Para la Transformación Digital e Innovación Tecnológica

Novedades Power Platform

Para la Transformación Digital e Innovación Tecnológica

Power Platform

20 expresiones de Power Apps (Power Fx)

Indice de Contenido

Marca la diferencia: apps más rápidas, limpias y fáciles de mantener

Power Fx tiene decenas de funciones y patrones que, bien usados, mejoran rendimiento, legibilidad y escalabilidad. [learn.microsoft.com], [learn.microsoft.com], [learn.microsoft.com]

En esta publicación te comparto 20 funciones que uso con frecuencia y cómo aplicarlas con impacto real (datos, performance, manejo de errores y JSON). [learn.microsoft.com], [learn.microsoft.com], [learn.microsoft.com]


🧠 Funciones para trabajar con datos (CRUD y operaciones masivas)

1) Patch() — crear/actualizar registros con precisión

Úsala para modificar o crear registros sin reemplazar todo el registro y con control sobre qué campos cambian.
Ejemplo (actualizar un campo): [learn.microsoft.com]

Patch( Clientes; { ID:1; Telefono:"1-212-555-1234"});;

Ejemplo (crear registro con Defaults):

Patch( Clientes; Defaults(Clientes); { Nombre:"Ejemplo"; Telefono:"1-212-555-1234" });;

2) ForAll() — ejecutar una fórmula para todos los registros de una tabla

Ideal para operaciones masivas (por ejemplo, crear/actualizar varios registros). Importante: puede procesar en paralelo y en cualquier orden, por eso conviene evitar dependencias de orden. [learn.microsoft.com], [learn.microsoft.com]

ForAll( Lista; Patch( Ordenes; Defaults(Ordenes); { Titulo: ThisRecord.Titulo }));;

3) UpdateIf() — actualizar registros que cumplen una condición

Sirve para actualizar columnas específicas en múltiples registros que cumplan condiciones. Ten en cuenta consideraciones de delegación/limitaciones. [learn.microsoft.com], [learn.microsoft.com]

UpdateIf( Tareas; Estado="Abierto"; { Flag:true } );;

4) RemoveIf() — eliminar registros que cumplan una condición

Útil para “limpieza” (archivar/eliminar) por criterio. También tiene consideraciones de soporte/limitaciones por origen de datos. [learn.microsoft.com], [learn.microsoft.com]

RemoveIf( Auditoria; Fecha< DateAdd(Today(); -30; Days);;

🔎 Nota pro: Microsoft incluso publicó una mejora de “delegación simulada” para UpdateIf/RemoveIf para trabajar con más registros en grandes datasets (hasta 2,000 registros coincidentes por ejecución). [learn.microsoft.com], [learn.microsoft.com]


🧰 Funciones para simplificar fórmulas y mejorar performance

5) With() — variables locales (limpias) para dividir fórmulas complejas

Con With creas valores temporales (tipo “variables locales”) y haces fórmulas más legibles sin depender de variables globales o contextuales. [learn.microsoft.com], [learn.microsoft.com]

With(
{ Total: Sum(ItemsFactura; Cantidad*Precio) }; Total * 1.18
);;

6) Concurrent() — cargar datos en paralelo (menos tiempo de espera)

Cuando tu app hace varias llamadas a conectores/Dataverse, Concurrent permite ejecutarlas en paralelo y reduce el tiempo total de carga (esperas el “más lento”, no la suma de todos). [learn.microsoft.com], [learn.microsoft.com]

Concurrent(

ClearCollect(listaPerfiles; Perfiles);

ClearCollect(listaUsuarios; Usuarios);

ClearCollect(listaAreas Areas)

);;

✅ Reglas rápidas: dentro de Concurrent evita dependencias entre fórmulas (el orden no es predecible). [learn.microsoft.com]


🧱 Funciones para construir y moldear tablas (menos pasos, más claridad)

7) AddColumns() — agregar columnas calculadas (sin tocar el origen)

Agrega una columna calculada a una tabla/colección sin modificar el origen; devuelve una nueva tabla “enriquecida”. [learn.microsoft.com], [learn.microsoft.com]

AddColumns( Productos; "Total"; Cantidad * Precio );;

8) ShowColumns() — quedarte con lo necesario (reduce payload en memoria)

Te permite “proyectar” columnas: excelente para performance y para que galerías/forms trabajen con lo mínimo. [learn.microsoft.com]

ShowColumns( Usuarios; "nombre"; "perfil" );;

9) DropColumns() — eliminar columnas que sobran

Ideal para simplificar colecciones antes de exportar, enviar o mapear datos. [learn.microsoft.com]

DropColumns( ListaConMuchasColumnas; "Notas"; "Flag" );;

🔎 Funciones para buscar, filtrar y recuperar registros (con delegación en mente)

10) Filter() — filtrar tablas por criterios

Devuelve una tabla con los registros que cumplan condiciones; cuando es posible, Power Apps delega filtro/orden al origen para rendimiento. [learn.microsoft.com], [learn.microsoft.com]

Filter( Tareas; Estado="Abierto" && Fecha <= Today() );;

11) LookUp() — obtener el primer registro que cumple condición

Útil para traer un registro (por ejemplo, para detalles, validaciones o relaciones). [learn.microsoft.com], [learn.microsoft.com]

LookUp( Usuarios; ID= varIdUsuario);;

12) StartsWith() — búsquedas “tipo autocompletar”

Excelente para búsquedas por prefijo (y en muchas fuentes es delegable). Devuelve boolean y se usa típicamente dentro de Filter. [learn.microsoft.com], [learn.microsoft.com]

Filter( Usuarios; StartsWith(Nombre; txtBusqueda.Text) );;

🧺 Colecciones y utilidades (cuando sí conviene)

13) ClearCollect() — limpiar y recargar una colección en un solo paso

Combina Clear + Collect. Útil para caché local; ojo con delegación si lo usas contra orígenes grandes. [learn.microsoft.com], [learn.microsoft.com]

ClearCollect( listaOrdenesAprobadas, Filter(Ordenes, Estado="Aprobado") );;

14) Sequence() — generar una tabla de números (para iteraciones “n veces”)

Genera una tabla de una columna (Value) y se usa mucho con ForAll para “hacer algo” una cantidad fija de veces. [learn.microsoft.com], [learn.microsoft.com]

ForAll( Sequence(10); Collect(NumerosAleatorios; Rand()) );;

15) Index() — traer un registro por posición (1-based)

Devuelve el registro en la posición indicada (1 = primero). Útil para escenarios controlados (ej. galerías/colecciones pequeñas). No es delegable para orígenes grandes. [learn.microsoft.com], [learn.microsoft.com]

Index( Galeria.AllItems; 1 );;

🛡️ Robustez y calidad: manejo de errores y validación

16) IfError() — fallback seguro ante errores (sin romper la app)

Permite capturar un error y devolver un valor alternativo o ejecutar una acción (por ejemplo, Notify). [learn.microsoft.com], [learn.microsoft.com]

IfError( 1/x; 0 );;

17) IsBlank() — validar “sin valor” (incluye cadena vacía)

Verifica si algo está en blanco o vacío; muy útil para validaciones de entrada. [learn.microsoft.com], [learn.microsoft.com]

If( IsBlank(txtEmail.Text); Notify("Ingresa un correo"); SubmitForm(Formulario) );;

18) IsBlankOrError() — validar vacío o error

Es clave cuando habilitas manejo de errores a nivel de fórmula o cuando una conversión puede fallar. [learn.microsoft.com], [learn.microsoft.com]

If( IsBlankOrError(Value(txtAmount.Text)); Notify("Monto inválido"); true )

🧾 Formato y datos externos: Text y JSON

19) Text() — formatear números/fechas y convertir a texto

Convierte y formatea valores (números/fechas) con formatos predefinidos o personalizados; también sirve para convertir tipos a texto antes de concatenar. [learn.microsoft.com], [learn.microsoft.com]

Text( Now(); "dd-mmm-yyyy" );;

20) ParseJSON() — interpretar JSON y convertir a tipos

Convierte un JSON válido en un valor Dynamic (o tipado si activas funciones experimentales). Es clave para integrar APIs y datos externos. [learn.microsoft.com], [learn.microsoft.com]

Set(registro; ParseJSON(jsonString));;

Set(varEnviado; Boolean(registro.Enviado));;

Set(varCantidad; Value(registro.Cantidad));;

💡 Consejo: es buena práctica convertir explícitamente tipos (Text/Value/Boolean/DateValue) cuando trabajas con Dynamic. [learn.microsoft.com], [learn.microsoft.com]


✅ Casos de uso (rápidos y aplicables)

Caso A — OnStart más rápido con carga paralela

Problema: 3–5 llamadas seguidas hacen que la app demore “la suma” de tiempos.
Solución: Concurrent() para cargar catálogos/colecciones en paralelo. [learn.microsoft.com], [learn.microsoft.com]

Caso B — Menos “código espagueti” en fórmulas largas

Problema: fórmulas difíciles de leer y mantener.
Solución: With() para variables locales y subcálculos con nombres. [learn.microsoft.com], [learn.microsoft.com]

Caso C — Integración con APIs sin dolor

Problema: recibes JSON (HTTP/Custom Connector) y necesitas usarlo en la app.
Solución: ParseJSON() + conversiones explícitas (Value/Text/Boolean). [learn.microsoft.com], [learn.microsoft.com]

Caso D — Operaciones masivas y mantenimiento de datos

Problema: actualizar o limpiar muchos registros por condición.
Solución: UpdateIf() / RemoveIf() (con ojo al límite práctico) + patrones de optimización. [learn.microsoft.com], [learn.microsoft.com], [learn.microsoft.com]


🧾 Conclusiones y recomendaciones (para adoptar ya)

📌 Si quieres apps más “productivas” en menos tiempo, aplica estas 5 reglas:

  1. Optimiza carga con Concurrent cuando tengas llamadas independientes a conectores. [learn.microsoft.com], [learn.microsoft.com]
  2. Reduce complejidad usando With para “sub-fórmulas” y variables locales. [learn.microsoft.com], [learn.microsoft.com]
  3. Moldea tablas (AddColumns/ShowColumns/DropColumns) para evitar colecciones pesadas y pasos extra. [learn.microsoft.com], [learn.microsoft.com]
  4. Busca con delegación en mente: Filter + StartsWith suele ser un patrón eficiente para búsquedas. [learn.microsoft.com], [learn.microsoft.com]
  5. Robustez por defecto: valida y maneja errores con IfError e IsBlankOrError. [learn.microsoft.com], [learn.microsoft.com]

📚 Referencias oficiales

  • Power Fx overview (por qué Power Fx y su enfoque): https://learn.microsoft.com/en-us/power-platform/power-fx/overview [learn.microsoft.com]
  • Guía de optimización de código (With/Concurrent y performance): https://learn.microsoft.com/en-us/power-apps/guidance/coding-guidelines/code-optimization [learn.microsoft.com]
  • Patch: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-patch [learn.microsoft.com]
  • ForAll: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-forall [learn.microsoft.com]
  • With: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-with [learn.microsoft.com]
  • Concurrent: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-concurrent [learn.microsoft.com]
  • Sequence: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-sequence [learn.microsoft.com]
  • Filter/Search/LookUp: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-filter-lookup [learn.microsoft.com]
  • Sort/SortByColumns: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-sort [learn.microsoft.com]
  • Clear/Collect/ClearCollect: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-clear-collect-clearcollect [learn.microsoft.com]
  • Update/UpdateIf: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-update-updateif [learn.microsoft.com]
  • Remove/RemoveIf: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-remove-removeif [learn.microsoft.com]
  • First/Index/Last: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-first-last [learn.microsoft.com]
  • StartsWith/EndsWith: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-startswith [learn.microsoft.com]
  • IfError/IsBlankOrError: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-iferror [learn.microsoft.com]
  • IsBlank/IsEmpty: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-isblank-isempty [learn.microsoft.com]
  • Text: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-text [learn.microsoft.com]
  • ParseJSON y JSON en Power Fx:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

advanced-floating-content-close-btnBoton