100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Low-Code

Power Apps Quick Reference

A condensed cheat sheet of the Power Fx functions, variable patterns, and delegation notes used most often when building canvas apps.

Practical Power AppsBeginner7 min readJul 10, 2026
Analogies

Power Apps Quick Reference

This is a condensed reference for the Power Fx functions and patterns that come up in nearly every canvas app: navigation, data functions, string/table manipulation, and variable/state management. It's meant to be scanned, not read start to finish — use it the way you'd use a syntax cheat sheet while actually building a screen, jumping straight to the function you half-remember instead of relearning the whole language from scratch.

🏏

Cricket analogy: It is like a fielding captain glancing at a laminated match-situation card taped to the stumps for D/L par-score calculations instead of doing the math from memory under pressure.

Navigate() moves between screens and optionally applies a transition (Fade, CoverRight, None) plus an optional context-variable record passed as the third argument, which is the standard way to send data to the destination screen without relying on a global variable. Back() returns to the previous screen in the navigation stack, and App.ActiveScreen lets a formula reference the currently displayed screen by name, useful for conditional logic that needs to know where the user currently is.

🏏

Cricket analogy: It is like a third umpire's review process moving through defined stages, ball-tracking, snicko, replay, each stage receiving exactly the context it needs from the previous one rather than starting from scratch.

text
// Navigation
Navigate(scr_OrderDetail, ScreenTransition.Fade, {OrderID: gal_Orders.Selected.OrderID});
Back();
App.ActiveScreen.Name

// Data functions
LookUp(Orders, OrderID = 1001)
Filter(Orders, Status = "Open")
SortByColumns(Orders, "OrderDate", SortOrder.Descending)
Patch(Orders, LookUp(Orders, OrderID = 1001), {Status: "Shipped"})
Remove(Orders, LookUp(Orders, OrderID = 1001))
Collect(colOrders, {OrderID: 1002, Status: "New"})

// String / table functions
Concatenate("Order #", Text(1001))
Split("a,b,c", ",")
Text(Now(), "mm/dd/yyyy")
With({Total: Sum(colOrders, Amount)}, Text(Total, "$#,##0.00"))

// Variables
Set(varUserRole, "Manager");                 // global
UpdateContext({locIsEditing: true});           // screen-scoped

Data Functions and Delegation Notes

LookUp() returns the first matching record for a condition and is delegable when the condition uses supported comparisons, while Filter() returns every matching record and is the workhorse for building gallery data sources; both delegate only as far as the connector allows, so a Filter() combining a delegable and a non-delegable condition still triggers the warning for the whole expression. Patch() updates or creates a record and accepts a table of changes for bulk operations, Collect()/ClearCollect() build local collections in client memory, and Remove()/RemoveIf() delete records — RemoveIf() in particular is convenient but non-delegable on many sources, so it's best used only on already-filtered, small result sets.

🏏

Cricket analogy: It is like the difference between an umpire checking just one specific delivery (LookUp) versus reviewing an entire over's worth of deliveries for no-balls (Filter), each request scoped very differently.

Quick delegation rule of thumb: comparison operators (=, <>, <, >), StartsWith, and basic AND/OR generally delegate across most connectors; Len(), Left()/Right()/Mid() outside of StartsWith/EndsWith, and RemoveIf() are common non-delegable culprits worth double-checking against your specific data source.

String, Table, and Common Utility Functions

Concatenate() and the & operator join strings, Text() formats numbers/dates/booleans into display strings using format codes, and With() lets you compute an intermediate value once (like a Sum() total) and reuse it within a single formula without a separate Set() call polluting global state. For working with tables, ForAll() iterates and can build a new table by transforming each row, AddColumns() appends a computed column to an existing table without mutating the source, and Coalesce() returns the first non-blank value from a list of candidates, which is a clean way to supply a default when a lookup might return blank.

🏏

Cricket analogy: It is like a scorer combining runs, extras, and wickets into a single running total line (Concatenate) versus building an entirely new derived stats column for strike rate per over (AddColumns) without touching the original ball-by-ball log.

ForAll() building large derived tables and RemoveIf() on non-delegable conditions are two of the most common causes of a formula silently only processing a partial dataset or running far slower than expected. When either appears in a formula touching a large data source, double check delegation before assuming the logic itself is correct.

  • Navigate() moves screens with an optional transition and context-variable payload; Back() returns to the prior screen.
  • LookUp() returns one matching record; Filter() returns all matches; both only delegate as far as the connector supports.
  • Patch() creates/updates records; Collect()/ClearCollect() build client-side collections; Remove()/RemoveIf() delete records.
  • RemoveIf() is convenient but frequently non-delegable — best reserved for small, already-filtered result sets.
  • Text() formats values for display; With() computes a reusable intermediate value without polluting global state.
  • ForAll() iterates and can build a transformed table; AddColumns() appends a computed column without mutating the source.
  • Coalesce() returns the first non-blank value from a candidate list, a clean pattern for supplying defaults.

Practice what you learned

Was this page helpful?

Topics covered

#LowCode#PowerAppsStudyNotes#MicrosoftTechnologies#PowerAppsQuickReference#Power#Apps#Quick#Reference#StudyNotes#SkillVeris