From c6076c5e7e113821e579c515d8374e37ef38cf8b Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Mon, 28 Apr 2025 10:59:20 +0200 Subject: [PATCH] feat(product_analytics): funnels card handle duration --- backend/pkg/analytics/charts/metric_funnel.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/backend/pkg/analytics/charts/metric_funnel.go b/backend/pkg/analytics/charts/metric_funnel.go index a52c0d22e..9a562e352 100644 --- a/backend/pkg/analytics/charts/metric_funnel.go +++ b/backend/pkg/analytics/charts/metric_funnel.go @@ -3,6 +3,7 @@ package charts import ( "fmt" "openreplay/backend/pkg/analytics/db" + "strconv" "strings" ) @@ -49,8 +50,7 @@ func (f FunnelQueryBuilder) buildQuery(p Payload) (string, error) { metricFormat := p.MetricPayload.MetricFormat // separate global vs step filters based on IsEvent flag - var globalFilters []Filter - var eventFilters []Filter + var globalFilters, eventFilters []Filter for _, flt := range s.Filter.Filters { if flt.IsEvent { eventFilters = append(eventFilters, flt) @@ -63,9 +63,10 @@ func (f FunnelQueryBuilder) buildQuery(p Payload) (string, error) { var minDur, maxDur int64 for i := len(globalFilters) - 1; i >= 0; i-- { if globalFilters[i].Type == "duration" { - if vals, ok := globalFilters[i].Value.([]interface{}); ok && len(vals) == 2 { - minDur = int64(vals[0].(float64)) - maxDur = int64(vals[1].(float64)) + vals := globalFilters[i].Value // []string + if len(vals) == 2 { + minDur, _ = strconv.ParseInt(vals[0], 10, 64) + maxDur, _ = strconv.ParseInt(vals[1], 10, 64) } globalFilters = append(globalFilters[:i], globalFilters[i+1:]...) } @@ -85,6 +86,7 @@ func (f FunnelQueryBuilder) buildQuery(p Payload) (string, error) { if maxDur > 0 { base = append(base, fmt.Sprintf("s.duration BETWEEN %d AND %d", minDur, maxDur)) } + base = append(base, globalConds...) if len(globalNames) > 0 { base = append(base, "e.`$event_name` IN ("+buildInClause(globalNames)+")")