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

Conditional Logic with If and Switch

If and Switch are Power Fx's two branching functions, letting formulas return different values or take different actions depending on conditions.

Power Fx FormulasBeginner7 min readJul 10, 2026
Analogies

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.

powerfx
// 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

Was this page helpful?

Topics covered

#LowCode#PowerAppsStudyNotes#MicrosoftTechnologies#ConditionalLogicWithIfAndSwitch#Conditional#Logic#Switch#Branching#StudyNotes#SkillVeris