Recap, and the first deep dive
Three sessions in, you have the general engine: build a tree (b1), name its shape (b2), run the diagnosis playbook with leading indicators and baselines (b3). Now we specialise. Ecommerce is the ideal first domain because its top line - GMV - is a clean, deep, multiplicative tree that every other domain borrows from. Get this one into your hands and marketing (b5), branding (b6), and the rest will feel familiar. Today the tree goes two levels deep and the diagnosis gets specific.
The full GMV tree, two levels deep 7 min live
In b1 the GMV tree was one level: Traffic x Conversion x AOV. That is enough to name a driver, but not to route a fix. So we go deeper. Traffic is really a sum of acquisition channels - SEO + Paid + Direct + Email. AOV is really a product - Units-per-order x Price-per-unit. Now a drop lands on "Paid traffic" or "Price per unit", not just "Traffic" or "AOV" - a branch a single team owns and can act on this afternoon.
LiveWhy two levels beats one3 min▶
A one-level tree tells you "traffic fell". A two-level tree tells you "Paid traffic fell while SEO, Direct, and Email held" - which is a different meeting, a different owner, and a different fix. Notice the tree nests the patterns from b2: the root is multiplicative, but Traffic underneath it is additive (a sum of channels) and AOV is multiplicative again (units x price). Real trees are patterns stacked inside patterns.
- Root ( x ): GMV = Traffic x Conversion x AOV. A percentage move in any child passes through.
- Traffic ( + ): a sum of channels. A drop is usually one channel dying; read it by each channel's weight.
- AOV ( x ): Units-per-order x Price-per-unit. Discounting hits price; smaller baskets hit units.
The "traffic is down" that was really one channel. A store panicked over a 12% traffic dip and nearly cut its whole marketing budget. The two-level tree showed Paid alone collapsed - a broken ad account - while organic channels were flat. The fix was a billing fix, not a strategy pivot. One level would have hidden it.
{
"unit": "$",
"root": {
"label": "GMV", "op": "x",
"children": [
{ "label": "Traffic", "op": "+", "children": [
{ "label": "SEO", "value": 52000, "unit": "visits" },
{ "label": "Paid", "value": 38000, "unit": "visits" },
{ "label": "Direct", "value": 20000, "unit": "visits" },
{ "label": "Email", "value": 10000, "unit": "visits" }
] },
{ "label": "Conversion", "value": 0.028, "pct": true },
{ "label": "AOV", "op": "x", "children": [
{ "label": "Units per order", "value": 2, "unit": "units" },
{ "label": "Price per unit", "value": 31, "unit": "$" }
] }
]
}
}
Leading vs lagging in ecommerce 5 min live
GMV is the ultimate lagging number - it lands at the end. Near the leaves live the early warnings: add-to-cart rate and channel traffic move before GMV, so a dip there is your reaction time. Refunds, by contrast, lag GMV - they show up weeks after the sale. Steer by the leading leaves; report the lagging root. The deeper your ecommerce tree, the earlier the signal you can act on.
LiveWhich ecommerce drivers lead, which lag3 min▶
Map every driver on the lead-lag axis and you know which to watch daily and which to report monthly. Simulate a drop on the tree above to feel it: knock down Paid traffic and GMV follows - but in the real world the traffic dip was visible a week earlier, if anyone was watching the leading leaf.
- Leading: ad impressions, sessions, add-to-cart rate. Move first, warn early, watch daily.
- Lagging: GMV, refunds, repeat-purchase rate. Land late, report on a cadence.
- The skill: hang a leading indicator on each branch. When Paid traffic is the branch, its leading leaf is ad spend and impressions - watch those, not GMV, for early warning.
The three common ecommerce drops 5 min live
Almost every ecommerce GMV drop is one of three stories, and each maps to a specific branch of the tree. Learn the map and diagnosis starts before you open the data: the symptom already tells you which branch to walk to. This is the payoff of a two-level tree - the shape of the fall names the cause.
LiveSymptom to branch: the ecommerce cheat map3 min▶
Three drops, three branches. Notice each drop has a signature pattern from b2 - a channel dying is an additive failure inside Traffic; a broken checkout is a leaf failure at Conversion; discount erosion is a leaf failure inside the AOV product.
| Symptom | Tree branch | Pattern |
|---|---|---|
| A channel dies (ad account breaks, SEO update hits) | Traffic -> one channel leaf | Additive: one part falls, others hold |
| Checkout breaks (new bug, slow page, payment error) | Conversion leaf | Multiplicative: the rate leaf drops |
| Discounting erodes basket value | AOV -> Price-per-unit leaf | Multiplicative: the value leaf drops |
Diagnose a GMV drop live ★ 12 min · everyone builds
The full loop on the deep tree. Simulate a drop, read the coral path down to the exact leaf, then confirm the fall in SQL by segmenting revenue by channel. Tree says which branch; SQL says which slice - and now the branch is specific enough to route the fix to one team.
{
"unit": "$",
"root": {
"label": "GMV", "op": "x",
"children": [
{ "label": "Traffic", "op": "+", "children": [
{ "label": "SEO", "value": 52000, "unit": "visits" },
{ "label": "Paid", "value": 38000, "unit": "visits" },
{ "label": "Direct", "value": 20000, "unit": "visits" },
{ "label": "Email", "value": 10000, "unit": "visits" }
] },
{ "label": "Conversion", "value": 0.028, "pct": true },
{ "label": "AOV", "op": "x", "children": [
{ "label": "Units per order", "value": 2, "unit": "units" },
{ "label": "Price per unit", "value": 31, "unit": "$" }
] }
]
}
}
SELECT o.channel,
COUNT(DISTINCT o.order_id) AS orders,
ROUND(SUM(oi.quantity * oi.unit_price), 0) AS revenue
FROM orders o
JOIN order_items oi ON o.order_id = oi.order_id
WHERE o.status = 'completed'
GROUP BY o.channel
ORDER BY revenue DESC;
Simulate a drop and trace the coral leaf. Is it a channel (Traffic branch), the Conversion leaf, or a leaf inside AOV?
Name the pattern from the symptom map: channel death (additive), checkout break (conversion leaf), or discount erosion (price leaf).
Run the SQL to segment revenue by channel and confirm which slice moved in the actual store data.
State the full diagnosis: "GMV fell X% - [branch] on [channel/leaf] - here is the confirming query." Reset and run another drop.
Your turn: segment the drivers ★ 10 min · everyone builds
Two live queries and one prose call. First a conversion proxy by channel, then AOV by channel, then reason from a symptom to the next query without any data at all - the skill this whole session builds.
LiveQ1 · Conversion proxy - completed vs total orders by channel3 min▶
We do not have raw sessions, but completion rate is a fair conversion proxy: of all orders started on a channel, how many completed rather than being refunded or cancelled? A channel with a low completion rate is where checkout is leaking.
SELECT channel,
COUNT(*) AS all_orders,
COUNT(*) FILTER (WHERE status = 'completed') AS completed,
ROUND(100.0 * COUNT(*) FILTER (WHERE status = 'completed')
/ COUNT(*), 1) AS completion_pct
FROM orders
GROUP BY channel
ORDER BY completion_pct DESC;
LiveQ2 · AOV by channel - which basket shrank?3 min▶
If the tree pointed at AOV, split it by channel. Average order value is revenue divided by distinct orders. A channel whose basket is far smaller is where discounting or a product-mix shift is eroding value.
SELECT o.channel,
COUNT(DISTINCT o.order_id) AS orders,
ROUND(SUM(oi.quantity * oi.unit_price) * 1.0
/ COUNT(DISTINCT o.order_id), 2) AS avg_order_value
FROM orders o
JOIN order_items oi ON o.order_id = oi.order_id
WHERE o.status = 'completed'
GROUP BY o.channel
ORDER BY avg_order_value DESC;
Self-studyQ3 · GMV down, traffic flat, AOV flat - who is guilty?2 min write▶
Reason it out in prose before touching data. GMV = Traffic x Conversion x AOV. If GMV fell but Traffic and AOV are both flat, arithmetic leaves only one driver that can have moved. Name it, then name the single next query you would run to localise it. This is the move that separates fast analysts from slow ones - the tree points, you do not guess.
The answer: in a product tree, if two of three drivers are flat and the top line fell, the third - Conversion - is guilty. Next query: segment conversion (completion rate) by channel and by device to find which slice broke. Checkout is the usual suspect.
Try it yourself - this week ◐ 20-30 min total
- Draw your store's GMV tree two levels deep. Split Traffic into your real channels and AOV into units and price. Paste your numbers into the deep tree above.
- For each of the three common drops, write the branch it lands on and the owner who gets the ticket. Pin it as your symptom-to-branch map.
- Hang one leading indicator on each top branch: ad impressions under Paid, add-to-cart rate under Conversion, discount depth under Price. Watch those daily.
- Run the completion-rate-by-channel query on your own data. A channel far below the others is a checkout leak worth a look this week.
- Bring your channel mix to b5 - the marketing deep dive splits acquisition into spend, CAC, and channel efficiency.
Frameworks this session draws on
The ecommerce GMV tree is the domain canon - the same decomposition Lean Analytics and every store's analytics stack use, applied here live instead of described. This page draws on:
Three questions before you go 🎯 ◐ 90 seconds
1 · What is the canonical ecommerce GMV formula?
GMV is a product of three drivers: traffic (how many arrive), conversion (what share buy), and average order value (how much each spends). Two levels down, traffic splits into channels and AOV into units x price.
2 · A single acquisition channel dies while the others hold. Which pattern is that, and where in the tree?
Traffic is a sum of channels, so a channel dying is an additive failure: one part collapses, the rest hold. Read it by each channel's weight - a dead small channel barely dents GMV; a dead big one hurts.
3 · GMV is down, but traffic is flat and AOV is flat. Which driver is guilty?
GMV = Traffic x Conversion x AOV. With traffic and AOV both flat, only conversion can explain the fall. Next query: segment conversion by channel and device - checkout is the usual suspect.