Write a query to return the view → add_to_cart → purchase funnel from fn_product_events, counted by distinct user-and-product pairs.
A pair enters at its first view. Select its first cart strictly after that view, then its first purchase strictly after that cart. Every selected step must have the same user_id and product_id; events at equal timestamps do not advance the sequence. One user viewing several products contributes several entering pairs.
Return the three ordered steps with step, step_name, pairs and pct_of_previous. The percentage is the pair count divided by the preceding count, multiplied by 100 and rounded to one decimal place; return NULL for the first step or a zero denominator.
Ordering: Sort by step ascending.