コレクション管理機能 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 を使用しているユーザーを取得できます(ブール式「app used == IOS 13」)。 この関数の結果は、ブール式に一致する項目(例:アプリユーザー 1、アプリユーザー 34、アプリユーザー 432)を含んだフィルター済みリストになります。

「データソースの条件」アクティビティでは、all 関数の結果が null かどうかを確認できます。また、この all 関数を、count 関数などの他の関数と組み合わせることができます。詳しくは、「データソースの条件」アクティビティを参照してください。

例 1:

ユーザーが特定のバージョンのアプリケーションをインストールしてあるかどうかを確認します。この目的のために、バージョンが 1.0 のモバイルアプリケーションに関連付けられたすべてのプッシュ通知トークンを取得します。その後、count 関数で条件分けをして、返されたトークンリストに少なくとも 1 つの要素が含まれているかどうかを確認します。

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 データソースから取得したエクスペリエンスイベントのコレクションを、コレクションの 2 つの要素に基づく 2 つの式を使用してフィルタリングします。特に、イベントのタイムスタンプを、nowWithDelta 関数から返される日時と比較します。

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

2 つの条件に一致するエクスペリエンスイベントがない場合、結果は true になります。

例 4:

ここでは、個人が過去 7 日間に少なくとも 1 回アプリケーションを起動したかどうかを確認します。例えば、チュートリアルを開始するよう招待するプッシュ通知をトリガーするためです。

count(
 #{ExperiencePlatform.AnalyticsData.experienceevent.all(
 nowWithDelta(-7,"days") <= currentDataPackField.timestamp
 and currentDataPackField.application.firstLaunches.value > 0
)._id}) > 0
NOTE
currentEventField はイベントコレクションを操作する場合、currentDataPackField はデータソースコレクションを操作する場合、currentActionField はカスタムアクションの応答コレクションを操作する場合にのみ使用できます。
allfirstlast でコレクションを処理する場合、コレクションの各要素を 1 つずつループします。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>)

例:

この式は、リストの 2 番目のプッシュ通知トークンを返します。

@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