When having Marketing Cloud Connect in place between SF/SFMC, the Attribute Group connecting all synchronised SF objects is automatically built and set in place.

By using Journey Builder Salesforce Event as the Entry Event, the Data Extension is automatically created and linked in Sales & Service Cloud Attribute Group, by linking ContactKey with the Data Extension Subscriber Key (in this case - PersonContactID) so the mapping appears to be in place.

Journey is configured on allowing re-entry at any time.

There is a 30 minute wait-activity before Decision Split.

When using Decision Splits and configuring attribute-to-attribute comparison custom object record-ID from Entry DE with Contact Data path record ID, it will never evaluate correctly.

Current scenario:

Custom record "Purchase" is created in SF > if it matches criteria > linked PersonAccount is added to the Journey (by PersonContactID)

Since one Account can have several "Purchase" records > decision split is configured to map the ID attribute between Entry Data Extension and Contact Data path to check the Salesforce record > the Contact should then go to corresponding Decision Split path.

Contact Data path: Contact Data > SF attribute group (created by Connector) > Contact_Salesforce > Account_Salesforce > Purchase_Salesforce > PurchaseID

Is there a step I'm missing? By this question and official documentation it should work this way.

As all is done with Salesforce Data (entry and decision splits) there should be no need to manually create any Attribute Groups.

  • Is there a one-to-many relationship between PersonContactID and the number of purchases they can make? Commented Apr 18, 2019 at 13:42
  • Yes - one PersonAccount can have any number of Purchases linked to it. Here I emphasize that the relationship exists between the Account and Purchase record, not Contact and Purchase record. Which is why the PersonContactID field is taken from the Account object.
    – Rain
    Commented Apr 18, 2019 at 13:45
  • This may be relevant: salesforce.stackexchange.com/questions/230318/… Commented Apr 18, 2019 at 13:51

2 Answers 2


One-to-many relationships do not work well with the decision split functionality in Journey Builder and quite a bit of custom development effort is necessary in order to get this to work.

Subscriber Key and Contact Key

A couple of work-arounds:

  1. Use synchronized data extensions and query the purchase information. If you need to find a specific purchase or any purchase, you can populate a boolean field from the query to determine that in the data extension. Since this is person accounts, you'll need to join Account and Contacts objects along with Purchase data
  2. Create a custom field in SF that determines if the purchase has been made on a 1:1 relationship between PersonContactId and purchase. Continue to use Salesforce Data in your journey and decision split.
  • On the second approach, would a formula containing the PersonContactID on the Purchase record work? Even though there is a lookup on the Purchase record to Account which has the PersonContactID field available.
    – Rain
    Commented Apr 18, 2019 at 14:17
  • Wouldn't it just be a custom record on the Contact and brought up to the Account record? i.e. Account.Purchase_Made__pc for a field called "Purchase Made" on the contact record Commented Apr 18, 2019 at 16:18
  • You should not use a formula field as changed values will only sync to marketing cloud when some other field is updated and your criteria might be fulfilled without marketing cloud knowing. I had to learn the hard way... This behaviour is documented here: help.salesforce.com/… Commented Apr 18, 2019 at 16:59

Got it resolved.

In Decision Splits where one would like to use most up to date data from CRM tables, on on-to-many scenarios (like Account having many Case records) then all you need to do is ..

  • Use Contact Data Path first in the Decision Split.

  • Contact Data > Path to related record > Record ID = Journey Data > related Record ID.

For whatever reason it doesn't work the other way around (Journey Data ID = Contact Data ID) but it's pefectly fine when the ID comes from the Contact Data path.

In official documentation there actually is an article that mentions this correctly - How to leverage the default relationships within the system defined Synchronized Data Extension Attribute Group and create custom relationships using Synchronized Data Extensions

If the Journey is passing subscribers who are identified by the LeadID, then when selecting an 'Attribute Path' for a Decision Split, it is important to begin with the 'Lead_Salesforce' object after selecting the system generated Attribute Group within the Decision Split configuration. Similarly, if records passing through a Journey are identified by their ContactID, then the 'Contact_Salesforce' object would be appropriate.

Yet there is documented example scenario on (custom) Surveys, that would actually not work - Linked Data Extensions in Journey Builder

Sentiment (from Survey Respondents data extension linked in Contact Builder) = Positive AND SurveyID (from Journey Data) = SurveyID (from Survey Respondents data extension)

  • I've tested this and the journey is using the most up-to-date Contact Data (the one automatically created in Data Designer > Sales and Service Cloud) but still not reflecting any changes in SalesCloud. In the documentation, it says it should work under "Decision Split Use Case" (help.salesforce.com/…). It seems like querying Synch DEs is still the more reliable method at least in my case. Commented Aug 23, 2019 at 16:50
  • Disregard my last comment. Turns out it's another issue: salesforce.stackexchange.com/questions/274748/… Commented Aug 23, 2019 at 18:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .