In Power Apps, the With() function is used to create temporary variables (kind of like short-term placeholders) inside a formula. These variables only exist while the formula is being evaluated. This helps make formulas shorter and more readable because you don’t have to repeat calculations or expressions multiple times.

1. Calculations with Shared Logic

Perform complex calculations that share common intermediate logic.

Example: Width, Height, and Depth are named formulas.

Code
With(
    { Area: Width * Height },
    UpdateContext({ Perimeter: 2 * (Width + Height), Volume: Area * Depth })
)

2. Simple Arithmetic

Perform basic calculations and reuse intermediate results.

Code
With(
    { Result: 50 * 10 },
    Result + 50
)

3. Working with Collections

Handle filtered collections easily.

Code
With(
    { MyProducts: Filter(Products, Price > 100) },
    CountRows(MyProducts)
)

4. Nested With()

Sequential or multi-step calculations.

Code
With(
    { Sum: Value(TextInput1.Text) + Value(TextInput2.Text) },
    With(
        { Markup: Sum * 5 },
        Markup / 2
    )
)

5. Using With() in Galleries

Calculate totals or other aggregate values for a gallery.

Code
With(
    { TotalPrice: Sum(Filter(Gallery1.AllItems, Category = "Electronics"), Price) },
    Text(TotalPrice, "$0.00")
)

6. Date and Time Manipulation

Extract date components for filtering or calculations.

Code
With(
    { Today: Now() },
    UpdateContext({ YYYY: Year(Today), MM: Month(Today), DD: Day(Today) })
)
Code
With(
    { StartDate: DateValue("01-01-2022"), EndDate: DateValue("12-31-2022") },
    Filter(Orders, OrderDate >= StartDate && OrderDate <= EndDate)
)

7. Conditional Formatting and Styling

Set visual styles dynamically.

Code
With(
    { Style: If(IsAdmin, Color.Blue, Color.Red) },
    UpdateContext({ HeaderColor: Style, ButtonColor: Style })
)

8. Grouping Operations on a Single Record

Perform multiple operations on a specific record.

Code
With(
    { CurrentProduct: Lookup(Products, ProductID = selectedProductID) },
    Patch(Products, CurrentProduct, { Stock: CurrentProduct.Stock - 1 });
    Notify(CurrentProduct.Stock, NotificationType.Information)
)

9. Navigating Hierarchical Data

Filter related child records in a 1-N relationship.

Code
With(
    { SelectedCategory: Lookup(Categories, CategoryID = selectedCategoryID) },
    UpdateContext({ Subcategories: Filter(Subcategories, ParentID = SelectedCategory.CategoryID) })
)

10. Displaying User Information

Simplify multi-field concatenation.

Code
With(
    { CurrentUser: Lookup(Users, ID = User().Email) },
    Concatenate(
        "Name: ", CurrentUser.FullName, Char(10),
        "Email: ", CurrentUser.Email, Char(10),
        "Phone: ", CurrentUser.Phone
    )
)

11. Converting Duration Strings to Time

Extract hours, minutes, seconds from ISO 8601 duration strings.

Code
With(
    Match("PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?"),
    Time(Value(hours), Value(minutes), Value(seconds))
)

12. Creating a New Order with Details

Handle parent-child database operations elegantly.

Code
With(
    { NewOrder: Patch(Orders, Defaults(Orders), { OrderStatus: "New" }) },
    ForAll(
        NewOrderDetails,
        Patch(
            OrderDetails,
            Defaults(OrderDetails),
            { OrderNumber: NewOrder, Quantity: Quantity, ProductID: ProductID }
        )
    )
)

13. Comparing Two Records from Different Sources

Check if two records match.

Code
With(
    { SpecificOrder: Lookup(Orders, OrderID = "Order123") },
    If(
        SpecificOrder.CustomerID = Gallery1.Selected.CustomerID &&
        SpecificOrder.OrderDate = Gallery1.Selected.OrderDate &&
        SpecificOrder.TotalAmount = Gallery1.Selected.TotalAmount,
        true,
        false
    )
)

14. Evaluating Process Status and Sending Emails

Conditional actions based on record status.

Code
With(
    { ProcessRecord: Lookup(Processes, ProcessID = "P123") },
    Switch(
        ProcessRecord.Status,
        "Completed", Office365.SendEmail(ProcessRecord.AssignedTo, "Process Completed", Concatenate("Process ", ProcessRecord.ProcessID, " has been completed"))
    )
)

15. Adding Checked Gallery Items to a Collection

Handle interactive UI selections.

Code
With(
    { CheckedItems: Filter(Gallery1.AllItems, Checkbox1.Value = true) },
    ForAll(
        CheckedItems,
        Collect(CollectedProducts, { ProductID: ProductID, ProductName: ProductName, Price: Price })
    )
)

✅Conclusion