Expand my Community achievements bar.

SOLVED

Profile Split

Avatar

Level 3

We're in a bit of a time crunch so would appreciate a quick response. 

 

We have a profile in AEP that has an ID (userID) and in that profile we have an array of all the accounts the user has. We've built a segment in AEP to qualify profiles based on certain conditions and we'd like to use this segment in AJO for journeys. However, we'd like to split the profiles that qualified for the segments for each them to have just one account value from the array. Is there a way to do this in AEP or AJO? 

 

An example is:

 

Current Scenario

profile1 -> userID1, [accountID1, accountID2, accountID3] 

 

Desired Outcome

Each of the profiles should qualify for the journey as shown below:

profile1 -> userID1, accountID1

profile2 -> userID1, accountID2

profile3 -> userID1, accountID3

 

 

Topics

Topics help categorize Community content and increase your ability to discover relevant content.

1 Accepted Solution

Avatar

Correct answer by
Employee

@trojan_horse 

Assumption here is userID1 is an identity and a user can have a maximum of 'x' accounts in the array.

 

Profiles cannot qualify for each accountId in the array. 

 

Instead, you will have to consider that there will always be a maximum of 'x' accounts in the array and process each account Id in the array. Basically, check if account Id at index 0 exists, then proceed (say message send out for accountId 0) and similarly, check if account Id at index 1 exists, then proceed until you reach the 'x' limit

 

Example:-

Account Id at index o

getListItem(#{ExperiencePlatform.xxxfieldGroup.profile.yyy.accounts.accountId},0) != null

View solution in original post

9 Replies

Avatar

Community Advisor

@trojan_horse, Yes, you can use collection management functions within condition activity to split the profiles.

Thanks, Sathees

Avatar

Level 3

@SatheeskannaK I did look at the collection management functions, but would really appreciate if you could provide an example of how this would work given the example scenario below: 

 

profile1 -> userID1, [accountID1, accountID2, accountID3] 

profile2 -> userID2, [accountID4, accountID5, accountID6]

 

The journey checks for each accountID value and I'd like accountID1, accountID2, accountID3 to qualify to the journey separately for userID1 and the same for userID2. 

 

Avatar

Community Advisor

@trojan_horse, Maybe you can use getListItem function here. Here is an example based on your structure,

getListItem(#{ExperiencePlatform.ProfileFieldGroup.profile.yyyy.accountID},1)== 'accountID2'. --> Within condition activity if I use this function it will check profiles with accountID array position 1 value having accountID2 or not.

Thanks, Sathees

Avatar

Level 3

@SatheeskannaK  This may not work as we wouldn't know the length of the account array before-hand. Some profiles may have one accountID value while some may have more that one. Also the values of accoundID won't be the same for every profile

Avatar

Level 2

You can try 'in' function in the expression editor along with OR operator

 

in('accountID1',#{ExperiencePlatform.ProfileFieldGroup.profile.yyyy.accountID}) or in('accountID2',#{ExperiencePlatform.ProfileFieldGroup.profile.yyyy.accountID}) or in('accountID3',#{ExperiencePlatform.ProfileFieldGroup.profile.yyyy.accountID})

Avatar

Correct answer by
Employee

@trojan_horse 

Assumption here is userID1 is an identity and a user can have a maximum of 'x' accounts in the array.

 

Profiles cannot qualify for each accountId in the array. 

 

Instead, you will have to consider that there will always be a maximum of 'x' accounts in the array and process each account Id in the array. Basically, check if account Id at index 0 exists, then proceed (say message send out for accountId 0) and similarly, check if account Id at index 1 exists, then proceed until you reach the 'x' limit

 

Example:-

Account Id at index o

getListItem(#{ExperiencePlatform.xxxfieldGroup.profile.yyy.accounts.accountId},0) != null

Avatar

Level 3

How would we make the journey to check for every index in the same run? Let's say the condition checks if accountID at index 0 exists and send an email if it does and the journey ends. How would we make the journey check for index 1,2,3...  trigger an email if the values exist in the same run?

Avatar

Community Advisor

@trojan_horse, As dugganab mentioned, You can have the same condition repeated for other indexes. 

getListItem(#{ExperiencePlatform.xxxfieldGroup.profile.yyy.accounts.accountId},0) != null or getListItem(#{ExperiencePlatform.xxxfieldGroup.profile.yyy.accounts.accountId},1) != null or getListItem(#{ExperiencePlatform.xxxfieldGroup.profile.yyy.accounts.accountId},2) != null

Thanks, Sathees

Avatar

Employee

@trojan_horse on the following lines, where each index would be checked if it exists and then accordingly, an email would be sent out

1) Journey starts with Audience Qualification

2) Condition - check if account Id at index 0 exists using the expression shared in the earlier thread

3) Email for account Id 0 

4) Condition - check if account Id at index 1 exists using the expression shared in the earlier thread

5) Email for account Id 1

6) So on and so forth until the max limit 'x' is reached which needs to be mutually agreed upon with the concerned stakeholders