Branching in a Formula Language
Because Power Fx formulas are single expressions rather than blocks of statements, branching has to happen inside the expression itself, and If and Switch are the two functions that make this possible. If(Condition, ThenResult, [Condition2, ThenResult2, ...], [DefaultResult]) evaluates conditions in order and returns the result tied to the first true one, falling through to an optional default if none match, while Switch(Value, Case1, Result1, [Case2, Result2, ...], [Default]) compares a single value against a series of cases for equality, which is more concise than a long If chain when every branch is checking the same variable.
Cricket analogy: If and Switch are the umpire's decision tree: If is like checking a sequence of different conditions (ball height, bat contact, pad position) in order for an LBW call, while Switch is like matching one single value — the signal shown — against a fixed table of meanings (out, four, six, no-ball).
If: Ordered Conditions
If evaluates its condition/result pairs strictly left to right and stops at the first true condition, so order matters — a broad condition placed before a narrower, more specific one will always win and make the specific branch unreachable. If also gracefully handles the 'no match' case: without a trailing default, If returns blank if no condition is true, which is why it's common practice to always include a final default value as a safety net, both for correctness and because it avoids a control unexpectedly showing blank text or an unhandled state.
Cricket analogy: If's left-to-right evaluation is like an umpire's LBW checklist that must be checked in order — if 'bat hit the ball' is checked first and is true, the review stops there and never reaches the pad-position check.
Switch: Matching One Value
Switch is preferable to a long If chain whenever every branch is testing the same single value for equality, since Switch(varStatus, "New", "blue", "Shipped", "green", "Cancelled", "red", "gray") is far more readable than the equivalent If(varStatus = "New", "blue", varStatus = "Shipped", "green", ...) repeating varStatus at every step. Switch only tests for exact equality, however — it cannot express range conditions like 'greater than 100', so any branching that depends on inequality, multiple different variables, or compound logic (And/Or) must use If instead.
Cricket analogy: Switch is like a scoreboard operator matching one single signal — the umpire's raised arm shape — against a fixed table of meanings, far cleaner than separately re-checking 'is it this signal, is it that signal' each time.
// If with ordered, specific-before-general conditions and a default
StatusLabel.Color = If(
varScore >= 90, Color.Green,
varScore >= 70, Color.Orange,
Color.Red // default: covers everything below 70
)
// Switch: cleaner than a long If chain for one variable's exact cases
BadgeIcon.Icon = Switch(
ThisItem.Status,
"New", Icon.Add,
"Shipped", Icon.CheckBadge,
"Cancelled", Icon.Cancel,
Icon.Blank // default for any unmatched status
)
// Compound condition — only If can express And/Or logic
SubmitBtn.DisplayMode = If(
IsBlank(TitleInput.Text) Or txtAmount.Text = "0",
DisplayMode.Disabled,
DisplayMode.Edit
)Always order If conditions from most specific to most general, and always include a trailing default value — both practices prevent an unreachable branch and prevent a control from silently rendering blank when no condition happens to match.
Switch only performs exact equality matching on a single value — it cannot express 'greater than', 'contains', or conditions spanning multiple variables. Trying to force a range check into Switch (e.g. matching numeric bands) requires an unwieldy workaround; If is the correct tool the moment the logic isn't pure equality on one value.
- If(Cond1, Result1, [Cond2, Result2, ...], [Default]) evaluates conditions in order, left to right.
- The first true condition in an If wins; later, more specific conditions can become unreachable if ordered wrong.
- Without a default, If returns blank when no condition is true — always add a trailing default.
- Switch(Value, Case1, Result1, [...], [Default]) matches one value against exact-equality cases.
- Switch is more readable than a long If chain when every branch tests the same variable for equality.
- Switch cannot express inequalities, ranges, or compound And/Or logic — use If for those.
- Order matters in If; order does not affect correctness in Switch since cases are mutually exclusive by value.
Practice what you learned
1. In If(cond1, r1, cond2, r2, default), what happens if both cond1 and cond2 are true?
2. Why might placing a broad condition before a specific one in an If cause a bug?
3. When is Switch preferable to a chain of If conditions?
4. What can Switch NOT express that If can?
5. What does If return if none of its conditions are true and no default is supplied?
Was this page helpful?
You May Also Like
Power Fx Basics
Power Fx is the Excel-like, declarative formula language that powers every property, button, and calculation in a Power Apps canvas app.
Variables: Set and UpdateContext
Power Apps has two kinds of variables — global, created with Set, and screen-scoped context variables, created with UpdateContext — each suited to different situations.
Error Handling with IfError
IfError lets a Power Fx formula catch a runtime error and substitute a fallback value instead of letting the error propagate and break the app's UI.
Business Rules
Apply no-code logic in Dataverse tables to set field values, show warnings, and enforce validation without writing JavaScript.
Related Reading
Related Study Notes in Microsoft Technologies
Browse all study notesWindows 10 / UWP Development Study Notes
.NET · 30 topics
Microsoft TechnologiesWindows Batch Scripting Study Notes
Batch · 30 topics
Microsoft TechnologiesMFC (Microsoft Foundation Classes) Study Notes
C++ · 30 topics
Microsoft TechnologiesSilverlight Study Notes
.NET · 30 topics
Microsoft TechnologiesXAML Study Notes
.NET · 30 topics
Microsoft TechnologiesWPF (Windows Presentation Foundation) Study Notes
.NET · 30 topics