🟢 Introducción
¿Tienes fórmulas largas y difíciles de leer en tu aplicación Canvas? 🤯
La función With() te permite definir variables temporales dentro de una sola fórmula, mejorando la claridad, el rendimiento y el mantenimiento del código.
Es una herramienta perfecta para simplificar cálculos, evitar variables globales innecesarias (Set) y reducir llamadas repetidas a la misma fuente de datos.
🧠 Qué es / para qué sirve
With() se usa para definir valores locales (solo disponibles dentro de la fórmula donde se usan).
Sirve para:
Guardar resultados intermedios (como una búsqueda o cálculo). Evitar repetir la misma operación varias veces. Mejorar el rendimiento al evitar consultas duplicadas. Mantener tus fórmulas más limpias y fáciles de leer.
📘 En otras palabras, With() actúa como una variable de contexto temporal dentro de una fórmula.
🧩 Sintaxi
With( { Name1: Value1 [, Name2: Value2, ...] }, Formula )
Parámetros:
| Parámetro | Descripción |
|---|---|
| Name1, Name2, … | Nombres de variables locales (no requieren Set() ni UpdateContext()). |
| Value1, Value2, … | Valores o expresiones asignadas a cada nombre. |
| Formula | La fórmula que usará esas variables dentro de su alcance. |
💻 Ejemplos con código
🔹 Ejemplo 1: simplificar un cálculo
With(
{ Precio: 200, Descuento: 0.15 },
Precio - (Precio * Descuento)
)
➡️ Devuelve el valor final con descuento aplicado (170).
🔹 Ejemplo 2: evitar llamadas duplicadas
Sin With():
LookUp(Orders, ID = 1001).Total + LookUp(Orders, ID = 1001).ShippingCost
Con With():
With(
{ order: LookUp(Orders, ID = 1001) },
order.Total + order.ShippingCost
)
➡️ La tabla Orders se consulta una sola vez, mejorando rendimiento y legibilidad.
🔹 Ejemplo 3: combinar datos locales y globales
With(
{
PrecioBase: 1200,
Impuesto: 0.16,
Total: PrecioBase * (1 + Impuesto)
},
Notify("El total con impuestos es $" & Text(Total, "[$-es-MX]#,##0.00"))
)
🔹 Ejemplo 4: usar With() dentro de galerías
With(
{ producto: ThisItem },
"Producto: " & producto.Nombre & " - Precio: $" & producto.Precio
)
🧱 Buenas prácticas
✅ Usa With() para operaciones locales, no para valores que necesites fuera del control.
✅ Evita anidar demasiados With(), puede dificultar la lectura.
✅ Úsala para reducir repeticiones y optimizar cargas de datos.
✅ Combínala con If() o Switch() para fórmulas más limpias y legibles.
✅ Usa nombres descriptivos dentro del bloque, como pedido, cliente, precioTotal.
⚠️ Errores comunes
🚫 Intentar usar una variable de With() fuera de su alcance (solo vive dentro de la fórmula).
🚫 Reutilizar nombres de variables globales o contextuales (puede causar confusión).
🚫 Olvidar cerrar correctamente el bloque con paréntesis.
🚫 No entender que With() se evalúa una sola vez al momento de ejecutarse, no dinámicamente.
🔄 Variantes o alternativas
Set() → crea variables globales que persisten en toda la app. UpdateContext() → define variables contextuales dentro de una pantalla. Let() (en Power Fx futuro) → será la versión extendida para múltiples niveles de alcance.
📚 Recursos oficiales
📘 Documentación oficial de With() en Power Fx
📗 Variables globales y contextuales
📙 Optimización de rendimiento en Power Apps
🧩 Mini práctica
Objetivo: Calcular el precio final con descuento usando With().
1️⃣ Crea tres TextInput:
txtPrecio (precio base) txtDescuento (porcentaje en decimal, ej. 0.1 para 10%) lblResultado (etiqueta para mostrar resultado)
2️⃣ En el OnSelect de un botón, agrega:
With(
{
Precio: Value(txtPrecio.Text),
Descuento: Value(txtDescuento.Text),
Total: Precio - (Precio * Descuento)
},
Set(varTotal, Total);
Notify("El precio final es $" & Text(varTotal, "[$-es-MX]#,##0.00"))
)
3️⃣ Ejecuta la app y prueba diferentes valores: verás el resultado calculado con With() en acción. ⚡
✨ Conclusión:
With() es una joya oculta de Power Fx.
Te ayuda a escribir fórmulas más limpias, eficientes y profesionales, mejorando el rendimiento de tus aplicaciones Canvas. 💪


Deja un comentario