Introduction
This article walks through a few scenarios of how list properties behave within Mixpanel. The examples used here are from the Insights report, but the principles of how filter and breakdowns work with list properties remain the same across reports.
Data
Let's assume an e-commerce platform has these 3 events:
- Event 1: PurchaseCompleted
- List of ProductIDs ["P1","P2","P4"]
- Event 2: PurchaseCompleted
- List of ProductIDs ["P2","P3","P4"]
- Event 3: PurchaseCompleted
- List of ProductIDs ["P3","P4"]
Now let's assume that "List of ProductIDs" is mapped to a lookup table (new feature in closed beta) called Products which looks like this:
ProductID | Category | Price |
P1 | Clothing - pants | 100 |
P2 | Clothing - shirt | 54 |
P3 | Shoes | 109 |
P4 | Electronics - music | 199 |
Use-cases
Breakdown
- Breakdown a list property
- Question: TOTAL of PurchaseCompleted broken down by "List of ProductIDs"
List of ProductIDs Total P1 1 P2 2 P3 2 P4 3 - What's going on here? When breaking down, each of the list's contents is evaluated as a single item. So for example, P2 is present in Event 1 and Event 2, so the TOTAL (PurchaseCompleted event) where "P2" is present is 2.
- Question: TOTAL of PurchaseCompleted broken down by "List of ProductIDs"
- Breakdown by lookup profile property that's joined to a list property
- Question: TOTAL of PurchaseCompleted broken down by "List of ProductIDs" → Category
List of ProductIDs Total Clothing - pants 1 Clothing - shirt 2 Shoes 2 Electronics - music 3
- Question: TOTAL of PurchaseCompleted broken down by "List of ProductIDs" → Category
- Breakdown by lookup profile property that's joined to a list property AND by the list property itself
- Question: TOTAL of PurchaseCompleted broken down by "List of ProductIDs" → Category AND "List of ProductIDs" (2 breakdowns applied)
List of ProductIDs.Category List of ProductIDs Total Clothing - pants P1 1 P2 1 P4 1 Clothing - shirt P1 1 P2 2 P3 1 P4 2 Shoes P2 1 P3 2 P4 2 Electronics - music P1 1 P2 2 P3 2
P4 3
What's going on here? For each breakdown value, Mixpanel recomputes the list breakdown. So for example, TOTAL (PurchaseCompleted) with "List of ProductIDs" → Category = "Shoes" should get us Event 2 and Event 3:
- Event 2: PurchaseCompleted
- List of ProductIDs ["P2","P3","P4"]
- Event 3: PurchaseCompleted
- List of ProductIDs ["P3","P4"]
- When these 2 events are broken down by "List of ProductIDs", we get these results for "Shoes"(ProductID = P3):
- P2: 1
- P4: 2
- Question: TOTAL of PurchaseCompleted broken down by "List of ProductIDs" → Category AND "List of ProductIDs" (2 breakdowns applied)
Filter
- Filter by list property
- Question: TOTAL of PurchaseCompleted filtered by "List of ProductIDs" contains "P1"
PurchaseCompleted - TOTAL: 1
What's going on here? Filtering in lists works to filter down events when the filtered value matches ANY list item in the list property. So in this example, the only event in which "List of ProductIDs" has "P1" present even once is Event 1, so the total event count for this filter is 1.
- Filter by list property and broken down by list property
- Question: TOTAL of PurchaseCompleted filtered by "List of ProductIDs" contains "P1", broken down by "List of ProductIDs"
List of ProductIDs Total P1 1 P2 1 P4 1
- Question: TOTAL of PurchaseCompleted filtered by "List of ProductIDs" contains "P1", broken down by "List of ProductIDs"
- Filter by lookup profile property that's joined to a list property and then broken down by list property
- Question: TOTAL of PurchaseCompleted filtered by "List of ProductIDs" → Category contains "Shoes", broken down by "List of ProductIDs"
List of ProductIDs Total P2 1 P3 2 P4 2 - Event 2: PurchaseCompleted
- List of ProductIDs ["P2","P3","P4"]
- Event 3: PurchaseCompleted
- List of ProductIDs ["P3","P4"]
- When these 2 events are broken down by "List of ProductIDs", Mixpanel evaluates each list item individually, thereby getting us P2: 1 (1 event), P3: 2(2 events) and P4: 2 (2 events).
- Question: TOTAL of PurchaseCompleted filtered by "List of ProductIDs" → Category contains "Shoes", broken down by "List of ProductIDs"
- Filter by lookup profile property that's joined to a list property (with multiple matching values) and then broken down by list property
- Question: TOTAL of PurchaseCompleted filtered by "List of ProductIDs" → Category contains "Clothing" (note: both P1 and P2 match this), broken down by "List of ProductIDs"
-
List of ProductIDs Total P1 1 P2 2 P3 1 P4 2 -
What's going on here? "List of ProductIDs" → Category contains "Clothing" returns 2 products: P1 and P2. Therefore, what this operation is doing is filtering down to all the events that contain EITHER Clothing - pants or Clothing - shirt (Category mapping for P1 and P2 respectively) as ANY of the values in "List of ProductDs", and that gives us 2 events:
- Event 1: PurchaseCompleted
- List of ProductIDs ["P1","P2","P4"]
- Event 2: PurchaseCompleted
- List of ProductIDs ["P2","P3","P4"]
Therefore, when those 2 events are broken down by "List of ProductIDs", Mixpanel evaluates each item of the list individually and we end up getting P1: 1, P2: 2, P3: 1, P4: 2.
- Event 1: PurchaseCompleted
-
Filter by lookup profile property that's joined to a list property (numeric filter) and then broken down by list property
-
Question: TOTAL of PurchaseCompleted filtered by "List of ProductIDs" → Price (number) is less than 100, broken down by "List of ProductIDs"
-
List of ProductIDs Total P1 1 P2 2 P3 1 P4 2 -
What's going on here? "List of ProductIDs" → Price < 100 only matches 1 product, and that is P2. Therefore, what this operation is doing is filtering down to all the events that contain P 2 as ANY of the values in "List of ProductDs", and that gives us 2 events:
- Event 1: PurchaseCompleted
- List of ProductIDs ["P1","P2","P4"]
- Event 2: PurchaseCompleted
- List of ProductIDs ["P2","P3","P4"]
Therefore, when those 2 events are broken down by "List of ProductIDs", Mixpanel evaluates each item of the list individually and we end up getting P1: 1, P2: 2, P3: 1, P4: 2.
- Event 1: PurchaseCompleted
-
Comments
Please sign in to leave a comment.