►
Description
Max (BE engineer, Analyze:Product Analytics) shows off the latest iteration of funnel analysis for product analytics.
Merge request: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/108712
A
Good
good
lab,
my
name
is
Max
wolf,
I'm,
a
senior
backing
engineer
on
the
product,
analytics
team
and
I
want
to
talk
to
you
all
about
our
sort
of
the
latest
iteration
of
how
funnels
work
and
finally
fixed
the
issue
where
there
was
wouldn't
let
us
Define
The
Funnel
of
more
than
two
steps,
which
is
a
fairly
fundamental
problem.
A
So,
let's
show
my
screen
and
let's
get
started
so
we've
now
gone
openmr,
which
I'm
hoping
to
get
out
of
Draft
today,
which
does
three
major
things
so
we're
adding
support
for
yaml,
funnel
definitions
in
a
second
adding
a
new
API
endpoint,
which
exposes
the
list
of
funnel
definitions
to
project
developers
or
hire,
and
then
we
update
the
API
endpoint
that
proxies
requests
to
cube
the
bi
Tool,
which
generates
temporary
project
access
tokens
we'll
talk
about
that
in
a
minute.
A
So,
first
of
all,
we've
now
got
this
ability
to
Define
funnels
in
a
file
which
I
talked
about
briefly
in
the
last
video.
This
is
my
test.
Funnel
I've
got
lots
of
test
data
in
clickhouse
that
allows
us
to
play
with
this.
So
a
converted
funnel
is
basically
within
3600
seconds.
A
Do
we
go
through
page
one
page,
two
page,
three,
all
the
way
through
to
page
seven
and
where
and
that
for
all
the
people
fall
off
and
how
can
we
visualize
that
so
I
recommend
checking
out
littlecast
documentation
and
to
find
the
right
function?
Parametric
parametric
aggregate
function,
the
window
funnel
function
which
basically
handles
all
the
hard
work
for
us
here
and
our
API
will
send
the
correct
SQL.
A
So,
first
of
all,
let's
talk
about
what
we've
added
to
the
code
base
and
how
that
works.
So
we've
got
a
few
classes.
We've
got
funnel
class,
which
is
very
similar
to
the
dashboard
schema
class.
Now
before
it
loads,
the
files
generates
a
bunch
of
plain
old
Ruby
objects
based
on
that
and
then
a
funnel
step
to
find
some
nice
sort
of
SQL
helpers.
A
So
the
most
important
bit
is
the.
In
the
funnel
class.
We've
now
got
a
two
SQL
method
which
generates
the
click
out
specific
SQL
using
the
window
funnel
method
so
yeah,
that's
pretty
cool
and
work
sense
advertised,
which
is
very
nice
very,
very
fast
as
well.
A
So,
let's
see
it
working
because
that's
much
more
interesting,
so
we've
defined
this
funnel
here,
which
has
some
useful
data
and
we've
also
defined
a
couple
new
API,
endpoints,
first
of
which
is
this
one,
which
will
output
the
list
of
funnels
and
the
secret
required
to
execute
them.
Essentially,
so
let's
run
that
one
I
need
to
find
yeah.
So
here's
most
of
the
funnels
you
can
see
the
name
of
it
completed
purchase
and
you
can
see
the
generated
SQL
here.
A
I
mean
you
can
also
do
a
list
of
steps.
So
the
front
end
can
also
just
load
the
list
of
steps
if
necessary.
If
you
want
to
display
that
in
any
other
way,
here's
another
funnel
as
well
in
the
same
project,
which
you
can
see
that
list
of
funnels
you
can
see.
There
should
be
two
funnels
to
find
here.
The
name
of
the
funnel
file
doesn't
really
matter.
It
takes
the
name
from
the
the
defined
name
here
so
for
each
of
those
Cube
will
generate
a
dynamic
schema.
A
So
in
the
list
in
the
the
playground
you
can
see
completed
purchase.
So
it
takes
the
name
and
sort
of
humanizes.
A
The
title-
and
it
generates
useful
Json
queries
here,
so
you
can
see
completely
purchase.com
and
you
can
see
the
funnel
here
nicely,
so
you
can
see
235
people
made
it
to
step
three
and
45
minutes
to
step
five,
and
there
were
seven
steps
and
30
converted
the
playground
doesn't
give
us
a
funnel
visualization,
so
a
bar
chart
is
as
close
as
you're
going
to
get,
but
we
can
fix
that
in
our
front
end.
A
So,
more
importantly,
we'll
be
using
the
proxy
endpoint
that
we've
got
and
you
can
pass
in
the
name
of
the
funnel,
which
is
generated
dynamically,
and
you
can
also
pass
in
either
a
before
date
or
a
date
range
as
well
currently
because
of
some
sort
of
issue
in
Cube.
We
can't
do
after
date
at
the
moment.
We
can
add
that
later
on,
hopefully,
but
for
now
it's
either
going
to
be
before
a
certain
date
or
within
two
dates,
so
we
may
just
force
it
to
be
within
two
dates.
A
A
So
the
biggest
thing
we
have
to
deal
with
here
was
the
fact
that
the
dynamically
generated
query
has
to
go
and
call
the
gitlab
API.
It
has
to
go
and
find
out
from
the
gitlab
API,
which
funnels
exist,
which
meant
that
for
the
first
time,
we've
got
an
API
query
that
goes
from
Cube
to
gitlab,
as
opposed
to
the
other
way
around.
Obviously,
Cube
needs
to
authenticate
itself
with
gitlab
to
do
that.
A
A
Our
feature
flag
and
requires
an
ultimate
license
as
well,
so
I'm
not
totally
can
I'm
not
particularly
concerned
about
the
security
implications
here,
especially
because
these
tokens
are
never
actually
displayed
anywhere,
they're
just
stored
encrypted
in
the
database.
A
The
other
big
thing
that
we
fixed
in
this
one
obviously
was
the
fact
that
we
can
now
have
funnels
of
completely
arbitrary
size.
So
this
is
a
seven
step
funnel,
which
works.
Fine,
three-step
100
step
as
far
as
I
can
tell
it'll
work
we'll
have
to
test
it
in
Anger,
with
like
50
and
60
step,
and
see
how
well
clickhouse
deals
with
that,
and
we
have
to
look
at
pre-aggregation
as
well.
Pre-Aggregation
in
dynamically
generated
funnels
appears
to
be
not
working
yet,
but
I'm
also
not
sure
how
necessary
it
is.
A
So
we
will
have
to
see
excellent
just
want
to
give
an
overview
of
where
we
are
so
far
where
we're
going
now,
and
hopefully
we
can
get
this
Mr
reviewed
and
into
the
data
into
the
code
base
as
soon
as
possible.
Thanks
for
watching.