https://www.growthbook.io/ logo
#ask-questions
Title
# ask-questions
w

white-salesclerk-40048

12/28/2022, 3:05 PM
Hello team, I'm trying to create a revenue metric based on a mixpanel event, the event has an attribute for the total value of the purchase, in the 2nd image is the query error I'm getting, what could be the problem? Thank you in advance.
f

fresh-football-47124

12/28/2022, 3:16 PM
Hi Amr
Can you share the full query from the second image?
w

white-salesclerk-40048

12/28/2022, 3:18 PM
Hello Graham
function main() { // Helper aggregation functions const sum = (arr) => arr.reduce((sum, x) => sum + x, 0); const count = (arr) => arr.length; const countDistinct = (arr) => new Set(arr).size; const min = (arr) => Math.min(...arr); const max = (arr) => Math.max(...arr); const avg = (arr) => count(arr)>0?(sum(arr)/count(arr)):0; const percentile = (arr, p) => { const s = [...arr].sort((a,b)=>a-b); if(!s.length) return 0; if(p<=0) return s[0]; if(p>=100) return s[arr.length-1]; const r = (s.length-1)*p/100; const rf = Math.ceil(r) - r; return s[Math.floor(r)]*rf + s[Math.ceil(r)]*(1-rf); }; const median = (arr) => percentile(arr, 50); // Complete Purchase Revenue function isMetric(event) { return event.name === "Complete Purchase"; } // Last 90 days - Metric value (Complete Purchase Revenue) return Events({ "from_date": "2022-09-29", "to_date": "2022-12-28", "event_selectors": [ { "event": "Complete Purchase" } ] }) .filter(function(event) { if(isMetric(event)) return true; return false; }) // Metric value per user .groupByUser(function(state, events) { state = state || {date: null, metricValue: []}; for(var i=0; i<events.length; i++) { state.date = state.date || events[i].time; const event = events[i]; if(isMetric(event)) { state.metricValue.push(event.properties["Total Price"]); } } return state; }) // Remove users that did not convert .filter(function(ev) { return ev.value.date && ev.value.metricValue.length > 0; }) // Aggregate metric values per user .map(function(user) { // Metric - Complete Purchase Revenue user.value.metricValue = !user.value.metricValue.length ? 0 : ( (values => sum(values))(user.value.metricValue) ); return user; }) .reduce([ // Overall summary metrics mixpanel.reducer.numeric_summary('value.metricValue'), // Summary metrics by date (prevs, events) => { const dates = {}; prevs.forEach(prev => { prev.dates.forEach(d=>{ dates[d.date] = dates[d.date] || {count:0, sum:0}; dates[d.date].count += d.count; dates[d.date].sum += d.sum; }) }); events.forEach(e=>{ const date = (new Date(e.value.date)).toISOString().substr(0,10); dates[date] = dates[date] || {count:0, sum:0}; dates[date].count++; dates[date].sum += e.value.metricValue; }); return { type: "byDate", dates: Object.keys(dates).map(d => ({ date: d, ...dates[d] })) }; } ]) // Transform into easy-to-use objects .map(vals => vals.map(val => { if(val.count) return {type: "overall", ...val}; return val; })); }
f

fresh-football-47124

12/28/2022, 3:23 PM
does
complete purchase
have the amount the purchase was?
w

white-salesclerk-40048

12/28/2022, 3:24 PM
Yes it's in the events properties with the attribute
Total Price
event's*
f

fresh-football-47124

12/28/2022, 3:24 PM
I see
w

white-salesclerk-40048

12/28/2022, 3:24 PM
here's an example
the last prop
14 Views