集合管理功能 collection-management-functions

運算式語言也會引入一組函式來查詢集合。

這些函式將於下文說明。 在下列範例中,讓我們使用包含集合的事件裝載:

                {
   "_experience":{
      "campaign":{
         "message":{
            "profile":{
               "pushNotificationTokens":[
                  {
                     "token":"token_1",
                     "application":{
                        "_id":"APP1",
                        "name":"MarltonMobileApp",
                        "version":"1.0"
                     }
                  },
                  {
                     "token":"token_2",
                     "application":{
                        "_id":"APP2",
                        "name":"MarketplaceApp",
                        "version":"1.0"
                     }
                  },
                  {
                     "token":"token_3",
                     "application":{
                        "_id":"APP3",
                        "name":"VendorApp",
                        "version":"2.0"
                     }
                  }
               ]
            }
         }
      }
   },
   "timestamp":"1536160728"
}

函式「all(<condition>)」

all ​函式使用布林運算式啟用指定集合上篩選的定義。

<listExpression>.all(<condition>)

例如,在所有應用程式使用者中,您可以透過IOS 13 (布林運算式「IOS 13==使用的應用程式」)取得使用者。 此函式的結果是篩選的清單,其中包含符合布林值運算式的專案(例如:應用程式使用者1、應用程式使用者34、應用程式使用者432)。

在資料Source條件活動中,您可以檢查​ all ​函式的結果是否為Null。 您也可以將此​ 所有 ​函式與其他函式(例如​ count)結合。 如需詳細資訊,請參閱資料Source條件活動

範例1:

我們要檢查使用者是否已安裝特定版本的應用程式。 對此,我們會取得與行動應用程式(1.0版)相關的所有推播通知權杖。接著,我們會使用​ count ​函式執行條件,以檢查傳回的權杖清單是否至少包含一個元素。

count(@event{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.all(currentEventField.application.version == "1.0").token}) > 0

結果為true。

範例2:

在此處,我們使用​ count ​函式來檢查集合中是否有推播通知權杖。

count(@event{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.all().token}) > 0

結果將會是true。

NOTE
當​ all() ​函式中的篩選條件為空白時,篩選器會傳回清單中的所有元素。 但是,若要計算集合的元素數目,不需要all函式。
count(@event{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.token})

運算式的結果是​ 3

範例3:

在此處,我們會檢查個人在過去24小時內是否未收到任何通訊。 我們會根據集合的兩個元素,使用兩個運算式,來篩選從ExperiencePlatform資料來源擷取的體驗事件集合。 特別是,會比較事件的時間戳記與​ nowWithDelta ​函式傳回的dateTime。

count(#{ExperiencePlatform.MarltonExperience.experienceevent.all(
   currentDataPackField.directMarketing.sends.value > 0 and
   currentDataPackField.timestamp > nowWithDelta(-1, "days")).timestamp}) == 0

如果沒有體驗事件符合兩個條件,則結果為true。

範例4:

在此處,我們想檢查個人在過去7天內是否至少啟動過一次應用程式,以便觸發推播通知,邀請他們啟動教學課程。

count(
 #{ExperiencePlatform.AnalyticsData.experienceevent.all(
 nowWithDelta(-7,"days") <= currentDataPackField.timestamp
 and currentDataPackField.application.firstLaunches.value > 0
)._id}) > 0
NOTE
currentEventField ​僅可在操控事件集合時使用,currentDataPackField ​在操控資料來源集合時使用,以及​ currentActionField ​在操控自訂動作回應集合時使用。
處理具有​ allfirst ​和​ last ​的集合時,我們會逐一在集合的每個元素上回圈。 currentEventFieldcurrentDataPackField ​和​ currentActionField ​對應到正在回圈的元素。

函式「first(<condition>)」和「last(<condition>)」

first ​和​ last ​函式也會在集合上啟用篩選的定義,同時傳回符合篩選的清單的第一個/最後一個元素。

<listExpression>.first(<condition>)

<listExpression>.last(<condition>)

範例1:

此運算式會傳回與版本為1.0的行動應用程式關聯的第一個推播通知權杖。

@event{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.first(currentEventField.application.version == "1.0").token

結果為「token_1」。

範例2:

此運算式會傳回與版本為1.0的行動應用程式相關聯的最後一個推播通知權杖。

@event{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.last(currentEventField.application.version == "1.0").token}

結果為「token_2」。

NOTE
體驗事件會以反向時間順序的集合形式從Adobe Experience Platform擷取,因此:
  • first ​函式將傳回最近的事件
  • last ​函式將傳回最舊的函式。

範例3:

我們會檢查第一個(最新)DMA ID為非零值的Adobe Analytics事件是否具有等於602的值。

#{ExperiencePlatform.AnalyticsProd_EvarsProps.experienceevent.first(
currentDataPackField.placeContext.geo.dmaID > 0).placeContext.geo.dmaID} == 602

函式"at(<index>)"

at ​函式可讓您根據索引來參照集合中的特定專案。
索引0是集合的第一個索引。

<listExpression>.at(<index>)

範例:

此運算式會傳回清單的第二個推播通知權杖。

@event{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.at(1).token}

結果為「token_2」。

其他範例

此運算式會根據SKU值傳回產品名稱。 這些產品的清單會包含在事件清單中,其條件為事件ID。

#{ExperiencePlatform.ExperienceEventFieldGroup.experienceevent.all(currentDataPackField._aepgdcdevenablement2.purchase_event.receipt_nbr == "10-337-4016").
_aepgdcdevenablement2.purchase_event.productListItems.all(currentDataPackField.SKU == "AB17 1234 1775 19DT B4DR 8HDK 762").name}

此運算式會擷取商務事件的產品清單中最後一個產品的名稱,其中事件型別為「productListAdds」,且總價大於或等於150。

 #{ExperiencePlatform.ExperienceEventFieldGroup.experienceevent.last(
currentDataPackField.eventType == "commerce.productListAdds").productListItems.last(currentDataPackField.priceTotal >= 150).name}
recommendation-more-help
b22c9c5d-9208-48f4-b874-1cefb8df4d76