Almanac

Consultant-focused KB for Microsoft Dynamics 365 Customer Insights – Journeys (formerly Marketing): implementation notes, gotchas, and configuration decisions beyond the official docs — across real-time journeys, segments, email and SMS marketing, event management, lead scoring, Copilot, analytics, and administration.

feature-journey-attribute-vs-ifthen-branches.mdv1 · history
CurrentApplies to Real-time journeysUpdated last monthSource Microsoft Learn ↗

What it does

Journeys split two ways. An attribute branch reads data the moment the customer arrives at the tile and sends them down one of several paths. An if/then branch — the wait-for-trigger tile — pauses and waits to see whether something happens within a time limit, then splits two ways on the answer.

Key facts

  • Attribute branches evaluate on arrival, against what is true right then. If/then branches evaluate over a window, against what happens next.
  • Attribute branches support multiple paths. If/then branches are strictly yes/no.
  • An attribute branch can read three sources: profile attributes of the journey audience, membership of a segment, and attributes carried on a trigger used in the journey.
  • Trigger attributes are only available to an attribute branch if that trigger was used at journey start or on an upstream wait-for-trigger tile. You cannot read a trigger the customer never passed through.
  • Segment membership on an attribute branch is checked at the instant the customer reaches the tile, not continuously.
  • Date attributes support relative and partial formats, which is how birthday and anniversary branching works — the branch resolves against the date the customer arrives, not the date the journey was published.
  • If/then branches wait on message interactions (opened, clicked and channel equivalents), on segment membership, or on a trigger attribute reaching a specific date and time.
  • If/then timeouts are capped at 90 days, same as every other wait in the product.
  • Multi-interaction branching exists as a separate capability for splitting on which of several interactions occurred, rather than one yes/no on a single interaction.
  • The audience split tile is a third, unrelated thing: it divides people by percentage or fixed number for A/B purposes, not by any attribute.

When to use / skip

The rule that holds up: attribute branch for what has already happened, if/then for what you hope will happen. Segment membership, opportunity stage, country, language, whether the case was resolved on first contact — attribute branch. Whether they opened the email, whether they registered within 48 hours, whether they bought — if/then.

Where consultants go wrong is using an attribute branch for behaviour, because the data does eventually land in Dataverse. It works, in the sense that it produces a path, but it evaluates once, on arrival, and if the record hasn't been written yet everyone goes down the no path. You then add a plain wait tile in front of it to "give it time", and you have built a worse if/then branch with more moving parts.

The reverse mistake is less common but more expensive: an if/then branch waiting on something that already happened before the customer entered. It waits the full timeout and everyone lands on no.

Configuration decisions

  • For each split: is the condition historical state or future behaviour? That single question picks the tile.
  • How many paths the attribute branch needs, and what the fall-through path does for people matching none of the conditions.
  • Which trigger attributes need to be available downstream, since that constrains where the trigger has to appear in the flow.
  • Whether segment-based branching is fast enough given the segment's refresh cadence, or whether a profile attribute would be more reliable.
  • Timeout values on every if/then branch, and whether the no path is a genuine alternative treatment or a quiet exit.
  • Whether a split is really a branch at all, or whether conditional content inside a single email would do the same job with less journey to maintain.

Gotchas

  • Attribute branches read data at the moment of arrival. Data written a second later is invisible to that customer, forever, on that journey run.
  • People matching no condition on a multi-path attribute branch need somewhere to go. Leave that path empty and they end the journey silently, which then shows up as unexplained drop-off in analytics.
  • Segment membership branching lags segment refresh. A customer whose data changed an hour ago may still branch on their old membership.
  • Adding or changing a branch condition on a live journey is a major edit — it creates a new version, and people already in flight keep the old logic.
  • Nested branches multiply the paths you have to test. Four levels of two-way branching is sixteen combinations, and journey previews will not walk them for you.
  • Branching on "email opened" inherits every accuracy problem of open tracking. Image-proxying mail clients register opens nobody performed.

Consultant notes

  • Make the client articulate each branch as a sentence starting "if the customer has already…" or "if the customer does…". The wording picks the tile and settles the argument in the room.
  • Demo the birthday case with a relative date attribute branch. It is the clearest illustration that branches evaluate on arrival, and clients remember it.
  • Push back on journeys with more than three levels of branching. Two shorter journeys joined by a trigger are almost always easier to test, change and read in analytics.
  • Before go-live, check every branch has a populated default or no path, and that the totals in analytics reconcile to journey entries.
  • If the split only changes copy rather than timing or channel, move it into conditional content and delete the branch. Fewer paths, same outcome.

Worth revisiting once multi-interaction branching matures, or if attribute branches gain a re-evaluation option.

Was this accurate?