victorious-magazine-23782
11/29/2023, 6:12 PMvictorious-magazine-23782
11/29/2023, 6:44 PMswift-helmet-3648
11/29/2023, 10:00 PMvictorious-magazine-23782
11/30/2023, 8:52 AMvictorious-magazine-23782
11/30/2023, 8:54 AMswift-helmet-3648
11/30/2023, 2:00 PMhelpful-application-7107
11/30/2023, 3:50 PMid
in your data source!
2. We still need to improve error messaging, my guess is our stats engine is throwing an error because you only have 6 users and returns some default output. (we're working on improving this: https://github.com/growthbook/growthbook/pull/1671)
If you go into your jupyter notebook and set the users to 3 you'll see the very empty looking response to compute_result()
helpful-application-7107
11/30/2023, 3:51 PMcount
and users
differvictorious-magazine-23782
11/30/2023, 3:51 PMhelpful-application-7107
11/30/2023, 3:52 PMusers
column (I'm confident in this because you're seeing that default 50% response), so it's not a UI bugvictorious-magazine-23782
11/30/2023, 3:52 PMhelpful-application-7107
11/30/2023, 3:52 PMvictorious-magazine-23782
11/30/2023, 3:52 PMvictorious-magazine-23782
11/30/2023, 3:52 PMhelpful-application-7107
11/30/2023, 3:53 PMhelpful-application-7107
11/30/2023, 3:53 PMvictorious-magazine-23782
11/30/2023, 3:53 PMhelpful-application-7107
11/30/2023, 3:53 PMDenominator
)?victorious-magazine-23782
11/30/2023, 3:53 PMvictorious-magazine-23782
11/30/2023, 3:53 PMvictorious-magazine-23782
11/30/2023, 3:54 PMhelpful-application-7107
11/30/2023, 3:54 PMhelpful-application-7107
11/30/2023, 3:54 PMhelpful-application-7107
11/30/2023, 3:55 PMvictorious-magazine-23782
11/30/2023, 3:55 PMvictorious-magazine-23782
11/30/2023, 3:56 PMvictorious-magazine-23782
11/30/2023, 3:57 PM-- Gross TTV (revenue)
WITH
__rawExperiment as (
SELECT
id,
created_at as timestamp,
experiment as experiment_id,
variation_id as variation_id
FROM
experiments.assignments
),
__experiment as ( -- Viewed Experiment
SELECT
e.id as id,
cast(e.variation_id as varchar) as variation,
e.timestamp as timestamp,
e.timestamp as conversion_start,
e.timestamp + INTERVAL '72' hour as conversion_end
FROM
__rawExperiment e
WHERE
e.experiment_id = 'my_experiment'
AND e.timestamp >= from_iso8601_timestamp('2023-11-10T17:30:00.000Z')
),
__metric as ( -- Metric (Gross TTV)
SELECT
id as id,
m.value as value,
m.timestamp as timestamp,
m.timestamp as conversion_start,
m.timestamp as conversion_end
FROM
(
SELECT
id,
timestamp,
itinerary_sell_rate_total.usd_amount AS value
FROM
experiments.master
) m
WHERE
m.timestamp >= from_iso8601_timestamp('2023-11-10T17:30:00.000Z')
),
__distinctUsers as (
-- One row per user/dimension
SELECT
e.id,
cast('All' as varchar) as dimension,
(
CASE
WHEN count(distinct e.variation) > 1 THEN '__multiple__'
ELSE max(e.variation)
END
) as variation,
MIN(e.conversion_start) as conversion_start,
MIN(e.conversion_end) as conversion_end
FROM
__experiment e
GROUP BY
e.id
),
__userMetric as (
-- Add in the aggregate metric value for each user
SELECT
d.variation,
d.dimension,
d.id,
LEAST(3500, SUM(value)) as value
FROM
__distinctUsers d
JOIN __metric m ON (m.id = d.id)
WHERE
m.timestamp >= d.conversion_start
AND m.timestamp <= d.conversion_end
GROUP BY
variation,
dimension,
d.id
),
__overallUsers as (
-- Number of users in each variation
SELECT
variation,
dimension,
1.0 * COUNT(*) as users
FROM
__distinctUsers
GROUP BY
variation,
dimension
),
__stats as (
-- One row per variation/dimension with aggregations
SELECT
m.variation,
m.dimension,
1.0 * COUNT(*) as count,
AVG(1.0 * coalesce(m.value, 0)) as m_mean,
VAR_SAMP(coalesce(m.value, 0)) as m_var,
1.0 * sum(m.value) as m_sum
FROM
__userMetric m
GROUP BY
m.variation,
m.dimension
),
__overall as (
SELECT
u.variation,
u.dimension,
u.users as count,
s.m_mean * s.count / u.users as mean,
(
CASE
WHEN u.users > 1 THEN (s.count -1) * s.m_var / (u.users -1) + s.count * (u.users - s.count) * power(s.m_mean, 2) / (u.users * (u.users -1))
ELSE 0
END
) as variance,
u.users as users
FROM
__overallUsers u
LEFT JOIN __stats s ON (
s.variation = u.variation
AND s.dimension = u.dimension
)
)
SELECT
variation,
dimension,
count,
mean,
(
CASE
WHEN variance > 0 THEN sqrt(variance)
ELSE 0
END
) as stddev,
users
FROM
__overall
helpful-application-7107
11/30/2023, 3:58 PMhelpful-application-7107
11/30/2023, 3:58 PMvictorious-magazine-23782
11/30/2023, 3:59 PMvictorious-magazine-23782
11/30/2023, 3:59 PMvictorious-magazine-23782
11/30/2023, 3:59 PMhelpful-application-7107
11/30/2023, 4:04 PMparseInt
to process the query result, and I think it might be struggling with that number.helpful-application-7107
11/30/2023, 4:04 PMparseFloat
for count, so that's why they'd differ once the data gets from SQL into our backendvictorious-magazine-23782
11/30/2023, 4:05 PMvictorious-magazine-23782
11/30/2023, 4:07 PMhelpful-application-7107
11/30/2023, 4:07 PMhelpful-application-7107
11/30/2023, 4:08 PMvictorious-magazine-23782
11/30/2023, 4:08 PMhelpful-application-7107
11/30/2023, 4:09 PMparseInt
and for your case, you can either upgrade and tell me if it still breaks (the lazy way for me to test this 😄 ) or you can just edit that one function to use parseFloat.victorious-magazine-23782
11/30/2023, 4:10 PMvictorious-magazine-23782
11/30/2023, 4:11 PMhelpful-application-7107
11/30/2023, 4:31 PM