Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges


Personnalisation based on AEP edge segmentation


Level 1



I'm implementing the following use case and I'm stuck with the AEP Edge segmentation.


The use case :

As a web visitor, browsing three different products pages should trigger a banner on any page of this web site.

The banner disappears as soon as the visitor clicks on it or buy a product, otherwise the banner is visible for 30 days.

The ecosystem I work with includes: AEP and Adobe Target Premium.


My approach is to detect distinct product pages browsed by the visitor, and provide them toward the XDM Experience Event based schema inside a property (string array type based) created for this purpose:



This array is filled with an alloy("sendEvent") call from a script included inside the <head> section by Target.

Checking some profile confirm the array is filled with up to three product page URL successfully:



Then I would like to create a realtime segmentation which detects when the XDM Event schema string array contains at least 3 entities in realtime. The idea being to reuse this segmentation on Adobe Target side as an audience to trigger the banner display.



However, on AEP, I cannot find any matching profile nor I can save my Edge based segment. Is this the right approach or am I missing something here?


Thank you to shed some light on this.


Kind regards,

1 Accepted Solution


Correct answer by

Since you keep modifying the Segment you may need to wait for the baseline to run.


"Once streaming evaluation has been enabled, a baseline must be created (after which the segment will always be up-to-date)."


You might try sending in new events to see if they qualify.

View solution in original post

8 Replies


Level 3

Hi @jean-philippe_8 , 

The logic sounds fine. One thing you could check is the time range you have provided. If you wanted to check for within the last 30 days you might want to change time frame condition to something like below: 


The time frame you selected might be checking for beyond one month. Depending on your implementation state it might not qualify any users to the segment.

Let us know if changing the time rule works for you. 



@jean-philippe_8 Your problem is two-fold:

  1. Your timeframe is too long if you want to do this on the Edge.
    1. You can only do a "Single event within a 24-hour time window
    2. "See
  2. Any Aggregation "At least 3" I believe also makes this not Edge.

Let me kick around some options.




I checked a few things:

  1. While the 24-hour is documented as non-Edge, I was able to build a longer lookback, so maybe not an issue?
  2. The Aggregation is still a problem. But, if you are open to exploring PQL and seeing if you can make a count() work and still be Edge, check this out:
    1. person.orders.storeId.distinct().count() > 1
    2. Yours would be more of a productpages.distinct().count() > 3
    4. Not sure if it will qualify as Edge, but since it is still one Event (vs your original is checking for multiple events)... maybe?



I couldn't stop thinking about this and tried another approach...

You can add an aggregation within an event for an Array and it will stay an Edge Segment


If we didn't care they were distinct pages we would be done.


But if you do and can't enforce uniqueness in your array on the client side:

  1. Go build in the UI using Aggregation
  2. Copy the PQL
    1. CHAIN(xEvent, timestamp, [C0: WHAT(true) COUNT(ALL) WHERE(C0.count() >= 3)])
  3. Modify the PQL and use the API, to see if it lets you do
    1. CHAIN(xEvent, timestamp, [C0: WHAT(true) COUNT(ALL) WHERE(C0.distinct().count() >= 3)])

Note: I do not know PQL, so you may have to do a lot of tweaking on the syntax.



Level 1

Hello Danny,


Thank you very much for taking the time to look into this problem! Much appreciated!

Just to clarify your last assumption: I guarantee the list of URL to be distinct/uniq inside the array so this is not an issue in this context.


I modified the segment using your idea about the aggregate function:

* The estimation does not return any profile neither (but this is just based on a sample after all ...)

* However, I might have missed a point, but whenever I add the aggregate function in the loop, I can not save my segmentation anymore, AEP complaining that I'm not fulfilling the Edge restriction ("The expression query type cannot be changed, expression eligibility is Batch, segment eligibility is Edge").


And to confirm what you said about the range, yes : without using the aggregation but keeping the Rolling range of 1 month, AEP accept to save it as an Edge segmentation. 🙂

As soon as the aggregation comes into play, the only way for me to save the segmentation is by limiting the range of time to 24 hours (which is sad as I wanted to rely on this segmentation to display the banner during one month if the banner wasn't clicked nor a product being purchased).

Do I have other options to manage this duration ? (I can work with profile scripts on Target side + using them into a local Targe audience, but we loose the AEP <-> Target integration this way ... 😕 )


But even if I restrict the date range to 24 hours with or without the aggregation my profile (updated today and confirmed with the profile preview inside AEP) does not pop out...

Even simplifying the segment reveal another strange error code upon Profile preview:


Could it be related with how the property has been defined inside the XDM schema ? ( type = String[] ) ... ?!?




I was able to get it to work:

  1. Check your Merge Profile is Edge Enabled
  2. Make sure you are counting on the Array, not the Event.  You are counting on the Event.
    1. Drag the array in and then change to Agg.
    2. Then drag in the "where" field in the same container




Level 1

Gorgerous! Thank you for your tenacity. By doing so the segment is still an Edge one and it can be saved.

I've checked the merge policy and confirm it is Edge enabled (and this is the one used by this segment of course).

However, the segment is still empty 😕 So I counter validated by creating another segment based on the Event related ECID matching both the alloy("getIdentity") feedback in the browser as well as the one being displayed in AEP in the profile section



... still an empty audience.



I must be missing something here but can not find out what ?!?

I event requested the profile event directly from AEP and found it so I don't see why the segment is still empty, even if I provide the correct ECID ???


Would you have any advices to find out what's going on here ?

Thank you for your time



Correct answer by

Since you keep modifying the Segment you may need to wait for the baseline to run.


"Once streaming evaluation has been enabled, a baseline must be created (after which the segment will always be up-to-date)."


You might try sending in new events to see if they qualify.