From 79cc5305b97567760ccf9d2bd821cd279dde3d21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Wed, 6 Mar 2024 12:48:35 +0100 Subject: [PATCH 01/43] add funnel correlation actors query --- frontend/src/queries/schema.json | 32 ++++ frontend/src/queries/schema.ts | 8 + .../scenes/funnels/funnelPersonsModalLogic.ts | 160 ++++++++++++++++-- posthog/schema.py | 29 ++++ 4 files changed, 212 insertions(+), 17 deletions(-) diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index daa02a390600f..5b80b8bf8efe8 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -1564,6 +1564,38 @@ "enum": ["second", "minute", "hour", "day", "week", "month"], "type": "string" }, + "FunnelCorrelationActorsQuery": { + "additionalProperties": false, + "properties": { + "funnelCorrelationPersonConverted": { + "type": "boolean" + }, + "funnelCorrelationPersonEntity": { + "$ref": "#/definitions/AnyEntityNode" + }, + "funnelCorrelationPropertyValues": { + "items": { + "$ref": "#/definitions/AnyPropertyFilter" + }, + "type": "array" + }, + "includeRecordings": { + "type": "boolean" + }, + "kind": { + "const": "InsightActorsQuery", + "type": "string" + }, + "response": { + "$ref": "#/definitions/ActorsQueryResponse" + }, + "source": { + "$ref": "#/definitions/FunnelCorrelationQuery" + } + }, + "required": ["kind", "source"], + "type": "object" + }, "FunnelCorrelationQuery": { "additionalProperties": false, "properties": { diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index 7b9920ca3b8d8..9fbdeca237726 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -1105,6 +1105,14 @@ export interface FunnelsActorsQuery extends InsightActorsQueryBase { funnelTrendsEntrancePeriodStart?: string } +export interface FunnelCorrelationActorsQuery extends InsightActorsQueryBase { + kind: NodeKind.InsightActorsQuery + source: FunnelCorrelationQuery + funnelCorrelationPersonConverted?: boolean + funnelCorrelationPersonEntity?: AnyEntityNode + funnelCorrelationPropertyValues?: AnyPropertyFilter[] +} + export interface EventDefinition { event: string properties: Record diff --git a/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts b/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts index dc4d70890b4aa..818346df140eb 100644 --- a/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts +++ b/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts @@ -1,16 +1,26 @@ import { actions, connect, kea, key, listeners, path, props, selectors } from 'kea' +import { elementsToAction } from 'scenes/events/createActionFromEvent' import { insightLogic } from 'scenes/insights/insightLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { funnelTitle } from 'scenes/trends/persons-modal/persons-modal-utils' import { openPersonsModal } from 'scenes/trends/persons-modal/PersonsModal' -import { FunnelsActorsQuery, NodeKind } from '~/queries/schema' import { + EventsNode, + FunnelCorrelationActorsQuery, + FunnelCorrelationQuery, + FunnelsActorsQuery, + NodeKind, +} from '~/queries/schema' +import { + AnyPropertyFilter, FunnelCorrelation, FunnelCorrelationResultsType, FunnelStep, FunnelStepWithConversionMetrics, InsightLogicProps, + PropertyFilterType, + PropertyOperator, } from '~/types' import { funnelDataLogic } from './funnelDataLogic' @@ -152,26 +162,142 @@ export const funnelPersonsModalLogic = kea([ if (correlation.result_type === FunnelCorrelationResultsType.Properties) { const { breakdown, breakdown_value } = parseBreakdownValue(correlation.event.event) - openPersonsModal({ - url: success ? correlation.success_people_url : correlation.failure_people_url, - title: funnelTitle({ - converted: success, - step: values.steps.length, - breakdown_value, - label: breakdown, - }), + const title = funnelTitle({ + converted: success, + step: values.steps.length, + breakdown_value, + label: breakdown, }) + + if (values.hogQLInsightsFunnelsFlagEnabled) { + // properties + const [propertyName, propertyValue] = correlation.event.event.split('::') + const propType = values.querySource?.aggregation_group_type_index ? 'group' : 'person' + const actorsQuery: FunnelsActorsQuery = { + kind: NodeKind.InsightActorsQuery, + source: values.querySource!, + funnelStep: 1, + includeRecordings: true, + } + const correlationQuery: FunnelCorrelationQuery = { + kind: NodeKind.FunnelCorrelationQuery, + source: actorsQuery, + funnelCorrelationType: correlation.result_type, + } + const query: FunnelCorrelationActorsQuery = { + kind: NodeKind.InsightActorsQuery, + source: correlationQuery, + funnelCorrelationPersonConverted: success, + funnelCorrelationPropertyValues: [ + { + key: propertyName, + value: propertyValue, + type: propType, + operator: 'exact', + group_type_index: values.querySource?.aggregation_group_type_index, + }, + ], + } + openPersonsModal({ + title, + query, + additionalSelect: { matched_recordings: 'matched_recordings' }, + }) + } else { + openPersonsModal({ + url: success ? correlation.success_people_url : correlation.failure_people_url, + title, + }) + } } else { const { name } = parseEventAndProperty(correlation.event) - - openPersonsModal({ - url: success ? correlation.success_people_url : correlation.failure_people_url, - title: funnelTitle({ - converted: success, - step: values.steps.length, - label: name, - }), + const title = funnelTitle({ + converted: success, + step: values.steps.length, + label: name, }) + + if (values.hogQLInsightsFunnelsFlagEnabled) { + const actorsQuery: FunnelsActorsQuery = { + kind: NodeKind.InsightActorsQuery, + source: values.querySource!, + funnelStep: 1, + includeRecordings: true, + } + const correlationQuery: FunnelCorrelationQuery = { + kind: NodeKind.FunnelCorrelationQuery, + source: actorsQuery, + funnelCorrelationType: correlation.result_type, + } + + let entity: EventsNode + if (correlation.result_type === FunnelCorrelationResultsType.Events) { + // events + entity = { + event: correlation.event.event, + kind: NodeKind.EventsNode, + } + } else { + // events with properties + const eventName = correlation.event.event.split('::')[0] + + let properties: AnyPropertyFilter[] + if (eventName === '$autocapture') { + // If we have an $autocapture event, we need to + // convert the `elements` chain into an "action". + const elements = correlation.event.elements + const elementsAsAction = elementsToAction(elements) + properties = Object.entries(elementsAsAction) + .map(([propertyKey, propertyValue]) => { + if (propertyValue !== null) { + return { + key: propertyKey, + value: [propertyValue], + type: 'element', + operator: 'exact', + } + } + }) + .filter(Boolean) as AnyPropertyFilter[] + } else { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_, propertyName, propertyValue] = correlation.event.event.split('::') + + properties = [ + { + key: propertyName, + value: propertyValue, + type: PropertyFilterType.Event, + operator: PropertyOperator.Exact, + }, + ] + } + + entity = { + kind: NodeKind.EventsNode, + event: eventName, + properties, + } + } + + const query = { + kind: NodeKind.InsightActorsQuery, + source: correlationQuery, + funnelCorrelationPersonConverted: success, + funnelCorrelationPersonEntity: entity, + } + + openPersonsModal({ + title, + query, + additionalSelect: { matched_recordings: 'matched_recordings' }, + }) + } else { + openPersonsModal({ + url: success ? correlation.success_people_url : correlation.failure_people_url, + title, + }) + } } }, })), diff --git a/posthog/schema.py b/posthog/schema.py index 7c770790364ce..55fef34e43c19 100644 --- a/posthog/schema.py +++ b/posthog/schema.py @@ -2916,6 +2916,35 @@ class DataTableNode(BaseModel): ] = Field(..., description="Source of the events") +class FunnelCorrelationActorsQuery(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + funnelCorrelationPersonConverted: Optional[bool] = None + funnelCorrelationPersonEntity: Optional[Union[EventsNode, ActionsNode, DataWarehouseNode]] = None + funnelCorrelationPropertyValues: Optional[ + List[ + Union[ + EventPropertyFilter, + PersonPropertyFilter, + ElementPropertyFilter, + SessionPropertyFilter, + CohortPropertyFilter, + RecordingDurationFilter, + GroupPropertyFilter, + FeaturePropertyFilter, + HogQLPropertyFilter, + EmptyPropertyFilter, + DataWarehousePropertyFilter, + ] + ] + ] = None + includeRecordings: Optional[bool] = None + kind: Literal["InsightActorsQuery"] = "InsightActorsQuery" + response: Optional[ActorsQueryResponse] = None + source: FunnelCorrelationQuery + + class HogQLMetadata(BaseModel): model_config = ConfigDict( extra="forbid", From 38ab4e0c3ae5e17256da9d86b07d7209349ae7ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Wed, 6 Mar 2024 19:51:53 +0100 Subject: [PATCH 02/43] scaffold --- frontend/src/queries/schema.json | 4 +- frontend/src/queries/schema.ts | 2 +- .../scenes/funnels/funnelPersonsModalLogic.ts | 4 +- .../funnel_correlation_query_runner.py | 130 ++++++++++++++++++ .../insights/insight_actors_query_runner.py | 5 + posthog/schema.py | 2 +- 6 files changed, 140 insertions(+), 7 deletions(-) diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index 5b80b8bf8efe8..775163c68a32b 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -1675,9 +1675,7 @@ "type": "array" }, "types": { - "items": { - "type": "string" - }, + "items": {}, "type": "array" } }, diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index 9fbdeca237726..5e845a675876b 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -1135,7 +1135,7 @@ export interface FunnelCorrelationResult { export interface FunnelCorrelationResponse { results: FunnelCorrelationResult columns?: any[] - types?: string[] + types?: any[] hogql?: string timings?: QueryTiming[] hasMore?: boolean diff --git a/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts b/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts index 818346df140eb..e3b3cbe5b6aeb 100644 --- a/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts +++ b/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts @@ -192,8 +192,8 @@ export const funnelPersonsModalLogic = kea([ { key: propertyName, value: propertyValue, - type: propType, - operator: 'exact', + type: propType === 'person' ? PropertyFilterType.Person : PropertyFilterType.Group, + operator: PropertyOperator.Exact, group_type_index: values.querySource?.aggregation_group_type_index, }, ], diff --git a/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py b/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py index d97e872fd2c5e..cde64e1e01083 100644 --- a/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py +++ b/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py @@ -4,6 +4,7 @@ from posthog.constants import AUTOCAPTURE_EVENT from posthog.hogql.parser import parse_select +from posthog.hogql.property import property_to_expr from posthog.hogql_queries.insights.funnels.funnel_event_query import FunnelEventQuery from posthog.hogql_queries.insights.funnels.funnel_persons import FunnelActors from posthog.hogql_queries.insights.funnels.funnel_strict_persons import FunnelStrictActors @@ -29,6 +30,7 @@ CorrelationType, EventDefinition, EventsNode, + FunnelCorrelationActorsQuery, FunnelCorrelationQuery, FunnelCorrelationResponse, FunnelCorrelationResult, @@ -87,6 +89,7 @@ class FunnelCorrelationQueryRunner(QueryRunner): query_type = FunnelCorrelationQuery funnels_query: FunnelsQuery actors_query: FunnelsActorsQuery + correlation_actors_query: Optional[FunnelCorrelationActorsQuery] _funnel_actors_generator: FunnelActors | FunnelStrictActors | FunnelUnorderedActors @@ -335,6 +338,133 @@ def to_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: return self.get_event_query() + def to_actors_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: + if self.query.funnelCorrelationType == FunnelCorrelationResultsType.properties: + # # Filtering on persons / groups properties can be pushed down to funnel_actors CTE + # new_correlation_filter = filter.shallow_clone( + # { + # "properties": filter.property_groups.combine_properties( + # PropertyOperatorType.AND, filter.correlation_property_values or [] + # ).to_dict() + # } + # ) + # return self.properties_actor_query() + return parse_select("SELECT 1") + else: + return self.events_actor_query() + + def events_actor_query(self, limit_actors: Optional[bool] = True) -> ast.SelectQuery: + assert self.correlation_actors_query is not None + + if not self.correlation_actors_query.funnelCorrelationPersonEntity: + raise ValidationError("No entity for persons specified") + + assert isinstance(self.correlation_actors_query.funnelCorrelationPersonEntity, EventsNode) + + target_step = self.context.max_steps + target_event = self.correlation_actors_query.funnelCorrelationPersonEntity.event + funnel_step_names = self._get_funnel_step_names() + funnel_persons_query = self.get_funnel_actors_cte() + funnel_event_query = FunnelEventQuery(context=self.context) + date_from = funnel_event_query._date_range().date_from_as_hogql() + date_to = funnel_event_query._date_range().date_to_as_hogql() + + properties = self.correlation_actors_query.funnelCorrelationPersonEntity.properties + if properties is not None and properties != []: + prop_query = property_to_expr(properties, self.team) + else: + prop_query = [] + + conversion_filter = ( + f'AND funnel_actors.steps {"=" if self.correlation_actors_query.funnelCorrelationPersonConverted else "<>"} target_step' + if self.correlation_actors_query.funnelCorrelationPersonConverted is not None + else "" + ) + + event_join_query = self._get_events_join_query() + + recording_event_select_statement = ( + ", any(funnel_actors.matching_events) AS matching_events" if self.actors_query.includeRecordings else "" + ) + + query = parse_select( + f""" + WITH + funnel_actors as ( + {{funnel_persons_query}} + ), + {{date_from}} AS date_from, + {{date_to}} AS date_to, + {target_step} AS target_step, + {funnel_step_names} AS funnel_step_names + SELECT + funnel_actors.actor_id AS actor_id + {recording_event_select_statement} + FROM events AS event + {event_join_query} + AND event.event = '{target_event}' + {conversion_filter} + GROUP BY actor_id + ORDER BY actor_id + """, + placeholders={ + "funnel_persons_query": funnel_persons_query, + "date_from": date_from, + "date_to": date_to, + # "prop_query": prop_query, + }, + ) + + query.where.exprs = [*query.where.exprs, *prop_query] + + return query + + # def properties_actor_query( + # self, + # limit_actors: Optional[bool] = True, + # extra_fields: Optional[List[str]] = None, + # ) -> ast.SelectQuery: + # if not self._filter.correlation_property_values: + # raise ValidationError("Property Correlation expects atleast one Property to get persons for") + + # ( + # funnel_persons_query, + # funnel_persons_params, + # ) = self._funnel_correlation.get_funnel_actors_cte() + + # conversion_filter = ( + # f'funnel_actors.steps {"=" if self._filter.correlation_persons_converted else "<>"} target_step' + # if self._filter.correlation_persons_converted is not None + # else "" + # ) + + # recording_event_select_statement = ( + # ", any(funnel_actors.matching_events) AS matching_events" if self._filter.include_recordings else "" + # ) + + # query = f""" + # WITH + # funnel_actors AS ({funnel_persons_query}), + # %(target_step)s AS target_step + # SELECT + # funnel_actors.actor_id AS actor_id + # {recording_event_select_statement} + # FROM funnel_actors + # WHERE {conversion_filter} + # GROUP BY funnel_actors.actor_id + # ORDER BY actor_id + # {"LIMIT %(limit)s" if limit_actors else ""} + # {"OFFSET %(offset)s" if limit_actors else ""} + # """ + # params = { + # **funnel_persons_params, + # "target_step": len(self._filter.entities), + # "limit": self._filter.correlation_person_limit, + # "offset": self._filter.correlation_person_offset, + # } + + # return query, params + def get_event_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: funnel_persons_query = self.get_funnel_actors_cte() event_join_query = self._get_events_join_query() diff --git a/posthog/hogql_queries/insights/insight_actors_query_runner.py b/posthog/hogql_queries/insights/insight_actors_query_runner.py index 57b1c8630c45f..c56162d019c7a 100644 --- a/posthog/hogql_queries/insights/insight_actors_query_runner.py +++ b/posthog/hogql_queries/insights/insight_actors_query_runner.py @@ -3,6 +3,7 @@ from posthog.hogql import ast from posthog.hogql.query import execute_hogql_query +from posthog.hogql_queries.insights.funnels.funnel_correlation_query_runner import FunnelCorrelationQueryRunner from posthog.hogql_queries.insights.funnels.funnels_query_runner import FunnelsQueryRunner from posthog.hogql_queries.insights.lifecycle_query_runner import LifecycleQueryRunner from posthog.hogql_queries.insights.paths_query_runner import PathsQueryRunner @@ -37,6 +38,10 @@ def to_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: funnels_runner = cast(FunnelsQueryRunner, self.source_runner) funnels_runner.context.actorsQuery = cast(FunnelsActorsQuery, self.query) return funnels_runner.to_actors_query() + elif isinstance(self.source_runner, FunnelCorrelationQueryRunner): + funnel_correlation_runner = cast(FunnelCorrelationQueryRunner, self.source_runner) + funnel_correlation_runner.correlation_actors_query = self.query + return funnel_correlation_runner.to_actors_query() elif isinstance(self.source_runner, RetentionQueryRunner): query = cast(InsightActorsQuery, self.query) retention_runner = cast(RetentionQueryRunner, self.source_runner) diff --git a/posthog/schema.py b/posthog/schema.py index 55fef34e43c19..811224583a216 100644 --- a/posthog/schema.py +++ b/posthog/schema.py @@ -1182,7 +1182,7 @@ class FunnelCorrelationResponse(BaseModel): offset: Optional[int] = None results: FunnelCorrelationResult timings: Optional[List[QueryTiming]] = None - types: Optional[List[str]] = None + types: Optional[List] = None class FunnelsFilterLegacy(BaseModel): From 1b6b9bb1ca49306b5857d96a82b3cbd48cffdbfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Wed, 6 Mar 2024 20:13:02 +0100 Subject: [PATCH 03/43] query nodes --- frontend/src/queries/schema.json | 16 +++-- frontend/src/queries/schema.ts | 10 +-- .../src/scenes/funnels/FunnelLineGraph.tsx | 2 +- .../scenes/funnels/funnelCorrelationLogic.ts | 4 +- .../scenes/funnels/funnelPersonsModalLogic.ts | 14 ++-- .../funnels/funnelPropertyCorrelationLogic.ts | 2 +- .../hogql_queries/insights/funnels/utils.py | 16 +---- posthog/hogql_queries/query_runner.py | 4 +- posthog/schema.py | 68 ++++++++++--------- posthog/types.py | 3 +- 10 files changed, 68 insertions(+), 71 deletions(-) diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index 775163c68a32b..250b62893c602 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -120,6 +120,9 @@ { "$ref": "#/definitions/FunnelsActorsQuery" }, + { + "$ref": "#/definitions/FunnelCorrelationActorsQuery" + }, { "$ref": "#/definitions/HogQLQuery" } @@ -1583,7 +1586,7 @@ "type": "boolean" }, "kind": { - "const": "InsightActorsQuery", + "const": "FunnelCorrelationActorsQuery", "type": "string" }, "response": { @@ -2013,7 +2016,7 @@ "type": "boolean" }, "kind": { - "const": "InsightActorsQuery", + "const": "FunnelsActorsQuery", "type": "string" }, "response": { @@ -2693,6 +2696,9 @@ }, { "$ref": "#/definitions/FunnelsActorsQuery" + }, + { + "$ref": "#/definitions/FunnelCorrelationActorsQuery" } ] } @@ -3148,6 +3154,8 @@ "HogQLMetadata", "HogQLAutocomplete", "ActorsQuery", + "FunnelsActorsQuery", + "FunnelCorrelationActorsQuery", "SessionsTimelineQuery", "DataTableNode", "DataVisualizationNode", @@ -4296,9 +4304,7 @@ "type": "array" }, "types": { - "items": { - "type": "string" - }, + "items": {}, "type": "array" } }, diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index 5e845a675876b..831bb80589d78 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -53,6 +53,8 @@ export enum NodeKind { HogQLMetadata = 'HogQLMetadata', HogQLAutocomplete = 'HogQLAutocomplete', ActorsQuery = 'ActorsQuery', + FunnelsActorsQuery = 'FunnelsActorsQuery', + FunnelCorrelationActorsQuery = 'FunnelCorrelationActorsQuery', SessionsTimelineQuery = 'SessionsTimelineQuery', // Interface nodes @@ -921,7 +923,7 @@ export interface ActorsQueryResponse { export interface ActorsQuery extends DataNode { kind: NodeKind.ActorsQuery - source?: InsightActorsQuery | FunnelsActorsQuery | HogQLQuery + source?: InsightActorsQuery | FunnelsActorsQuery | FunnelCorrelationActorsQuery | HogQLQuery select?: HogQLExpression[] search?: string properties?: AnyPropertyFilter[] @@ -1090,7 +1092,7 @@ export interface InsightActorsQuery([ try { if (values.hogQLInsightsFunnelsFlagEnabled) { const actorsQuery: FunnelsActorsQuery = { - kind: NodeKind.InsightActorsQuery, + kind: NodeKind.FunnelsActorsQuery, source: values.querySource!, } const query: FunnelCorrelationQuery = { @@ -93,7 +93,7 @@ export const funnelCorrelationLogic = kea([ loadEventWithPropertyCorrelations: async (eventName: string) => { if (values.hogQLInsightsFunnelsFlagEnabled) { const actorsQuery: FunnelsActorsQuery = { - kind: NodeKind.InsightActorsQuery, + kind: NodeKind.FunnelsActorsQuery, source: values.querySource!, } const query: FunnelCorrelationQuery = { diff --git a/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts b/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts index e3b3cbe5b6aeb..01a19ed9e6ca3 100644 --- a/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts +++ b/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts @@ -109,7 +109,7 @@ export const funnelPersonsModalLogic = kea([ // openPersonsModalForStep is for the baseline - for breakdown series use openPersonsModalForSeries if (values.hogQLInsightsFunnelsFlagEnabled) { const query: FunnelsActorsQuery = { - kind: NodeKind.InsightActorsQuery, + kind: NodeKind.FunnelsActorsQuery, source: values.querySource!, funnelStep: converted ? stepNo : -stepNo, includeRecordings: true, @@ -141,7 +141,7 @@ export const funnelPersonsModalLogic = kea([ // Version of openPersonsModalForStep that accurately handles breakdown series if (values.hogQLInsightsFunnelsFlagEnabled) { const query: FunnelsActorsQuery = { - kind: NodeKind.InsightActorsQuery, + kind: NodeKind.FunnelsActorsQuery, source: values.querySource!, funnelStep: converted ? stepNo : -stepNo, funnelStepBreakdown: series.breakdown_value, @@ -174,7 +174,7 @@ export const funnelPersonsModalLogic = kea([ const [propertyName, propertyValue] = correlation.event.event.split('::') const propType = values.querySource?.aggregation_group_type_index ? 'group' : 'person' const actorsQuery: FunnelsActorsQuery = { - kind: NodeKind.InsightActorsQuery, + kind: NodeKind.FunnelsActorsQuery, source: values.querySource!, funnelStep: 1, includeRecordings: true, @@ -185,7 +185,7 @@ export const funnelPersonsModalLogic = kea([ funnelCorrelationType: correlation.result_type, } const query: FunnelCorrelationActorsQuery = { - kind: NodeKind.InsightActorsQuery, + kind: NodeKind.FunnelCorrelationActorsQuery, source: correlationQuery, funnelCorrelationPersonConverted: success, funnelCorrelationPropertyValues: [ @@ -219,7 +219,7 @@ export const funnelPersonsModalLogic = kea([ if (values.hogQLInsightsFunnelsFlagEnabled) { const actorsQuery: FunnelsActorsQuery = { - kind: NodeKind.InsightActorsQuery, + kind: NodeKind.FunnelsActorsQuery, source: values.querySource!, funnelStep: 1, includeRecordings: true, @@ -280,8 +280,8 @@ export const funnelPersonsModalLogic = kea([ } } - const query = { - kind: NodeKind.InsightActorsQuery, + const query: FunnelCorrelationActorsQuery = { + kind: NodeKind.FunnelCorrelationActorsQuery, source: correlationQuery, funnelCorrelationPersonConverted: success, funnelCorrelationPersonEntity: entity, diff --git a/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.ts b/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.ts index 6709c1be1dc7e..a12aa0ca2ec08 100644 --- a/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.ts +++ b/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.ts @@ -77,7 +77,7 @@ export const funnelPropertyCorrelationLogic = kea Date: Wed, 6 Mar 2024 21:22:53 +0100 Subject: [PATCH 04/43] add tests --- .../test/test_funnel_correlations_persons.py | 690 ++++++++++++++++++ 1 file changed, 690 insertions(+) create mode 100644 posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py new file mode 100644 index 0000000000000..aa4d644285bea --- /dev/null +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py @@ -0,0 +1,690 @@ +from typing import Any, Dict, Optional, cast +import urllib.parse +from datetime import datetime, timedelta +from unittest.mock import patch +from uuid import UUID + +from django.utils import timezone +from freezegun import freeze_time + +from ee.clickhouse.queries.funnels.funnel_correlation_persons import ( + FunnelCorrelationActors, +) +from posthog.constants import INSIGHT_FUNNELS +from posthog.hogql_queries.actors_query_runner import ActorsQueryRunner +from posthog.hogql_queries.legacy_compatibility.filter_to_query import filter_to_query +from posthog.models import Cohort, Filter +from posthog.models.person import Person +from posthog.models.team.team import Team +from posthog.schema import ( + ActorsQuery, + EventsNode, + FunnelCorrelationActorsQuery, + FunnelCorrelationQuery, + FunnelCorrelationResultsType, + FunnelsActorsQuery, + FunnelsQuery, +) +from posthog.session_recordings.queries.test.session_replay_sql import ( + produce_replay_summary, +) +from posthog.tasks.calculate_cohort import insert_cohort_from_insight_filter +from posthog.test.base import ( + APIBaseTest, + ClickhouseTestMixin, + _create_event, + _create_person, + snapshot_clickhouse_queries, +) +from posthog.test.test_journeys import journeys_for + +FORMAT_TIME = "%Y-%m-%d 00:00:00" +MAX_STEP_COLUMN = 0 +COUNT_COLUMN = 1 +PERSON_ID_COLUMN = 2 + + +def get_actors( + filters: Dict[str, Any], + team: Team, + funnelCorrelationType: Optional[FunnelCorrelationResultsType] = FunnelCorrelationResultsType.events, + funnelCorrelationPersonConverted: Optional[bool] = None, + funnelCorrelationPersonEntity: Optional[EventsNode] = None, + includeRecordings: Optional[bool] = True, +): + funnels_query = cast(FunnelsQuery, filter_to_query(filters)) + actors_query = FunnelsActorsQuery(source=funnels_query, includeRecordings=includeRecordings) + correlation_query = FunnelCorrelationQuery( + source=actors_query, + funnelCorrelationType=(funnelCorrelationType or FunnelCorrelationResultsType.events), + # funnelCorrelationNames=funnelCorrelationNames, + # funnelCorrelationExcludeNames=funnelCorrelationExcludeNames, + # funnelCorrelationExcludeEventNames=funnelCorrelationExcludeEventNames, + # funnelCorrelationEventNames=funnelCorrelationEventNames, + # funnelCorrelationEventExcludePropertyNames=funnelCorrelationEventExcludePropertyNames, + ) + correlation_actors_query = FunnelCorrelationActorsQuery( + source=correlation_query, + funnelCorrelationPersonConverted=funnelCorrelationPersonConverted, + funnelCorrelationPersonEntity=funnelCorrelationPersonEntity, + ) + actors_query = ActorsQuery( + source=correlation_actors_query, + select=["id", "person", *(["matched_recordings"] if includeRecordings else [])], + ) + response = ActorsQueryRunner(query=actors_query, team=team).calculate() + return response.results + + +class TestFunnelCorrelationsActors(ClickhouseTestMixin, APIBaseTest): + maxDiff = None + + def _setup_basic_test(self): + filters = { + "events": [ + {"id": "user signed up", "type": "events", "order": 0}, + {"id": "paid", "type": "events", "order": 1}, + ], + "insight": INSIGHT_FUNNELS, + "date_from": "2020-01-01", + "date_to": "2020-01-14", + } + + success_target_persons = [] + failure_target_persons = [] + events_by_person = {} + for i in range(10): + person_id = f"user_{i}" + person = _create_person(distinct_ids=[person_id], team_id=self.team.pk) + events_by_person[person_id] = [{"event": "user signed up", "timestamp": datetime(2020, 1, 2, 14)}] + + if i % 2 == 0: + events_by_person[person_id].append( + { + "event": "positively_related", + "timestamp": datetime(2020, 1, 3, 14), + } + ) + + success_target_persons.append(str(person.uuid)) + + events_by_person[person_id].append({"event": "paid", "timestamp": datetime(2020, 1, 4, 14)}) + + for i in range(10, 20): + person_id = f"user_{i}" + person = _create_person(distinct_ids=[person_id], team_id=self.team.pk) + events_by_person[person_id] = [{"event": "user signed up", "timestamp": datetime(2020, 1, 2, 14)}] + if i % 2 == 0: + events_by_person[person_id].append( + { + "event": "negatively_related", + "timestamp": datetime(2020, 1, 3, 14), + } + ) + failure_target_persons.append(str(person.uuid)) + + # One positively_related as failure + person_fail_id = f"user_fail" + person_fail = _create_person(distinct_ids=[person_fail_id], team_id=self.team.pk) + events_by_person[person_fail_id] = [ + {"event": "user signed up", "timestamp": datetime(2020, 1, 2, 14)}, + {"event": "positively_related", "timestamp": datetime(2020, 1, 3, 14)}, + ] + + # One negatively_related as success + person_success_id = f"user_succ" + person_succ = _create_person(distinct_ids=[person_success_id], team_id=self.team.pk) + events_by_person[person_success_id] = [ + {"event": "user signed up", "timestamp": datetime(2020, 1, 2, 14)}, + {"event": "negatively_related", "timestamp": datetime(2020, 1, 3, 14)}, + {"event": "paid", "timestamp": datetime(2020, 1, 4, 14)}, + ] + journeys_for(events_by_person, self.team, create_people=False) + + return ( + filters, + success_target_persons, + failure_target_persons, + person_fail, + person_succ, + ) + + def test_basic_funnel_correlation_with_events(self): + ( + filters, + success_target_persons, + failure_target_persons, + person_fail, + person_succ, + ) = self._setup_basic_test() + + # test positively_related successes + serialized_actors = get_actors( + filters, + self.team, + funnelCorrelationPersonConverted=True, + funnelCorrelationPersonEntity=EventsNode(event="positively_related"), + ) + + # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + self.assertCountEqual([str(col[1]["id"]) for col in serialized_actors], success_target_persons) + + # # test negatively_related failures + # filter = filter.shallow_clone( + # { + # "funnel_correlation_person_entity": { + # "id": "negatively_related", + # "type": "events", + # }, + # "funnel_correlation_person_converted": "falsE", + # } + # ) + + # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + # self.assertCountEqual([str(val["id"]) for val in serialized_actors], failure_target_persons) + + # # test positively_related failures + # filter = filter.shallow_clone( + # { + # "funnel_correlation_person_entity": { + # "id": "positively_related", + # "type": "events", + # }, + # "funnel_correlation_person_converted": "False", + # } + # ) + # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + # self.assertCountEqual([str(val["id"]) for val in serialized_actors], [str(person_fail.uuid)]) + + # # test negatively_related successes + # filter = filter.shallow_clone( + # { + # "funnel_correlation_person_entity": { + # "id": "negatively_related", + # "type": "events", + # }, + # "funnel_correlation_person_converted": "trUE", + # } + # ) + # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + # self.assertCountEqual([str(val["id"]) for val in serialized_actors], [str(person_succ.uuid)]) + + # # test all positively_related + # filter = filter.shallow_clone( + # { + # "funnel_correlation_person_entity": { + # "id": "positively_related", + # "type": "events", + # }, + # "funnel_correlation_person_converted": None, + # } + # ) + # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + # self.assertCountEqual( + # [str(val["id"]) for val in serialized_actors], + # [*success_target_persons, str(person_fail.uuid)], + # ) + + # # test all negatively_related + # filter = filter.shallow_clone( + # { + # "funnel_correlation_person_entity": { + # "id": "negatively_related", + # "type": "events", + # }, + # "funnel_correlation_person_converted": None, + # } + # ) + # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + # self.assertCountEqual( + # [str(val["id"]) for val in serialized_actors], + # [*failure_target_persons, str(person_succ.uuid)], + # ) + + @patch("posthog.tasks.calculate_cohort.insert_cohort_from_insight_filter.delay") + def test_create_funnel_correlation_cohort(self, _insert_cohort_from_insight_filter): + ( + filter, + success_target_persons, + failure_target_persons, + person_fail, + person_succ, + ) = self._setup_basic_test() + + params = { + "events": [ + {"id": "user signed up", "type": "events", "order": 0}, + {"id": "paid", "type": "events", "order": 1}, + ], + "insight": INSIGHT_FUNNELS, + "date_from": "2020-01-01", + "date_to": "2020-01-14", + "funnel_correlation_type": "events", + "funnel_correlation_person_entity": { + "id": "positively_related", + "type": "events", + }, + "funnel_correlation_person_converted": "TrUe", + } + + response = self.client.post( + f"/api/projects/{self.team.id}/cohorts/?{urllib.parse.urlencode(params)}", + {"name": "test", "is_static": True}, + ).json() + + cohort_id = response["id"] + + _insert_cohort_from_insight_filter.assert_called_once_with( + cohort_id, + { + "events": "[{'id': 'user signed up', 'type': 'events', 'order': 0}, {'id': 'paid', 'type': 'events', 'order': 1}]", + "insight": "FUNNELS", + "date_from": "2020-01-01", + "date_to": "2020-01-14", + "funnel_correlation_type": "events", + "funnel_correlation_person_entity": "{'id': 'positively_related', 'type': 'events'}", + "funnel_correlation_person_converted": "TrUe", + }, + ) + + insert_cohort_from_insight_filter(cohort_id, params) + + cohort = Cohort.objects.get(pk=cohort_id) + people = Person.objects.filter(cohort__id=cohort.pk) + self.assertEqual(cohort.errors_calculating, 0) + self.assertEqual(people.count(), 5) + self.assertEqual(cohort.count, 5) + + def test_people_arent_returned_multiple_times(self): + people = journeys_for( + { + "user_1": [ + {"event": "user signed up", "timestamp": datetime(2020, 1, 2, 14)}, + { + "event": "positively_related", + "timestamp": datetime(2020, 1, 3, 14), + }, + # duplicate event + { + "event": "positively_related", + "timestamp": datetime(2020, 1, 3, 14), + }, + {"event": "paid", "timestamp": datetime(2020, 1, 4, 14)}, + ] + }, + self.team, + ) + + filter = Filter( + data={ + "events": [ + {"id": "user signed up", "type": "events", "order": 0}, + {"id": "paid", "type": "events", "order": 1}, + ], + "insight": INSIGHT_FUNNELS, + "date_from": "2020-01-01", + "date_to": "2020-01-14", + "funnel_correlation_type": "events", + "funnel_correlation_person_entity": { + "id": "positively_related", + "type": "events", + }, + "funnel_correlation_person_converted": "TrUe", + } + ) + _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + self.assertCountEqual([str(val["id"]) for val in serialized_actors], [str(people["user_1"].uuid)]) + + @snapshot_clickhouse_queries + @freeze_time("2021-01-02 00:00:00.000Z") + def test_funnel_correlation_on_event_with_recordings(self): + p1 = _create_person(distinct_ids=["user_1"], team=self.team, properties={"foo": "bar"}) + _create_event( + event="$pageview", + distinct_id="user_1", + team=self.team, + timestamp=timezone.now(), + properties={"$session_id": "s2", "$window_id": "w1"}, + event_uuid="11111111-1111-1111-1111-111111111111", + ) + _create_event( + event="insight loaded", + distinct_id="user_1", + team=self.team, + timestamp=(timezone.now() + timedelta(minutes=2)), + properties={"$session_id": "s2", "$window_id": "w2"}, + event_uuid="31111111-1111-1111-1111-111111111111", + ) + _create_event( + event="insight analyzed", + distinct_id="user_1", + team=self.team, + timestamp=(timezone.now() + timedelta(minutes=3)), + properties={"$session_id": "s2", "$window_id": "w2"}, + event_uuid="21111111-1111-1111-1111-111111111111", + ) + + timestamp = datetime(2021, 1, 2, 0, 0, 0) + produce_replay_summary( + team_id=self.team.pk, + session_id="s2", + distinct_id="user_1", + first_timestamp=timestamp, + last_timestamp=timestamp, + ) + + # Success filter + filter = Filter( + data={ + "insight": INSIGHT_FUNNELS, + "date_from": "2021-01-01", + "date_to": "2021-01-08", + "funnel_correlation_type": "events", + "events": [ + {"id": "$pageview", "order": 0}, + {"id": "insight analyzed", "order": 1}, + ], + "include_recordings": "true", + "funnel_correlation_person_entity": { + "id": "insight loaded", + "type": "events", + }, + "funnel_correlation_person_converted": "True", + } + ) + _, results, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + self.assertEqual(results[0]["id"], p1.uuid) + self.assertEqual( + results[0]["matched_recordings"], + [ + { + "events": [ + { + "timestamp": timezone.now() + timedelta(minutes=3), + "uuid": UUID("21111111-1111-1111-1111-111111111111"), + "window_id": "w2", + } + ], + "session_id": "s2", + } + ], + ) + + # Drop off filter + filter = Filter( + data={ + "insight": INSIGHT_FUNNELS, + "date_from": "2021-01-01", + "date_to": "2021-01-08", + "funnel_correlation_type": "events", + "events": [ + {"id": "$pageview", "order": 0}, + {"id": "insight analyzed", "order": 1}, + {"id": "insight updated", "order": 2}, + ], + "include_recordings": "true", + "funnel_correlation_person_entity": { + "id": "insight loaded", + "type": "events", + }, + "funnel_correlation_person_converted": "False", + } + ) + _, results, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + self.assertEqual(results[0]["id"], p1.uuid) + self.assertEqual( + results[0]["matched_recordings"], + [ + { + "events": [ + { + "timestamp": timezone.now() + timedelta(minutes=3), + "uuid": UUID("21111111-1111-1111-1111-111111111111"), + "window_id": "w2", + } + ], + "session_id": "s2", + } + ], + ) + + @snapshot_clickhouse_queries + @freeze_time("2021-01-02 00:00:00.000Z") + def test_funnel_correlation_on_properties_with_recordings(self): + p1 = _create_person(distinct_ids=["user_1"], team=self.team, properties={"foo": "bar"}) + _create_event( + event="$pageview", + distinct_id="user_1", + team=self.team, + timestamp=timezone.now(), + properties={"$session_id": "s2", "$window_id": "w1"}, + event_uuid="11111111-1111-1111-1111-111111111111", + ) + _create_event( + event="insight analyzed", + distinct_id="user_1", + team=self.team, + timestamp=(timezone.now() + timedelta(minutes=3)), + properties={"$session_id": "s2", "$window_id": "w2"}, + event_uuid="21111111-1111-1111-1111-111111111111", + ) + + timestamp = datetime(2021, 1, 2, 0, 0, 0) + produce_replay_summary( + team_id=self.team.pk, + session_id="s2", + distinct_id="user_1", + first_timestamp=timestamp, + last_timestamp=timestamp, + ) + + # Success filter + filter = Filter( + data={ + "insight": INSIGHT_FUNNELS, + "date_from": "2021-01-01", + "date_to": "2021-01-08", + "funnel_correlation_type": "properties", + "events": [ + {"id": "$pageview", "order": 0}, + {"id": "insight analyzed", "order": 1}, + ], + "include_recordings": "true", + "funnel_correlation_property_values": [ + { + "key": "foo", + "value": "bar", + "operator": "exact", + "type": "person", + } + ], + "funnel_correlation_person_converted": "True", + } + ) + _, results, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + self.assertEqual(results[0]["id"], p1.uuid) + self.assertEqual( + results[0]["matched_recordings"], + [ + { + "events": [ + { + "timestamp": timezone.now() + timedelta(minutes=3), + "uuid": UUID("21111111-1111-1111-1111-111111111111"), + "window_id": "w2", + } + ], + "session_id": "s2", + } + ], + ) + + @snapshot_clickhouse_queries + @freeze_time("2021-01-02 00:00:00.000Z") + def test_strict_funnel_correlation_with_recordings(self): + # First use that successfully completes the strict funnel + p1 = _create_person(distinct_ids=["user_1"], team=self.team, properties={"foo": "bar"}) + _create_event( + event="$pageview", + distinct_id="user_1", + team=self.team, + timestamp=timezone.now(), + properties={"$session_id": "s2", "$window_id": "w1"}, + event_uuid="11111111-1111-1111-1111-111111111111", + ) + _create_event( + event="insight analyzed", + distinct_id="user_1", + team=self.team, + timestamp=(timezone.now() + timedelta(minutes=3)), + properties={"$session_id": "s2", "$window_id": "w2"}, + event_uuid="31111111-1111-1111-1111-111111111111", + ) + _create_event( + event="insight analyzed", # Second event should not be returned + distinct_id="user_1", + team=self.team, + timestamp=(timezone.now() + timedelta(minutes=4)), + properties={"$session_id": "s2", "$window_id": "w2"}, + event_uuid="41111111-1111-1111-1111-111111111111", + ) + timestamp = datetime(2021, 1, 2, 0, 0, 0) + produce_replay_summary( + team_id=self.team.pk, + session_id="s2", + distinct_id="user_1", + first_timestamp=timestamp, + last_timestamp=timestamp, + ) + + # Second user with strict funnel drop off, but completed the step events for a normal funnel + p2 = _create_person(distinct_ids=["user_2"], team=self.team, properties={"foo": "bar"}) + _create_event( + event="$pageview", + distinct_id="user_2", + team=self.team, + timestamp=timezone.now(), + properties={"$session_id": "s3", "$window_id": "w1"}, + event_uuid="51111111-1111-1111-1111-111111111111", + ) + _create_event( + event="insight loaded", # Interupting event + distinct_id="user_2", + team=self.team, + timestamp=(timezone.now() + timedelta(minutes=3)), + properties={"$session_id": "s3", "$window_id": "w2"}, + event_uuid="61111111-1111-1111-1111-111111111111", + ) + _create_event( + event="insight analyzed", + distinct_id="user_2", + team=self.team, + timestamp=(timezone.now() + timedelta(minutes=4)), + properties={"$session_id": "s3", "$window_id": "w2"}, + event_uuid="71111111-1111-1111-1111-111111111111", + ) + timestamp1 = datetime(2021, 1, 2, 0, 0, 0) + produce_replay_summary( + team_id=self.team.pk, + session_id="s3", + distinct_id="user_2", + first_timestamp=timestamp1, + last_timestamp=timestamp1, + ) + + # Success filter + filter = Filter( + data={ + "insight": INSIGHT_FUNNELS, + "date_from": "2021-01-01", + "date_to": "2021-01-08", + "funnel_order_type": "strict", + "funnel_correlation_type": "properties", + "events": [ + {"id": "$pageview", "order": 0}, + {"id": "insight analyzed", "order": 1}, + ], + "include_recordings": "true", + "funnel_correlation_property_values": [ + { + "key": "foo", + "value": "bar", + "operator": "exact", + "type": "person", + } + ], + "funnel_correlation_person_converted": "True", + } + ) + _, results, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + self.assertEqual(len(results), 1) + self.assertEqual(results[0]["id"], p1.uuid) + self.assertEqual( + results[0]["matched_recordings"], + [ + { + "events": [ + { + "timestamp": timezone.now() + timedelta(minutes=3), + "uuid": UUID("31111111-1111-1111-1111-111111111111"), + "window_id": "w2", + } + ], + "session_id": "s2", + } + ], + ) + + # Drop off filter + filter = Filter( + data={ + "insight": INSIGHT_FUNNELS, + "date_from": "2021-01-01", + "date_to": "2021-01-08", + "funnel_order_type": "strict", + "funnel_correlation_type": "properties", + "events": [ + {"id": "$pageview", "order": 0}, + {"id": "insight analyzed", "order": 1}, + ], + "include_recordings": "true", + "funnel_correlation_property_values": [ + { + "key": "foo", + "value": "bar", + "operator": "exact", + "type": "person", + } + ], + "funnel_correlation_person_converted": "False", + } + ) + _, results, _ = FunnelCorrelationActors(filter, self.team).get_actors() + + self.assertEqual(results[0]["id"], p2.uuid) + self.assertEqual( + results[0]["matched_recordings"], + [ + { + "events": [ + { + "timestamp": timezone.now(), + "uuid": UUID("51111111-1111-1111-1111-111111111111"), + "window_id": "w1", + } + ], + "session_id": "s3", + } + ], + ) From ed1fefeabc019d55e433364e0b45f0b060d22dfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Wed, 6 Mar 2024 21:35:56 +0100 Subject: [PATCH 05/43] more tests --- .../test/test_funnel_correlations_persons.py | 67 +++++++------------ 1 file changed, 26 insertions(+), 41 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py index aa4d644285bea..b20eda9047ba8 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py @@ -166,52 +166,37 @@ def test_basic_funnel_correlation_with_events(self): funnelCorrelationPersonEntity=EventsNode(event="positively_related"), ) - # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() - self.assertCountEqual([str(col[1]["id"]) for col in serialized_actors], success_target_persons) - # # test negatively_related failures - # filter = filter.shallow_clone( - # { - # "funnel_correlation_person_entity": { - # "id": "negatively_related", - # "type": "events", - # }, - # "funnel_correlation_person_converted": "falsE", - # } - # ) - - # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() + # test negatively_related failures + serialized_actors = get_actors( + filters, + self.team, + funnelCorrelationPersonConverted=False, + funnelCorrelationPersonEntity=EventsNode(event="negatively_related"), + ) - # self.assertCountEqual([str(val["id"]) for val in serialized_actors], failure_target_persons) + self.assertCountEqual([str(col[1]["id"]) for col in serialized_actors], failure_target_persons) - # # test positively_related failures - # filter = filter.shallow_clone( - # { - # "funnel_correlation_person_entity": { - # "id": "positively_related", - # "type": "events", - # }, - # "funnel_correlation_person_converted": "False", - # } - # ) - # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() + # test positively_related failures + serialized_actors = get_actors( + filters, + self.team, + funnelCorrelationPersonConverted=False, + funnelCorrelationPersonEntity=EventsNode(event="positively_related"), + ) - # self.assertCountEqual([str(val["id"]) for val in serialized_actors], [str(person_fail.uuid)]) + self.assertCountEqual([str(col[1]["id"]) for col in serialized_actors], [str(person_fail.uuid)]) - # # test negatively_related successes - # filter = filter.shallow_clone( - # { - # "funnel_correlation_person_entity": { - # "id": "negatively_related", - # "type": "events", - # }, - # "funnel_correlation_person_converted": "trUE", - # } - # ) - # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() + # test negatively_related successes + serialized_actors = get_actors( + filters, + self.team, + funnelCorrelationPersonConverted=True, + funnelCorrelationPersonEntity=EventsNode(event="negatively_related"), + ) - # self.assertCountEqual([str(val["id"]) for val in serialized_actors], [str(person_succ.uuid)]) + self.assertCountEqual([str(col[1]["id"]) for col in serialized_actors], [str(person_succ.uuid)]) # # test all positively_related # filter = filter.shallow_clone( @@ -226,7 +211,7 @@ def test_basic_funnel_correlation_with_events(self): # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() # self.assertCountEqual( - # [str(val["id"]) for val in serialized_actors], + # [str(col[1]["id"]) for col in serialized_actors], # [*success_target_persons, str(person_fail.uuid)], # ) @@ -243,7 +228,7 @@ def test_basic_funnel_correlation_with_events(self): # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() # self.assertCountEqual( - # [str(val["id"]) for val in serialized_actors], + # [str(col[1]["id"]) for col in serialized_actors], # [*failure_target_persons, str(person_succ.uuid)], # ) From 256eeb8d142b656f915f4f4e6f6057143c488183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Wed, 6 Mar 2024 21:38:02 +0100 Subject: [PATCH 06/43] more tests --- .../test/test_funnel_correlations_persons.py | 58 ++++++++----------- 1 file changed, 25 insertions(+), 33 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py index b20eda9047ba8..a97968cf87b15 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py @@ -198,39 +198,31 @@ def test_basic_funnel_correlation_with_events(self): self.assertCountEqual([str(col[1]["id"]) for col in serialized_actors], [str(person_succ.uuid)]) - # # test all positively_related - # filter = filter.shallow_clone( - # { - # "funnel_correlation_person_entity": { - # "id": "positively_related", - # "type": "events", - # }, - # "funnel_correlation_person_converted": None, - # } - # ) - # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() - - # self.assertCountEqual( - # [str(col[1]["id"]) for col in serialized_actors], - # [*success_target_persons, str(person_fail.uuid)], - # ) - - # # test all negatively_related - # filter = filter.shallow_clone( - # { - # "funnel_correlation_person_entity": { - # "id": "negatively_related", - # "type": "events", - # }, - # "funnel_correlation_person_converted": None, - # } - # ) - # _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() - - # self.assertCountEqual( - # [str(col[1]["id"]) for col in serialized_actors], - # [*failure_target_persons, str(person_succ.uuid)], - # ) + # test all positively_related + serialized_actors = get_actors( + filters, + self.team, + funnelCorrelationPersonConverted=None, + funnelCorrelationPersonEntity=EventsNode(event="positively_related"), + ) + + self.assertCountEqual( + [str(col[1]["id"]) for col in serialized_actors], + [*success_target_persons, str(person_fail.uuid)], + ) + + # test all negatively_related + serialized_actors = get_actors( + filters, + self.team, + funnelCorrelationPersonConverted=None, + funnelCorrelationPersonEntity=EventsNode(event="negatively_related"), + ) + + self.assertCountEqual( + [str(col[1]["id"]) for col in serialized_actors], + [*failure_target_persons, str(person_succ.uuid)], + ) @patch("posthog.tasks.calculate_cohort.insert_cohort_from_insight_filter.delay") def test_create_funnel_correlation_cohort(self, _insert_cohort_from_insight_filter): From 74d6c4a741f20c208909d7b58b0e398d4126836f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Wed, 6 Mar 2024 22:18:39 +0100 Subject: [PATCH 07/43] more tests and properties query --- .../funnel_correlation_query_runner.py | 91 ++--- .../test/test_funnel_correlations_persons.py | 385 ++++++++---------- 2 files changed, 223 insertions(+), 253 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py b/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py index cde64e1e01083..bb0ab7f047c72 100644 --- a/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py +++ b/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py @@ -348,12 +348,11 @@ def to_actors_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: # ).to_dict() # } # ) - # return self.properties_actor_query() - return parse_select("SELECT 1") + return self.properties_actor_query() else: return self.events_actor_query() - def events_actor_query(self, limit_actors: Optional[bool] = True) -> ast.SelectQuery: + def events_actor_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: assert self.correlation_actors_query is not None if not self.correlation_actors_query.funnelCorrelationPersonEntity: @@ -411,7 +410,6 @@ def events_actor_query(self, limit_actors: Optional[bool] = True) -> ast.SelectQ "funnel_persons_query": funnel_persons_query, "date_from": date_from, "date_to": date_to, - # "prop_query": prop_query, }, ) @@ -419,51 +417,46 @@ def events_actor_query(self, limit_actors: Optional[bool] = True) -> ast.SelectQ return query - # def properties_actor_query( - # self, - # limit_actors: Optional[bool] = True, - # extra_fields: Optional[List[str]] = None, - # ) -> ast.SelectQuery: - # if not self._filter.correlation_property_values: - # raise ValidationError("Property Correlation expects atleast one Property to get persons for") - - # ( - # funnel_persons_query, - # funnel_persons_params, - # ) = self._funnel_correlation.get_funnel_actors_cte() - - # conversion_filter = ( - # f'funnel_actors.steps {"=" if self._filter.correlation_persons_converted else "<>"} target_step' - # if self._filter.correlation_persons_converted is not None - # else "" - # ) - - # recording_event_select_statement = ( - # ", any(funnel_actors.matching_events) AS matching_events" if self._filter.include_recordings else "" - # ) - - # query = f""" - # WITH - # funnel_actors AS ({funnel_persons_query}), - # %(target_step)s AS target_step - # SELECT - # funnel_actors.actor_id AS actor_id - # {recording_event_select_statement} - # FROM funnel_actors - # WHERE {conversion_filter} - # GROUP BY funnel_actors.actor_id - # ORDER BY actor_id - # {"LIMIT %(limit)s" if limit_actors else ""} - # {"OFFSET %(offset)s" if limit_actors else ""} - # """ - # params = { - # **funnel_persons_params, - # "target_step": len(self._filter.entities), - # "limit": self._filter.correlation_person_limit, - # "offset": self._filter.correlation_person_offset, - # } - - # return query, params + def properties_actor_query( + self, + ) -> ast.SelectQuery | ast.SelectUnionQuery: + assert self.correlation_actors_query is not None + + if not self.correlation_actors_query.funnelCorrelationPropertyValues: + raise ValidationError("Property Correlation expects atleast one Property to get persons for") + + target_step = self.context.max_steps + funnel_persons_query = self.get_funnel_actors_cte() + + conversion_filter = ( + f'funnel_actors.steps {"=" if self.correlation_actors_query.funnelCorrelationPersonConverted else "<>"} target_step' + if self.correlation_actors_query.funnelCorrelationPersonConverted is not None + else "" + ) + + recording_event_select_statement = ( + ", any(funnel_actors.matching_events) AS matching_events" if self.actors_query.includeRecordings else "" + ) + + query = parse_select( + f""" + WITH + funnel_actors as ( + {{funnel_persons_query}} + ), + {target_step} AS target_step + SELECT + funnel_actors.actor_id AS actor_id + {recording_event_select_statement} + FROM funnel_actors + WHERE {conversion_filter} + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id + """, + placeholders={"funnel_persons_query": funnel_persons_query}, + ) + + return query def get_event_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: funnel_persons_query = self.get_funnel_actors_cte() diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py index a97968cf87b15..7ff79567821bd 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py @@ -1,20 +1,13 @@ from typing import Any, Dict, Optional, cast -import urllib.parse from datetime import datetime, timedelta -from unittest.mock import patch from uuid import UUID from django.utils import timezone from freezegun import freeze_time -from ee.clickhouse.queries.funnels.funnel_correlation_persons import ( - FunnelCorrelationActors, -) from posthog.constants import INSIGHT_FUNNELS from posthog.hogql_queries.actors_query_runner import ActorsQueryRunner from posthog.hogql_queries.legacy_compatibility.filter_to_query import filter_to_query -from posthog.models import Cohort, Filter -from posthog.models.person import Person from posthog.models.team.team import Team from posthog.schema import ( ActorsQuery, @@ -28,7 +21,6 @@ from posthog.session_recordings.queries.test.session_replay_sql import ( produce_replay_summary, ) -from posthog.tasks.calculate_cohort import insert_cohort_from_insight_filter from posthog.test.base import ( APIBaseTest, ClickhouseTestMixin, @@ -50,6 +42,7 @@ def get_actors( funnelCorrelationType: Optional[FunnelCorrelationResultsType] = FunnelCorrelationResultsType.events, funnelCorrelationPersonConverted: Optional[bool] = None, funnelCorrelationPersonEntity: Optional[EventsNode] = None, + funnelCorrelationPropertyValues=None, includeRecordings: Optional[bool] = True, ): funnels_query = cast(FunnelsQuery, filter_to_query(filters)) @@ -67,6 +60,7 @@ def get_actors( source=correlation_query, funnelCorrelationPersonConverted=funnelCorrelationPersonConverted, funnelCorrelationPersonEntity=funnelCorrelationPersonEntity, + funnelCorrelationPropertyValues=funnelCorrelationPropertyValues, ) actors_query = ActorsQuery( source=correlation_actors_query, @@ -166,7 +160,7 @@ def test_basic_funnel_correlation_with_events(self): funnelCorrelationPersonEntity=EventsNode(event="positively_related"), ) - self.assertCountEqual([str(col[1]["id"]) for col in serialized_actors], success_target_persons) + self.assertCountEqual([str(val[1]["id"]) for val in serialized_actors], success_target_persons) # test negatively_related failures serialized_actors = get_actors( @@ -176,7 +170,7 @@ def test_basic_funnel_correlation_with_events(self): funnelCorrelationPersonEntity=EventsNode(event="negatively_related"), ) - self.assertCountEqual([str(col[1]["id"]) for col in serialized_actors], failure_target_persons) + self.assertCountEqual([str(val[1]["id"]) for val in serialized_actors], failure_target_persons) # test positively_related failures serialized_actors = get_actors( @@ -186,7 +180,7 @@ def test_basic_funnel_correlation_with_events(self): funnelCorrelationPersonEntity=EventsNode(event="positively_related"), ) - self.assertCountEqual([str(col[1]["id"]) for col in serialized_actors], [str(person_fail.uuid)]) + self.assertCountEqual([str(val[1]["id"]) for val in serialized_actors], [str(person_fail.uuid)]) # test negatively_related successes serialized_actors = get_actors( @@ -196,7 +190,7 @@ def test_basic_funnel_correlation_with_events(self): funnelCorrelationPersonEntity=EventsNode(event="negatively_related"), ) - self.assertCountEqual([str(col[1]["id"]) for col in serialized_actors], [str(person_succ.uuid)]) + self.assertCountEqual([str(val[1]["id"]) for val in serialized_actors], [str(person_succ.uuid)]) # test all positively_related serialized_actors = get_actors( @@ -207,7 +201,7 @@ def test_basic_funnel_correlation_with_events(self): ) self.assertCountEqual( - [str(col[1]["id"]) for col in serialized_actors], + [str(val[1]["id"]) for val in serialized_actors], [*success_target_persons, str(person_fail.uuid)], ) @@ -220,63 +214,63 @@ def test_basic_funnel_correlation_with_events(self): ) self.assertCountEqual( - [str(col[1]["id"]) for col in serialized_actors], + [str(val[1]["id"]) for val in serialized_actors], [*failure_target_persons, str(person_succ.uuid)], ) - @patch("posthog.tasks.calculate_cohort.insert_cohort_from_insight_filter.delay") - def test_create_funnel_correlation_cohort(self, _insert_cohort_from_insight_filter): - ( - filter, - success_target_persons, - failure_target_persons, - person_fail, - person_succ, - ) = self._setup_basic_test() - - params = { - "events": [ - {"id": "user signed up", "type": "events", "order": 0}, - {"id": "paid", "type": "events", "order": 1}, - ], - "insight": INSIGHT_FUNNELS, - "date_from": "2020-01-01", - "date_to": "2020-01-14", - "funnel_correlation_type": "events", - "funnel_correlation_person_entity": { - "id": "positively_related", - "type": "events", - }, - "funnel_correlation_person_converted": "TrUe", - } - - response = self.client.post( - f"/api/projects/{self.team.id}/cohorts/?{urllib.parse.urlencode(params)}", - {"name": "test", "is_static": True}, - ).json() - - cohort_id = response["id"] - - _insert_cohort_from_insight_filter.assert_called_once_with( - cohort_id, - { - "events": "[{'id': 'user signed up', 'type': 'events', 'order': 0}, {'id': 'paid', 'type': 'events', 'order': 1}]", - "insight": "FUNNELS", - "date_from": "2020-01-01", - "date_to": "2020-01-14", - "funnel_correlation_type": "events", - "funnel_correlation_person_entity": "{'id': 'positively_related', 'type': 'events'}", - "funnel_correlation_person_converted": "TrUe", - }, - ) - - insert_cohort_from_insight_filter(cohort_id, params) - - cohort = Cohort.objects.get(pk=cohort_id) - people = Person.objects.filter(cohort__id=cohort.pk) - self.assertEqual(cohort.errors_calculating, 0) - self.assertEqual(people.count(), 5) - self.assertEqual(cohort.count, 5) + # @patch("posthog.tasks.calculate_cohort.insert_cohort_from_insight_filter.delay") + # def test_create_funnel_correlation_cohort(self, _insert_cohort_from_insight_filter): + # ( + # filter, + # success_target_persons, + # failure_target_persons, + # person_fail, + # person_succ, + # ) = self._setup_basic_test() + + # params = { + # "events": [ + # {"id": "user signed up", "type": "events", "order": 0}, + # {"id": "paid", "type": "events", "order": 1}, + # ], + # "insight": INSIGHT_FUNNELS, + # "date_from": "2020-01-01", + # "date_to": "2020-01-14", + # "funnel_correlation_type": "events", + # "funnel_correlation_person_entity": { + # "id": "positively_related", + # "type": "events", + # }, + # "funnel_correlation_person_converted": "TrUe", + # } + + # response = self.client.post( + # f"/api/projects/{self.team.id}/cohorts/?{urllib.parse.urlencode(params)}", + # {"name": "test", "is_static": True}, + # ).json() + + # cohort_id = response["id"] + + # _insert_cohort_from_insight_filter.assert_called_once_with( + # cohort_id, + # { + # "events": "[{'id': 'user signed up', 'type': 'events', 'order': 0}, {'id': 'paid', 'type': 'events', 'order': 1}]", + # "insight": "FUNNELS", + # "date_from": "2020-01-01", + # "date_to": "2020-01-14", + # "funnel_correlation_type": "events", + # "funnel_correlation_person_entity": "{'id': 'positively_related', 'type': 'events'}", + # "funnel_correlation_person_converted": "TrUe", + # }, + # ) + + # insert_cohort_from_insight_filter(cohort_id, params) + + # cohort = Cohort.objects.get(pk=cohort_id) + # people = Person.objects.filter(cohort__id=cohort.pk) + # self.assertEqual(cohort.errors_calculating, 0) + # self.assertEqual(people.count(), 5) + # self.assertEqual(cohort.count, 5) def test_people_arent_returned_multiple_times(self): people = journeys_for( @@ -298,26 +292,24 @@ def test_people_arent_returned_multiple_times(self): self.team, ) - filter = Filter( - data={ - "events": [ - {"id": "user signed up", "type": "events", "order": 0}, - {"id": "paid", "type": "events", "order": 1}, - ], - "insight": INSIGHT_FUNNELS, - "date_from": "2020-01-01", - "date_to": "2020-01-14", - "funnel_correlation_type": "events", - "funnel_correlation_person_entity": { - "id": "positively_related", - "type": "events", - }, - "funnel_correlation_person_converted": "TrUe", - } + filters = { + "events": [ + {"id": "user signed up", "type": "events", "order": 0}, + {"id": "paid", "type": "events", "order": 1}, + ], + "insight": INSIGHT_FUNNELS, + "date_from": "2020-01-01", + "date_to": "2020-01-14", + } + + serialized_actors = get_actors( + filters, + self.team, + funnelCorrelationPersonConverted=True, + funnelCorrelationPersonEntity=EventsNode(event="positively_related"), ) - _, serialized_actors, _ = FunnelCorrelationActors(filter, self.team).get_actors() - self.assertCountEqual([str(val["id"]) for val in serialized_actors], [str(people["user_1"].uuid)]) + self.assertCountEqual([str(val[1]["id"]) for val in serialized_actors], [str(people["user_1"].uuid)]) @snapshot_clickhouse_queries @freeze_time("2021-01-02 00:00:00.000Z") @@ -358,29 +350,26 @@ def test_funnel_correlation_on_event_with_recordings(self): ) # Success filter - filter = Filter( - data={ - "insight": INSIGHT_FUNNELS, - "date_from": "2021-01-01", - "date_to": "2021-01-08", - "funnel_correlation_type": "events", - "events": [ - {"id": "$pageview", "order": 0}, - {"id": "insight analyzed", "order": 1}, - ], - "include_recordings": "true", - "funnel_correlation_person_entity": { - "id": "insight loaded", - "type": "events", - }, - "funnel_correlation_person_converted": "True", - } - ) - _, results, _ = FunnelCorrelationActors(filter, self.team).get_actors() - - self.assertEqual(results[0]["id"], p1.uuid) + filters = { + "insight": INSIGHT_FUNNELS, + "date_from": "2021-01-01", + "date_to": "2021-01-08", + "events": [ + {"id": "$pageview", "order": 0}, + {"id": "insight analyzed", "order": 1}, + ], + } + + results = get_actors( + filters, + self.team, + funnelCorrelationPersonConverted=True, + funnelCorrelationPersonEntity=EventsNode(event="insight loaded"), + ) + + self.assertEqual(results[0][1]["id"], p1.uuid) self.assertEqual( - results[0]["matched_recordings"], + list(results[0][2]), [ { "events": [ @@ -396,30 +385,27 @@ def test_funnel_correlation_on_event_with_recordings(self): ) # Drop off filter - filter = Filter( - data={ - "insight": INSIGHT_FUNNELS, - "date_from": "2021-01-01", - "date_to": "2021-01-08", - "funnel_correlation_type": "events", - "events": [ - {"id": "$pageview", "order": 0}, - {"id": "insight analyzed", "order": 1}, - {"id": "insight updated", "order": 2}, - ], - "include_recordings": "true", - "funnel_correlation_person_entity": { - "id": "insight loaded", - "type": "events", - }, - "funnel_correlation_person_converted": "False", - } - ) - _, results, _ = FunnelCorrelationActors(filter, self.team).get_actors() - - self.assertEqual(results[0]["id"], p1.uuid) + filters = { + "insight": INSIGHT_FUNNELS, + "date_from": "2021-01-01", + "date_to": "2021-01-08", + "funnel_correlation_type": "events", + "events": [ + {"id": "$pageview", "order": 0}, + {"id": "insight analyzed", "order": 1}, + {"id": "insight updated", "order": 2}, + ], + } + results = get_actors( + filters, + self.team, + funnelCorrelationPersonConverted=False, + funnelCorrelationPersonEntity=EventsNode(event="insight loaded"), + ) + + self.assertEqual(results[0][1]["id"], p1.uuid) self.assertEqual( - results[0]["matched_recordings"], + list(results[0][2]), [ { "events": [ @@ -465,33 +451,33 @@ def test_funnel_correlation_on_properties_with_recordings(self): ) # Success filter - filter = Filter( - data={ - "insight": INSIGHT_FUNNELS, - "date_from": "2021-01-01", - "date_to": "2021-01-08", - "funnel_correlation_type": "properties", - "events": [ - {"id": "$pageview", "order": 0}, - {"id": "insight analyzed", "order": 1}, - ], - "include_recordings": "true", - "funnel_correlation_property_values": [ - { - "key": "foo", - "value": "bar", - "operator": "exact", - "type": "person", - } - ], - "funnel_correlation_person_converted": "True", - } + filters = { + "insight": INSIGHT_FUNNELS, + "date_from": "2021-01-01", + "date_to": "2021-01-08", + "events": [ + {"id": "$pageview", "order": 0}, + {"id": "insight analyzed", "order": 1}, + ], + } + results = get_actors( + filters, + self.team, + funnelCorrelationType=FunnelCorrelationResultsType.properties, + funnelCorrelationPersonConverted=True, + funnelCorrelationPropertyValues=[ + { + "key": "foo", + "value": "bar", + "operator": "exact", + "type": "person", + } + ], ) - _, results, _ = FunnelCorrelationActors(filter, self.team).get_actors() - self.assertEqual(results[0]["id"], p1.uuid) + self.assertEqual(results[0][1]["id"], p1.uuid) self.assertEqual( - results[0]["matched_recordings"], + list(results[0][2]), [ { "events": [ @@ -580,35 +566,36 @@ def test_strict_funnel_correlation_with_recordings(self): ) # Success filter - filter = Filter( - data={ - "insight": INSIGHT_FUNNELS, - "date_from": "2021-01-01", - "date_to": "2021-01-08", - "funnel_order_type": "strict", - "funnel_correlation_type": "properties", - "events": [ - {"id": "$pageview", "order": 0}, - {"id": "insight analyzed", "order": 1}, - ], - "include_recordings": "true", - "funnel_correlation_property_values": [ - { - "key": "foo", - "value": "bar", - "operator": "exact", - "type": "person", - } - ], - "funnel_correlation_person_converted": "True", - } + filters = { + "insight": INSIGHT_FUNNELS, + "date_from": "2021-01-01", + "date_to": "2021-01-08", + "funnel_order_type": "strict", + "events": [ + {"id": "$pageview", "order": 0}, + {"id": "insight analyzed", "order": 1}, + ], + } + + results = get_actors( + filters, + self.team, + funnelCorrelationType=FunnelCorrelationResultsType.properties, + funnelCorrelationPersonConverted=True, + funnelCorrelationPropertyValues=[ + { + "key": "foo", + "value": "bar", + "operator": "exact", + "type": "person", + } + ], ) - _, results, _ = FunnelCorrelationActors(filter, self.team).get_actors() self.assertEqual(len(results), 1) - self.assertEqual(results[0]["id"], p1.uuid) + self.assertEqual(results[0][1]["id"], p1.uuid) self.assertEqual( - results[0]["matched_recordings"], + list(results[0][2]), [ { "events": [ @@ -624,34 +611,24 @@ def test_strict_funnel_correlation_with_recordings(self): ) # Drop off filter - filter = Filter( - data={ - "insight": INSIGHT_FUNNELS, - "date_from": "2021-01-01", - "date_to": "2021-01-08", - "funnel_order_type": "strict", - "funnel_correlation_type": "properties", - "events": [ - {"id": "$pageview", "order": 0}, - {"id": "insight analyzed", "order": 1}, - ], - "include_recordings": "true", - "funnel_correlation_property_values": [ - { - "key": "foo", - "value": "bar", - "operator": "exact", - "type": "person", - } - ], - "funnel_correlation_person_converted": "False", - } + results = get_actors( + filters, + self.team, + funnelCorrelationType=FunnelCorrelationResultsType.properties, + funnelCorrelationPersonConverted=False, + funnelCorrelationPropertyValues=[ + { + "key": "foo", + "value": "bar", + "operator": "exact", + "type": "person", + } + ], ) - _, results, _ = FunnelCorrelationActors(filter, self.team).get_actors() - self.assertEqual(results[0]["id"], p2.uuid) + self.assertEqual(results[0][1]["id"], p2.uuid) self.assertEqual( - results[0]["matched_recordings"], + list(results[0][2]), [ { "events": [ From dd447ff43e954f544f7f6113bf9587f4efcc7850 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Mar 2024 21:40:00 +0000 Subject: [PATCH 08/43] Update query snapshots --- .../test_funnel_correlations_persons.ambr | 743 ++++++++++++++++++ 1 file changed, 743 insertions(+) create mode 100644 posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr new file mode 100644 index 0000000000000..534915755ddff --- /dev/null +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr @@ -0,0 +1,743 @@ +# serializer version: 1 +# name: TestFunnelCorrelationsActors.test_funnel_correlation_on_event_with_recordings + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS event__pdi ON equals(event.distinct_id, event__pdi.distinct_id) + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, '$pageview'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed']), equals(event.event, 'insight loaded'), ifNull(equals(funnel_actors.steps, 2), 0)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestFunnelCorrelationsActors.test_funnel_correlation_on_event_with_recordings.1 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['s2']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestFunnelCorrelationsActors.test_funnel_correlation_on_event_with_recordings.2 + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS event__pdi ON equals(event.distinct_id, event__pdi.distinct_id) + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + median(step_2_conversion_time) AS step_2_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(step_2_matching_event) AS step_2_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_2, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + step_2_conversion_time AS step_2_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event, + latest_0 AS latest_0, + latest_2 AS latest_2, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + step_2 AS step_2, + latest_2 AS latest_2, + uuid_2 AS uuid_2, + `$session_id_2` AS `$session_id_2`, + `$window_id_2` AS `$window_id_2`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(latest_0, toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1)) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(latest_1, toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + step_2 AS step_2, + min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, + last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, + last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, + last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + step_2 AS step_2, + if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2, + if(ifNull(less(latest_2, latest_1), 0), NULL, uuid_2) AS uuid_2, + if(ifNull(less(latest_2, latest_1), 0), NULL, `$session_id_2`) AS `$session_id_2`, + if(ifNull(less(latest_2, latest_1), 0), NULL, `$window_id_2`) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1`, + step_2 AS step_2, + min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, + last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, + last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, + last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, '$pageview'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, + if(equals(e.event, 'insight updated'), 1, 0) AS step_2, + if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, + if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, + if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, + if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed', 'insight updated'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2, 3]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed', 'insight updated']), equals(event.event, 'insight loaded'), ifNull(notEquals(funnel_actors.steps, 3), 1)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestFunnelCorrelationsActors.test_funnel_correlation_on_event_with_recordings.3 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['s2']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestFunnelCorrelationsActors.test_funnel_correlation_on_properties_with_recordings + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, '$pageview'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestFunnelCorrelationsActors.test_funnel_correlation_on_properties_with_recordings.1 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['s2']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestFunnelCorrelationsActors.test_strict_funnel_correlation_with_recordings + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS latest_1, + min(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS uuid_1, + min(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$session_id_1`, + min(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, '$pageview'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC')))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestFunnelCorrelationsActors.test_strict_funnel_correlation_with_recordings.1 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['s2']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestFunnelCorrelationsActors.test_strict_funnel_correlation_with_recordings.2 + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS latest_1, + min(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS uuid_1, + min(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$session_id_1`, + min(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, '$pageview'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC')))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestFunnelCorrelationsActors.test_strict_funnel_correlation_with_recordings.3 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['s3']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- From 5304d104df93b78161b8e8c06af74a1131a2e720 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Mar 2024 21:46:53 +0000 Subject: [PATCH 09/43] Update UI snapshots for `webkit` (2) --- ...etention-breakdown-edit--light--webkit.png | Bin 64291 -> 74744 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--retention-breakdown-edit--light--webkit.png b/frontend/__snapshots__/scenes-app-insights--retention-breakdown-edit--light--webkit.png index f8789cb48d32ded3ff43237fbca6cdb053e844b5..7352fa8a916f898a9498ce3659ab5d239a640711 100644 GIT binary patch delta 18035 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

v*S8lSV?dewP6Q>#Y3jVKy-_ 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 pX#dMo{=7q#oE{J{SS^-u6F Date: Wed, 6 Mar 2024 22:46:10 +0100 Subject: [PATCH 10/43] correlation tests --- .../funnels/test/test_funnel_correlation.py | 62 +++++++++---------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py index 176606ede5b4e..5859adef7885e 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py @@ -1,4 +1,4 @@ -from typing import cast +from typing import Any, Dict, cast import unittest from rest_framework.exceptions import ValidationError @@ -12,6 +12,7 @@ EventStats, FunnelCorrelationQueryRunner, ) +from posthog.hogql_queries.insights.funnels.test.test_funnel_correlations_persons import get_actors from posthog.hogql_queries.legacy_compatibility.filter_to_query import filter_to_query from posthog.models.action import Action from posthog.models.action_step import ActionStep @@ -21,6 +22,7 @@ from posthog.models.group_type_mapping import GroupTypeMapping from posthog.models.instance_setting import override_instance_config from posthog.schema import ( + EventsNode, FunnelCorrelationQuery, FunnelsActorsQuery, FunnelsQuery, @@ -75,19 +77,13 @@ def _get_events_for_filters( result, skewed_totals, _, _ = FunnelCorrelationQueryRunner(query=correlation_query, team=self.team)._calculate() return result, skewed_totals - def _get_actors_for_event(self, filter: Filter, event_name: str, properties=None, success=True): - actor_filter = filter.shallow_clone( - { - "funnel_correlation_person_entity": { - "id": event_name, - "type": "events", - "properties": properties, - }, - "funnel_correlation_person_converted": "TrUe" if success else "falSE", - } + def _get_actors_for_event(self, filters: Dict[str, Any], event_name: str, properties=None, success=True): + serialized_actors = get_actors( + filters, + self.team, + funnelCorrelationPersonConverted=success, + funnelCorrelationPersonEntity=EventsNode(event=event_name, properties=properties), ) - - _, serialized_actors, _ = FunnelCorrelationActors(actor_filter, self.team).get_actors() return [str(row["id"]) for row in serialized_actors] def _get_actors_for_property(self, filter: Filter, property_values: list, success=True): @@ -185,16 +181,16 @@ def test_basic_funnel_correlation_with_events(self): ], ) - # self.assertEqual(len(self._get_actors_for_event(filters, "positively_related")), 5) - # self.assertEqual( - # len(self._get_actors_for_event(filters, "positively_related", success=False)), - # 0, - # ) - # self.assertEqual( - # len(self._get_actors_for_event(filters, "negatively_related", success=False)), - # 5, - # ) - # self.assertEqual(len(self._get_actors_for_event(filters, "negatively_related")), 0) + self.assertEqual(len(self._get_actors_for_event(filters, "positively_related")), 5) + self.assertEqual( + len(self._get_actors_for_event(filters, "positively_related", success=False)), + 0, + ) + self.assertEqual( + len(self._get_actors_for_event(filters, "negatively_related", success=False)), + 5, + ) + self.assertEqual(len(self._get_actors_for_event(filters, "negatively_related")), 0) # Now exclude positively_related result, _ = self._get_events_for_filters( @@ -221,16 +217,16 @@ def test_basic_funnel_correlation_with_events(self): ], ) # Getting specific people isn't affected by exclude_events - # self.assertEqual(len(self._get_actors_for_event(filter, "positively_related")), 5) - # self.assertEqual( - # len(self._get_actors_for_event(filter, "positively_related", success=False)), - # 0, - # ) - # self.assertEqual( - # len(self._get_actors_for_event(filter, "negatively_related", success=False)), - # 5, - # ) - # self.assertEqual(len(self._get_actors_for_event(filter, "negatively_related")), 0) + self.assertEqual(len(self._get_actors_for_event(filters, "positively_related")), 5) + self.assertEqual( + len(self._get_actors_for_event(filters, "positively_related", success=False)), + 0, + ) + self.assertEqual( + len(self._get_actors_for_event(filters, "negatively_related", success=False)), + 5, + ) + self.assertEqual(len(self._get_actors_for_event(filters, "negatively_related")), 0) @snapshot_clickhouse_queries def test_action_events_are_excluded_from_correlations(self): From e5fae56918080d4cb5f54e9bbc5e971378f7feae Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Mar 2024 21:55:27 +0000 Subject: [PATCH 11/43] Update UI snapshots for `webkit` (2) --- ...etention-breakdown-edit--light--webkit.png | Bin 74744 -> 64291 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--retention-breakdown-edit--light--webkit.png b/frontend/__snapshots__/scenes-app-insights--retention-breakdown-edit--light--webkit.png index 7352fa8a916f898a9498ce3659ab5d239a640711..f8789cb48d32ded3ff43237fbca6cdb053e844b5 100644 GIT binary patch delta 7500 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 pX#dMo{=7q#oE{J{SS^-u6FjxPfniC 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

v*S8lSV?dewP6Q>#Y3jVKy-_ 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 gKV9cvFLO+Adh Date: Wed, 6 Mar 2024 22:56:22 +0100 Subject: [PATCH 12/43] fix test --- .../insights/funnels/test/test_funnel_correlation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py index 5859adef7885e..736d0a81a392b 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py @@ -84,7 +84,7 @@ def _get_actors_for_event(self, filters: Dict[str, Any], event_name: str, proper funnelCorrelationPersonConverted=success, funnelCorrelationPersonEntity=EventsNode(event=event_name, properties=properties), ) - return [str(row["id"]) for row in serialized_actors] + return [str(row[1]["id"]) for row in serialized_actors] def _get_actors_for_property(self, filter: Filter, property_values: list, success=True): actor_filter = filter.shallow_clone( From 7a7d963cb683a507881f3a6c069f9724b75f4944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Wed, 6 Mar 2024 22:59:57 +0100 Subject: [PATCH 13/43] snapshot update --- .../test_funnel_correlation.ambr | 158 ------------------ 1 file changed, 158 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index 4efa424dd1c75..4a3d96fde4168 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -306,164 +306,6 @@ allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties_materialized - ''' - SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, - countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, - countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count - FROM - (SELECT funnel_actors.actor_id AS actor_id, - funnel_actors.steps AS steps, - arrayJoin(arrayZip(['$browser'], [JSONExtractString(persons.person_props, '$browser')])) AS prop - FROM - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e__pdi.person_id AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - JOIN - (SELECT persons.id AS id, - persons.properties AS person_props - FROM - (SELECT person.id AS id, - person.properties AS properties - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props - GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 - HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) - LIMIT 100 - UNION ALL - SELECT 'Total_Values_In_Query' AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count - FROM - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e__pdi.person_id AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 - ''' -# --- # name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_event_properties_and_groups ''' SELECT concat(ifNull(toString(event_name), ''), '::', ifNull(toString((prop).1), ''), '::', ifNull(toString((prop).2), '')) AS name, From da325c3419c38baeb9157c57d4076b8a4015cc90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Wed, 6 Mar 2024 23:52:08 +0100 Subject: [PATCH 14/43] formatting --- posthog/hogql_queries/insights/funnels/utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/posthog/hogql_queries/insights/funnels/utils.py b/posthog/hogql_queries/insights/funnels/utils.py index 5f67a464fada0..316b33886efb3 100644 --- a/posthog/hogql_queries/insights/funnels/utils.py +++ b/posthog/hogql_queries/insights/funnels/utils.py @@ -6,7 +6,6 @@ from rest_framework.exceptions import ValidationError - def get_funnel_order_class(funnelsFilter: FunnelsFilter): from posthog.hogql_queries.insights.funnels import ( Funnel, From 8c0027ac39b0be45016d04b3a6f1dd6715494c2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Thu, 7 Mar 2024 00:03:25 +0100 Subject: [PATCH 15/43] fix types --- frontend/src/scenes/saved-insights/SavedInsights.tsx | 12 ++++++++++++ .../scenes/trends/persons-modal/personsModalLogic.ts | 4 +++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/frontend/src/scenes/saved-insights/SavedInsights.tsx b/frontend/src/scenes/saved-insights/SavedInsights.tsx index a8fd6bbdd5d4f..301c7c2c4e2d9 100644 --- a/frontend/src/scenes/saved-insights/SavedInsights.tsx +++ b/frontend/src/scenes/saved-insights/SavedInsights.tsx @@ -206,6 +206,18 @@ export const QUERY_TYPES_METADATA: Record = { icon: IconPerson, inMenu: false, }, + [NodeKind.FunnelsActorsQuery]: { + name: 'Persons', + description: 'List of persons matching specified conditions, derived from an insight', + icon: IconPerson, + inMenu: false, + }, + [NodeKind.FunnelCorrelationActorsQuery]: { + name: 'Persons', + description: 'List of persons matching specified conditions, derived from an insight', + icon: IconPerson, + inMenu: false, + }, [NodeKind.DataTableNode]: { name: 'Data table', description: 'Slice and dice your data in a table', diff --git a/frontend/src/scenes/trends/persons-modal/personsModalLogic.ts b/frontend/src/scenes/trends/persons-modal/personsModalLogic.ts index df5270fb2c2dd..dbe81266fb7db 100644 --- a/frontend/src/scenes/trends/persons-modal/personsModalLogic.ts +++ b/frontend/src/scenes/trends/persons-modal/personsModalLogic.ts @@ -14,6 +14,8 @@ import { query as performQuery } from '~/queries/query' import { ActorsQuery, DataTableNode, + FunnelCorrelationActorsQuery, + FunnelsActorsQuery, InsightActorsQuery, InsightActorsQueryOptions, InsightActorsQueryOptionsResponse, @@ -35,7 +37,7 @@ import type { personsModalLogicType } from './personsModalLogicType' const RESULTS_PER_PAGE = 100 export interface PersonModalLogicProps { - query?: InsightActorsQuery | null + query?: InsightActorsQuery | FunnelsActorsQuery | FunnelCorrelationActorsQuery | null url?: string | null additionalSelect?: Partial> orderBy?: string[] From 39fedecbf1ef9a2f8e068be77028b39d5ee1e801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Thu, 7 Mar 2024 11:47:46 +0100 Subject: [PATCH 16/43] fix test_funnel_correlation_with_event_properties --- .../funnel_correlation_query_runner.py | 6 +- .../funnels/test/test_funnel_correlation.py | 60 ++++++++++++++----- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py b/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py index bb0ab7f047c72..e9836c2492153 100644 --- a/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py +++ b/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py @@ -369,10 +369,9 @@ def events_actor_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: date_to = funnel_event_query._date_range().date_to_as_hogql() properties = self.correlation_actors_query.funnelCorrelationPersonEntity.properties + prop_query = None if properties is not None and properties != []: prop_query = property_to_expr(properties, self.team) - else: - prop_query = [] conversion_filter = ( f'AND funnel_actors.steps {"=" if self.correlation_actors_query.funnelCorrelationPersonConverted else "<>"} target_step' @@ -413,7 +412,8 @@ def events_actor_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: }, ) - query.where.exprs = [*query.where.exprs, *prop_query] + if prop_query: + query.where.exprs = [*query.where.exprs, prop_query] return query diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py index 736d0a81a392b..fb163a318fde1 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py @@ -22,11 +22,13 @@ from posthog.models.group_type_mapping import GroupTypeMapping from posthog.models.instance_setting import override_instance_config from posthog.schema import ( + EventPropertyFilter, EventsNode, FunnelCorrelationQuery, FunnelsActorsQuery, FunnelsQuery, FunnelCorrelationResultsType, + PropertyOperator, ) from posthog.test.base import ( APIBaseTest, @@ -1638,22 +1640,48 @@ def test_funnel_correlation_with_event_properties(self): ], ) - # self.assertEqual( - # len(self._get_actors_for_event(filter, "positively_related", {"blah": "value_bleh"})), - # 5, - # ) - # self.assertEqual( - # len(self._get_actors_for_event(filter, "positively_related", {"signup_source": "facebook"})), - # 3, - # ) - # self.assertEqual( - # len(self._get_actors_for_event(filter, "positively_related", {"signup_source": "facebook"}, False)), - # 0, - # ) - # self.assertEqual( - # len(self._get_actors_for_event(filter, "negatively_related", {"signup_source": "email"}, False)), - # 3, - # ) + self.assertEqual( + len( + self._get_actors_for_event( + filters, + "positively_related", + [EventPropertyFilter(operator=PropertyOperator.exact, key="blah", value="value_bleh")], + ) + ), + 5, + ) + self.assertEqual( + len( + self._get_actors_for_event( + filters, + "positively_related", + [EventPropertyFilter(operator=PropertyOperator.exact, key="signup_source", value="facebook")], + ) + ), + 3, + ) + self.assertEqual( + len( + self._get_actors_for_event( + filters, + "positively_related", + [EventPropertyFilter(operator=PropertyOperator.exact, key="signup_source", value="facebook")], + False, + ) + ), + 0, + ) + self.assertEqual( + len( + self._get_actors_for_event( + filters, + "negatively_related", + [EventPropertyFilter(operator=PropertyOperator.exact, key="signup_source", value="email")], + False, + ) + ), + 3, + ) @also_test_with_materialized_columns(["blah", "signup_source"], verify_no_jsonextract=False) @snapshot_clickhouse_queries From a9ea2c1ebacd639a9cc0f64d2cface78ccb910b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Thu, 7 Mar 2024 11:49:47 +0100 Subject: [PATCH 17/43] add test_funnel_correlation_with_event_properties_exclusions --- .../funnels/test/test_funnel_correlation.py | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py index fb163a318fde1..65d4602e86973 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py @@ -1870,16 +1870,28 @@ def test_funnel_correlation_with_event_properties_exclusions(self): ], ) - # self.assertEqual( - # len(self._get_actors_for_event(filter, "positively_related", {"blah": "value_bleh"})), - # 3, - # ) + self.assertEqual( + len( + self._get_actors_for_event( + filters, + "positively_related", + [EventPropertyFilter(operator=PropertyOperator.exact, key="blah", value="value_bleh")], + ) + ), + 3, + ) - # # If you search for persons with a specific property, even if excluded earlier, you should get them - # self.assertEqual( - # len(self._get_actors_for_event(filter, "positively_related", {"signup_source": "facebook"})), - # 3, - # ) + # If you search for persons with a specific property, even if excluded earlier, you should get them + self.assertEqual( + len( + self._get_actors_for_event( + filters, + "positively_related", + [EventPropertyFilter(operator=PropertyOperator.exact, key="signup_source", value="facebook")], + ) + ), + 3, + ) # :FIXME: This should also work with materialized columns # @also_test_with_materialized_columns(["$event_type", "signup_source"]) From 688e7daa17a2b2a47b5b3335faee562651618443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Thu, 7 Mar 2024 13:07:20 +0100 Subject: [PATCH 18/43] fix test_basic_funnel_correlation_with_properties and properties push down --- .../funnel_correlation_query_runner.py | 19 +++-- .../funnels/test/test_funnel_correlation.py | 74 ++++++++++--------- .../test/test_funnel_correlations_persons.py | 3 +- 3 files changed, 51 insertions(+), 45 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py b/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py index e9836c2492153..112278e3caf92 100644 --- a/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py +++ b/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py @@ -339,15 +339,18 @@ def to_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: return self.get_event_query() def to_actors_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: + assert self.correlation_actors_query is not None + if self.query.funnelCorrelationType == FunnelCorrelationResultsType.properties: - # # Filtering on persons / groups properties can be pushed down to funnel_actors CTE - # new_correlation_filter = filter.shallow_clone( - # { - # "properties": filter.property_groups.combine_properties( - # PropertyOperatorType.AND, filter.correlation_property_values or [] - # ).to_dict() - # } - # ) + # Filtering on persons / groups properties can be pushed down to funnel events query + if ( + self.correlation_actors_query.funnelCorrelationPropertyValues + and len(self.correlation_actors_query.funnelCorrelationPropertyValues) > 0 + ): + self.context.query.properties = [ + *(self.context.query.properties or []), + *self.correlation_actors_query.funnelCorrelationPropertyValues, + ] return self.properties_actor_query() else: return self.events_actor_query() diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py index 65d4602e86973..4698a20d5c1bd 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py @@ -3,9 +3,6 @@ from rest_framework.exceptions import ValidationError -from ee.clickhouse.queries.funnels.funnel_correlation_persons import ( - FunnelCorrelationActors, -) from posthog.constants import INSIGHT_FUNNELS from posthog.hogql_queries.insights.funnels.funnel_correlation_query_runner import ( EventContingencyTable, @@ -17,7 +14,6 @@ from posthog.models.action import Action from posthog.models.action_step import ActionStep from posthog.models.element import Element -from posthog.models.filters import Filter from posthog.models.group.util import create_group from posthog.models.group_type_mapping import GroupTypeMapping from posthog.models.instance_setting import override_instance_config @@ -28,6 +24,8 @@ FunnelsActorsQuery, FunnelsQuery, FunnelCorrelationResultsType, + GroupPropertyFilter, + PersonPropertyFilter, PropertyOperator, ) from posthog.test.base import ( @@ -88,23 +86,27 @@ def _get_actors_for_event(self, filters: Dict[str, Any], event_name: str, proper ) return [str(row[1]["id"]) for row in serialized_actors] - def _get_actors_for_property(self, filter: Filter, property_values: list, success=True): - actor_filter = filter.shallow_clone( - { - "funnel_correlation_property_values": [ - { - "key": prop, - "value": value, - "type": type, - "group_type_index": group_type_index, - } - for prop, value, type, group_type_index in property_values - ], - "funnel_correlation_person_converted": "TrUe" if success else "falSE", - } + def _get_actors_for_property(self, filters: Dict[str, Any], property_values: list, success=True): + funnelCorrelationPropertyValues = [ + ( + PersonPropertyFilter(key=prop, value=value, operator=PropertyOperator.exact) + if type == "person" + else GroupPropertyFilter( + key=prop, value=value, group_type_index=group_type_index, operator=PropertyOperator.exact + ) + ) + for prop, value, type, group_type_index in property_values + ] + + serialized_actors = get_actors( + filters, + self.team, + funnelCorrelationType=FunnelCorrelationResultsType.properties, + funnelCorrelationNames=["$browser"], + funnelCorrelationPersonConverted=success, + funnelCorrelationPropertyValues=funnelCorrelationPropertyValues, ) - _, serialized_actors, _ = FunnelCorrelationActors(actor_filter, self.team).get_actors() - return [str(row["id"]) for row in serialized_actors] + return [str(row[1]["id"]) for row in serialized_actors] def test_basic_funnel_correlation_with_events(self): filters = { @@ -624,22 +626,22 @@ def test_basic_funnel_correlation_with_properties(self): ], ) - # self.assertEqual( - # len(self._get_actors_for_property(filter, [("$browser", "Positive", "person", None)])), - # 10, - # ) - # self.assertEqual( - # len(self._get_actors_for_property(filter, [("$browser", "Positive", "person", None)], False)), - # 1, - # ) - # self.assertEqual( - # len(self._get_actors_for_property(filter, [("$browser", "Negative", "person", None)])), - # 1, - # ) - # self.assertEqual( - # len(self._get_actors_for_property(filter, [("$browser", "Negative", "person", None)], False)), - # 10, - # ) + self.assertEqual( + len(self._get_actors_for_property(filters, [("$browser", "Positive", "person", None)])), + 10, + ) + self.assertEqual( + len(self._get_actors_for_property(filters, [("$browser", "Positive", "person", None)], False)), + 1, + ) + self.assertEqual( + len(self._get_actors_for_property(filters, [("$browser", "Negative", "person", None)])), + 1, + ) + self.assertEqual( + len(self._get_actors_for_property(filters, [("$browser", "Negative", "person", None)], False)), + 10, + ) # TODO: Delete this test when moved to person-on-events @also_test_with_materialized_columns( diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py index 7ff79567821bd..de0c469107742 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py @@ -40,6 +40,7 @@ def get_actors( filters: Dict[str, Any], team: Team, funnelCorrelationType: Optional[FunnelCorrelationResultsType] = FunnelCorrelationResultsType.events, + funnelCorrelationNames=None, funnelCorrelationPersonConverted: Optional[bool] = None, funnelCorrelationPersonEntity: Optional[EventsNode] = None, funnelCorrelationPropertyValues=None, @@ -50,7 +51,7 @@ def get_actors( correlation_query = FunnelCorrelationQuery( source=actors_query, funnelCorrelationType=(funnelCorrelationType or FunnelCorrelationResultsType.events), - # funnelCorrelationNames=funnelCorrelationNames, + funnelCorrelationNames=funnelCorrelationNames, # funnelCorrelationExcludeNames=funnelCorrelationExcludeNames, # funnelCorrelationExcludeEventNames=funnelCorrelationExcludeEventNames, # funnelCorrelationEventNames=funnelCorrelationEventNames, From c9af7b4fceac1ebd20052b845f7f2872c5e46fcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Thu, 7 Mar 2024 13:46:00 +0100 Subject: [PATCH 19/43] most of test_correlation_with_multiple_properties --- .../funnels/test/test_funnel_correlation.py | 64 ++++++++++++++----- 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py index 4698a20d5c1bd..b9bdbbbb17896 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py @@ -86,7 +86,9 @@ def _get_actors_for_event(self, filters: Dict[str, Any], event_name: str, proper ) return [str(row[1]["id"]) for row in serialized_actors] - def _get_actors_for_property(self, filters: Dict[str, Any], property_values: list, success=True): + def _get_actors_for_property( + self, filters: Dict[str, Any], property_values: list, success=True, funnelCorrelationNames=None + ): funnelCorrelationPropertyValues = [ ( PersonPropertyFilter(key=prop, value=value, operator=PropertyOperator.exact) @@ -102,7 +104,7 @@ def _get_actors_for_property(self, filters: Dict[str, Any], property_values: lis filters, self.team, funnelCorrelationType=FunnelCorrelationResultsType.properties, - funnelCorrelationNames=["$browser"], + funnelCorrelationNames=funnelCorrelationNames, funnelCorrelationPersonConverted=success, funnelCorrelationPropertyValues=funnelCorrelationPropertyValues, ) @@ -627,19 +629,35 @@ def test_basic_funnel_correlation_with_properties(self): ) self.assertEqual( - len(self._get_actors_for_property(filters, [("$browser", "Positive", "person", None)])), + len( + self._get_actors_for_property( + filters, [("$browser", "Positive", "person", None)], funnelCorrelationNames=["$browser"] + ) + ), 10, ) self.assertEqual( - len(self._get_actors_for_property(filters, [("$browser", "Positive", "person", None)], False)), + len( + self._get_actors_for_property( + filters, [("$browser", "Positive", "person", None)], False, funnelCorrelationNames=["$browser"] + ) + ), 1, ) self.assertEqual( - len(self._get_actors_for_property(filters, [("$browser", "Negative", "person", None)])), + len( + self._get_actors_for_property( + filters, [("$browser", "Negative", "person", None)], funnelCorrelationNames=["$browser"] + ) + ), 1, ) self.assertEqual( - len(self._get_actors_for_property(filters, [("$browser", "Negative", "person", None)], False)), + len( + self._get_actors_for_property( + filters, [("$browser", "Negative", "person", None)], False, funnelCorrelationNames=["$browser"] + ) + ), 10, ) @@ -1195,7 +1213,7 @@ def test_correlation_with_multiple_properties(self): "date_to": "2020-01-14", } - #  5 successful people with both properties + # 5 successful people with both properties for i in range(5): _create_person( distinct_ids=[f"user_{i}"], @@ -1215,7 +1233,7 @@ def test_correlation_with_multiple_properties(self): timestamp="2020-01-04T14:00:00Z", ) - #  10 successful people with some different properties + # 10 successful people with some different properties for i in range(5, 15): _create_person( distinct_ids=[f"user_{i}"], @@ -1388,18 +1406,30 @@ def test_correlation_with_multiple_properties(self): self.assertEqual(new_result, new_expected_result) + self.assertEqual( + len( + self._get_actors_for_property( + filters, [("$nice", "not", "person", None)], funnelCorrelationNames=["$browser", "$nice"] + ) + ), + 10, + ) # self.assertEqual( - # len(self._get_actors_for_property(filter, [("$nice", "not", "person", None)])), - # 10, - # ) - # self.assertEqual( - # len(self._get_actors_for_property(filter, [("$nice", "", "person", None)], False)), + # len( + # self._get_actors_for_property( + # filters, [("$nice", "", "person", None)], False, funnelCorrelationNames=["$browser", "$nice"] + # ) + # ), # 1, # ) - # self.assertEqual( - # len(self._get_actors_for_property(filter, [("$nice", "very", "person", None)])), - # 5, - # ) + self.assertEqual( + len( + self._get_actors_for_property( + filters, [("$nice", "very", "person", None)], funnelCorrelationNames=["$browser", "$nice"] + ) + ), + 5, + ) def test_discarding_insignificant_events(self): filters = { From fb31342215d90480b83aa2c73d2b8e1b9dbca0a4 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:56:19 +0000 Subject: [PATCH 20/43] Update query snapshots --- .../test_funnel_correlation.ambr | 568 ++++++++++++++++++ 1 file changed, 568 insertions(+) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index 4a3d96fde4168..fa9e892779ce5 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -306,6 +306,574 @@ allow_experimental_object_type=1 ''' # --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.1 + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.2 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.3 + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.4 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.5 + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.6 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.7 + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.8 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- # name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_event_properties_and_groups ''' SELECT concat(ifNull(toString(event_name), ''), '::', ifNull(toString((prop).1), ''), '::', ifNull(toString((prop).2), '')) AS name, From 9923b1ec576ea4fe3642c2c40b0cd656236c4a0d Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:07:19 +0000 Subject: [PATCH 21/43] Update query snapshots --- .../test_funnel_correlations_persons.ambr | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr index 534915755ddff..c9df955f5a685 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr @@ -445,7 +445,17 @@ WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -577,7 +587,17 @@ WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC')))))) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -709,7 +729,17 @@ WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC')))))) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps From ffaa1d0ce3fcbe3f24a5b79451a5faf25120c297 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:14:11 +0000 Subject: [PATCH 22/43] Update UI snapshots for `webkit` (2) --- ...to-right-breakdown-edit--light--webkit.png | Bin 81023 -> 88098 bytes ...nsights--lifecycle-edit--light--webkit.png | Bin 60778 -> 70008 bytes ...--trends-world-map-edit--light--webkit.png | Bin 77593 -> 83171 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-left-to-right-breakdown-edit--light--webkit.png b/frontend/__snapshots__/scenes-app-insights--funnel-left-to-right-breakdown-edit--light--webkit.png index e58bf370c4f3ee63e3e916b11677a652c513f2bd..673d7fccf21c68890a355511af8c7329b617d8f0 100644 GIT binary patch delta 30431 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 diff --git a/frontend/__snapshots__/scenes-app-insights--lifecycle-edit--light--webkit.png b/frontend/__snapshots__/scenes-app-insights--lifecycle-edit--light--webkit.png index 540c8d166cad7302069f3826cce86bb5be4d1aa5..5a61cbf63281c2bc58efc7cd9cca01fe7a76367b 100644 GIT binary patch delta 33392 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 n3pV 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%0D^^$mgSOy~|MN4%lAcdFdoVE63%quB zG8dHSfQ76AWM?U7W>uCQJbmAL8CFC$5uUizD+_QQ5sGLqbMm|pCko1#)^T}I_YsNh zY`HTCJw4I57N`LtR@E`p1RSA7jW#Oydy+adZ1fjxnW$qx%-0mM=`qkfo*u|JY4lGC z7q;1db-8yVO61ja96u0zH-=pv2mFoI)%UUjT&iwY*RAc%xDd?5`Mn_rB}cZHyAd#0 zuqv@S892a_ww%^-gqufZ#z@d&ux?UZN5Sy)`F(I zMWrI4%aIei5Q5FiGdT_M_-(tnTZ24%y2H;1Hdl_#UHb%Vp{bgwH??VvOYL=kmC@Fq z&^`A0f?|1JMU0w-5t$MjXVxwKW9$N+@9RFAh*t7mXqTivQG}e684o?KnSAr_4s{G( ztjC`l7LP9BwRw1F-h@xkar3&^d$70~Mzfb16!9s&_0L4|ii+3vB1KxS{qDF&gIDNe zsQH$2LiTQF>QODePDz=i=WAu7)jRoiN2|%iqrzwN>t~6=6Od(6Y-^slvr4BDzu$TU zF<;2o7{y*hmL+Y-!@~}H#B3PuY_5T@p)mPXA^vc1{#jV_O5vh(=bxYF`a^g}4hM-9 zzTD3D6fhT%h8l1<8PtiD&=^36IuFg0l~p~>E^CABA?a?K+a!o5Ub=lQfJL^pdZLTD z2VKKU9`za*TUnIS9V~mwo2mbJe?Jgn$WCd2c%`OD=de9F``eHY`686>fAo+j3fO-M z=)omVX~^N9xzTS^MiiHdHwZtnQjL9g^fzvgD&6HQwsJAk{by!nq0!pXlW(NU$qEI< zrE+O{0|U#~l5*K%Z{2lNtG^#H^ejau5i?vT7C1+yc zgU^PaIugi_Vw2$}a}c;3y_>yt-~XLl)c0M}&I6kplW%g44F)*h>3u$V#cr?lV85~Z zgs-H!{>sLd-+1wZ<84e8yoJ#9Oha74T~|O6Wfee*jRWX40m>|!!NZLrg_l4`&in7C z8tY}ilm+0`MC$`rk@Y=fzin@P71tP!8@hcBNHOf-;!CKYfOGOdxdmL+ZFC$&0bOej z?%fbVVYogFG$Q`{QZQCFEPqn|4;%E|D?gQD`z3$TLiH)o(MPMs6~%ozY1clWcJork z_k;b()~75*_(lIFiy?0dGt+*S^mjtqxXIj$_&5hQ#I!$@Tosh7MRid`p` z?m-61I%^uzg^He~Arr~gt5(_m*~E&zXO;-;0R9xZYS1aEwfjbc&;I&;ax1DUeIv^sQ4Q^ zSAd0D*$nA=sPL`)MP$d#eW^+w_oX&3v@mKUlqg#E=PqC12$2g@!E#c`oD?@6_;WmScaJB3I9gO1Xkn&{ zf1Zjqe>59yMZrKR@bDg&Rilo}nyWiejzeV`@k(U7GbQvb*YLbx48QG7g(q(_Jb`Jc?Rw)m3Qb?n0Q~ zO|MC!oMV{JMJH)p-f-x~F(q6fy5W#h((7c1lA~a-_yzQWm6r7jEsK>hP}V`ej`uiQ z??2*R)RU{gih`gPIAC#YA5hGIW^3=|()nlz;H^J$LQ(c`m;q5~0eke;kTQa5`qfTJ z6zIrZku)k=%!v4l*ruzY3@A>^ox36(SD= z>3Sheqi`mAZ6-uo{Y+Mmd!v-KkiPiO@0#*m5tVzf6)hJ~2!@i{-V2Dy<0w~emot~| z&xDZW_EMnA8R<|jVA6p&Y!xaCA`l{=%!c)f9GH_?{O0ctKv<7F3(VTV@e=`kzRTZ; z=v#|Y$47$%6)Hh|GG|Hu@5Eu+Q}N_xkDQU&6&>zn{}xE{YBe>ENtx+i>f$@5=*dX( z5idKLEJ1BC!CGucm5W8GNA2*_beAn5W;XPZLPb6i9XW>b>(b+yl~7V@rjE1Zj?YoW zEVfUzU`eFepI5$0#!TP1W%_O)_(b0$C5KFIMU{y}ho3DuB04Jg=b>Y6<0?g^Thj#- zUSG-B>Gx7^jrB77EYXv-4ZdX_g#!g({`;nc*U&EzTQH*FREX{m6}C5fF8eg@!Dn?E z$%N$}ROoKGRpY=w@yAD+gt*)NoCw;N<*_I>&C_+C?cN_(#r=}Ld#Ppnzl;gGa@EoK zv|DCg68^gBX`QbENu1a-;)=d#R`GPXf;vH0ykF=_Q+1w1=LzGFNQ;eaptrq6IxxMQ z!zMC?k2Kz*Uc1%~4y^bNa9xZ`?wMnY8Zv1e%%W6?=f~vLWNO*maS=V+d*#q3_~=6~ zp~n&z4dO9A(j6iX_nK8W$&PnVEV~BWvlg!&*6#7xbI$0eL$S@#``-dU6CEw`3Ibs+ zln4;Ih->pMq6ng?a;rw6)Axx)bc|$|g)#Hf{bg9N4kyv3ak21b+^zk}Rzy(Y>!w%q%Ixn*|2|9S z6oqL&E67aUKeAluFYQn(Gwe5EUyLPuS~~S{mGaNc-}hZezAg2ikttgqy!E|ltAsS> zTxesF_^V0L4PR}KnNU<7m2@-z=)3E3ufdXT5-=3JP^%XVbwL#iW_>@vtO(?7@(9R_ zEz(cAK(LdR+#3Z8EFVxtKne*08VFJaac-z}!Mkw|LjN4F00BqDyJ+|s--rCP*ni~u zSwZ>z@^AL|a}Q27B$Fxg_1D$)%z3r^>XJE?IqvFQ+lgz5Nj)eQmf|n!_`Nhdq#pIC zp!lzd!j_>*2#F2!bB^uL!wu>mBM~KxY==a+|s02`L_lM^! z(@fWN1Dv-SK?r7IYTENuiZFYFI0t3GO($;vn#?UwO1>}Jm~M)E+kOWxYCO+bXp;VY zq(#dR<6_a>BS=doGP*fod0SrquZ*T_*FVGJ{*}%41FoLleVP^Y|P= zXCF(1+vDk5F-A&@beGKNN*8|>r+Zr@il*M(&SR^1ZO($s35;BE>9|9XRJM?)C?k-&UlFkuz5yMnU$`FgUM$U9jcN5&XQw@|kHRn9B|ZwF9rtdA*hvGF3tc*lj%YGZ>R*DAKyve|F~Dm?5*VxRTqG_1Q|cjgJ0O*y zi0lIjZ(5k?fsCy5^@TE_fV|0dz1wy``4Q*yU>wP8VzKu+bDE$TDT2E1{88ASgtF8F zkNvdWAZ4zvz;1R$n=kG}W9$<_{MQqLEDt2JS+aU2mioOO^?aDBjmnab9$OS?M_LqhFJr;j&)LIVT;oQo=ebi9K+(e01c7giDs(vw?ep zcrwLswl3fM1wYrx{Si5uglO7#u8lH7_mn8Qig1QxOCgcwSQkqMN(Lt-3`TTGyh=^L zw8lYz0bA*Lw&UxG4oMH8V;E(5yGjB6B^8IOO0sQjJRc68IYoXOZnPwPiO%Oq7SYu% ziyL3WduRR%3}(~()a+urxx~M4rZ+j1)mLWc>5{hK&3!`dK`U}FH5_iRQrE_0FxCss zgv&7LPCVPGOTzuygfWr#L}937h#`7CmsRn;QQ{1>jra;H2v3O-NyXeqo;_TIp3KnD z%jfY!qxQ~EuAcKKMQJ#L!DA@aJgRz<_5ECz)!QSAHReOhTP1PXMvj@%Vu^%%(H|6C zXV8X7Y-c-lt8se24!7x5J1%s=WbR;H1Gh3;-03V?N)(lfeql-k+xaM77jlW~;{BXf zWHzQ=rH-U1@wjlK2(_dD6Yb>WEUVY0$C%x|e-H|F9_BWju5K0aLFeSLbIr#%2L&1^ z$GT_Km`i5FZ*Ii1X}R0jxJYLU2=IE#`qHA1Q(D6MYYNjf7pzdJ7=GGH&n8aSO9w_5 z&;{qq#IraqR++y(qWxnrJy81pkW%NnXvfmotf}sI)RyG$Rb~YE4a=kR;q)2(C&KwO z6m0()JR_3(pt1b~WSPvz^GWZC9#PnhX(UCm5>YX~*vcCx@T##SFbdQ8WRv;`in#t_ z+UqlPKH$oAxS12b#&865n?x8nT5z+|Uy;m+<2ntfwY6zI4KNc!segLbk9hL3@UMFTnknue98A)PRzEuRwu@f ztacbJTZAM#EVSfkUNcJ4xTCv#(6U=PGP1wNA4Cy(dEP$)6KBw|q(L$0lz=&{W|-`p zuKQLfWvEbtaQ#REkFgP*68705ZElQtZprhvpiHsvoo+Gxe^BEeXUK!<;B(dYzE(N+@iBsPL<77NeU(8 zzPQ?x7j4_wd$e_sGGpWHd2$)h2izxtOO_jl^$)m$S88XkC+|poQ^0lo}$-3yq~bkGF3k4RPK`$&%@o2IJbx2U3IZY51t zhl7EZ!8tXP?vjHoj91040o7%0ZT%M*6EJsi0N}-&`DMRKJd8?$6rOlg6{sgSAXuSZ z!@$$~urYZUcLb58wjnL*2?#2oOImGRm2aDDgLeRMIfzq5BqX+@&-s|cUjph3My=s^ zs$?WHljW~xNB!*2y~3UWl2vPf&6^^-!dy)HsZnv|3(@J_&jVCcP|4-*amwiHtuFu; zbNl$?Zf9;0Yfu@7lG`kWcCxd$jgR<#bOO)T9^j$+7&T2Vje{Bi!VgMGrWNN4l^4Wg zI@I_oD$1OlbWF3rx(Xn-Ozil|#@;%jLjbzIo#8w!()4MrJ`wXROhO>9E%ELf*L1*~P7}{Y1Zzf-vOavbX0jEDz)N$B!bBD8Jv`Jj4ozh-S3v`CzkE{{H=; zaBY8|s2c{>>@3w$q9pa}zyK(+g*ZXHsKb{H4+a+T8}UW~Pw=_E1+ zNbf|DYH3M{)Cc85p%%G!ka#>5`AUWw3Am50_?a~gw#N6ka)0TJPY5Ron?luFpCEC{ zB{C(O)+lc*S6b#+3j;rzc0*(+h@VeR5qak~wSN z?qWloB7KIHYR7wr6AS=}(@E{uKRb)Qei4t(6O`&tTBZv+AX|%uwU(#iM&RFpvP# ze$pr~fU*Z8?%{jhvw!Pu#{OeY^mm!@a{>jiF@*_~kgNW^AgqxYs2TZ7U!$Bqk`6$YdAg~M@f(&0 z1)TWf>=oq$11luqbS;|L>CYNyr>Bpv3LN|iyzO+ErKQo4qVVeve2?=Nalo**Y8715 zU5-Z9o4U|jE0YB)zr|Zw73kDISZ{;NDZ{;h6DdR9905%bon<|vIs#~)zH8Bg(Ki~yGSM4k;GAhpaw;$s{DT*;NgAavFA8_E(t{)i!=W*cC z0CW0BUc<1?&_2bAn`7S85(|16m>uh$8%4bak;(+9 z_04XEjYvgx&76gp4odyu_cM?r`BS=Y1AQwvLcn@nyl^38W^u7>h{amZm(Ad9OI+=V;_{K1z`Z4LoD*$(L1#}CjB`*+`W3_im@)4uHNGZ{?grB)+S%Ou+jo} zXh~4OU@b)U54Z0S`ELHW)5=H_ke`%h35`(2%mRCP^Sm{yp}v(yME-zS2Gr3G5J^T$tT z?MFU}mI;nQq^nin1Uf%J#KChWQqBhF3ci2T2qAme|TpzI0SL>a0f<{j1ZjQ5Y8Q1RU=e)+ldAnU@=d`S{!|9pWooQzb)9ueljI_-6IwyU)knkvS)EN-K2JH{-k0 zlPhA3ajM8d)@2n;)b#WWr(wIfu*)qg4KNZM1hL}h?6)+ zOM;lq>R^>!*|VvWhWZPk-eN!P#$Sh&yW)4uyjtK=wqEBnobNm#O66jT zgyZyKooBuBXp}PTzd~g4hwn)pM5OOjp&cxY{=RzQFJ0p99y5MVcwjT0FtxSwoAJkq zYE<4;O$8;lLhE>kpO@?RaM}AhK0fTql8h(b(Ihb;VYRwU)Qv6{@GXBE{MrxxxCDdK z3FMbDQYYakvXqkwRI-vf=5mGp+(?=p&&|KLxZd6I^w>7k(luV4@I*x!I4G3}l!54= z!AGH01m}CW?Zw-`7TerRE>uJjy!?r!T`a-x`K$Q=(LyoW(w^?_)$*j_ii0HA!#E34 zF*zEl0opU0`Kjh|mxQL8IMO*a!8!v3Q~3tPMLd81>>uD1^Bx?~17R(LFvz(*u{16( zPaw>T=)8RO3RoDS#)kow+Q}bVS}YRuVmcBqznk_8cu5Rw21`q~1HWS+u?CAVmQZ|s z^k>xEuXd9F6DDkp!b$PFcWw=H30O%olmc>vEC2py-O5&~`XCH1re=8l?T3TTdlCJ& zZgH_ZRA4HpD4ig9m1!W)6Bciw^H}WJxC)WomRTMe)Xs6a_W2p`nZBbnG^fP0_SS z&(P^K?HAJ4I=TPDuUrY;YGYf)a|XlELjO?xONI$2qbkGR3#2(_XuB6nNPO4PldhfI z-tzYt`{o;u0S9*2p@G4Fb0 zv~VLNoBCvD)9hp@ly4;tr;pn+TAn|pi=Fm9al{9-)&LnS8LQRMo!N9(D6Jl58omuO zpl3CHFuEgrLhe~1iQ?cTJy43Ixmr2IQ&MVKtl+SPPBqozQ>V$3xX4XSS4DbqeJ=4I z_OfJQPd!wpvH>n0N|N*G`HSWlPNjtwzA%waD85b4v6F?n#wasJ=ev*FEz&sMH9Aez zuT|hxE8}djwzn>u^YlaMc!th}q}U5_J*&v#$Ha`Bz24&}G~|cQ0Ml4TQEC*&=9Hfe-u6mIpNGfxk3Z|2 zn#aD=-x@nu$c)=hYyEp5t0r|r+mbl70s`_u=?CUf=C83l1*(Jf&KGiYI@Jt6_8@#z z>I=f1K8<#R(`cunj`2uod5g78GrRLq4AIzmM*JyNhS4RxB0MQAmC9h9|AlNfDdjw7 z0b2XC&05M~Dl@^Wppi;9wQ6mfS5~W$T3Si>yz=aghM1c%bNFj9-HyJQ`)KyJ*pUDg z-&XsipV#+j?ic&G3EBZvjV*jugJ6`4n~LLmsMFs?HwNwsqs*M;WZpkXfSKB1*PCLx znbKYuWn8(D@)%3*=xi55Nofa8M_E8Kl|&Ik2G|K}Id1f6Tmd8YQ#z}(mX+T67^(T& zf~e|tb<`s*9@=4Ubb-UqWX=q%CLidn(zJL>6Do!iRzIH3G$k*W%8;(IV@GWjY>p`a*Xcrxtpu z!V7GiT9?RB=b%!fq49+H^VHWuV`5WJxc+ znpac2U+Hear`BVS1c3>7Zgk(ixN~-+X*^5`GvaRh*m05z(YsqvEPy#frieZjA&7Tg zXO+qJX&om)lepXz3`+D_J+q1yw~sb;cHGPh7Z3bpoE)z{9CiAQK}G&GYacsKql=nx z9S)t2?6h5|Z!mw$a*TO`!71JaWk7qm_0gATO&nh#)`jio&-zMUEtEz&op^_ecDM7> zIU^KC?Xypix>JvFB&af|PqOT?63jP~{khNHCp)Daoi9=5N;uV0IUiypX*4)Z=WM(j z!FwdUXU=cPCe_HMmmyk+zqE9SnyWdzkma&j>5hYCp#~?y8|&!P;b;0``fF#|5oPyK z4pCjg*E)YuItks#{jOw0m|j)sZG^oA{o?+zJ;$l`)YDlDwB&q@CoT|Kff`Z7i(I*U z=_xAQK-dKDv2zJmJ~#J$bXmx4+2bx9BTj&lJqqky7CMez5R0BmHG1F8Xa6R{JrkX8 zBCQ!q&W7ACNPT?u^zi}CWDz$~ysZYelh=Y{p!}r_6WLRnd+XALPq`>Fx0lAFYo27K ztok)EQ=dV(+&oDcVbApIam`IftOaW$D%`Is_# z#_8wPRJt&(DChOJ!t_J3*Tu6govwVK8i^}6ujfSQDO<;F^TZxmy+8W$J9(Tg;gQR| zFVTzqWL6-m#&zsV)5ujhe?Wns;6AW&1C&h}liW<;aX?9;vcR8&kqRj9>F!F{OH*5H2 z2f~gQ6~uqpq{@Fgvt@X^+gTt@FB9uvy!_cbcC(TE2IX*HzdtvZCQg8lzNStm^Mo%Q z*YNW154bO)C1=>5&u6%ay_MdpMc4Q{Dvdf67Yse64&t<&tP_yy{L_R}N_TNoQVd74 zqxb!$plk4P%QvX#%_=Ju*Wy!ddfr6Ej-+a+3Oe==UX@`IQme1EFRNf;Z|K8mNLm-2 zV?39);4TTC3n-!3Fpzzh!`W8V)9#@1+Vgnj?>bMlpTS_ zCSQ4IOCRt!5^)$OrN<6GGdf4lj4KmFhg+?vl;6*+IdL|P%Ln$4@U6FP(PG_U|1-{n zeK`7TwQ8);-94)(qnoqVF3e`o-=?-CuCk*&0`9?wda*-&at=yafS8 ziOCE3p*|He^S)8no6gUylm#A`E8gv~^JEA)f6AqK31whz?vddtY%=O`MTYXT4xvtf z;Ci#Va?$nJE@a5rjnYy%84-FX*g|oxG&iE#>ubbU@Sx7TpDe(S0M5&Kq5N&=6>YU= z?DVyBbMzx7tqwn_V;(R^j0dv46&1Xc6dT=f;;Kql+KJO-`R)pCl15$0C7hZcpLf0YrgK;9m5JW8RrKVh(euN%e8Al>&4aSI&|{*1)0aBt-8xCC_dq z%R)kyYP97YC?y92Ni(3YS^pT2dojEQ z)SEP7!k;81yzl``Cs)@NKT3Z&%!^rRA{>Uhg*p{2w}uq-&j(^6BxS-Cil z#@ISa-vGn}dQ^iqKui;+N zeUxqJwnY`I0DX#@Wa!UU4{_;q_n83}kB4ER@z+rar7$e!A}OJx-Qg*KXi1zox7g)3 z{-Y%Di~E z9mfw0{K4-4w|1r@OA}NW12K@bP-W;ftFtiz+VoRi(#$^cpBT3H9lyGofg&;m#@`Z?j2?2l*{si)UJNwFIsLWB5O>CPAi zRQ@*-bpsN`%tA6$sKYU(bF5nL6?T60#FCMAohw2*M=4nSIO0X9WS*yLbgqwD((tIb5*D~@3jDlk!Q6_I(< zdxdX)EliwNuR;vV>M3mz#as@`&@+5=13Hots_9dl_1BQcp;A%@`rKb&j8D1vO@dKL zpjBahlmT1RltP$jotYvkJWr2m)TYj?-hyh*k32dp@Tn%)3c5i*%NyMgJg2QgJbi0e&NyMmOp$ zjkE;u7ChgMv0HUEHTj=9UoUV?JooO=t~EcBC!A$Fjs^7%Ix;<{X;q{XgZkvzqyFyC zZZqGJ*F0^vE%a;ho^p**Ek>joWh+lF|4|TSH9YykCnQp&9Zw~oM*qQMAwyN zP}X2Qs33FrBD9l*8tEblpY^;K{>rY@j4>4#;IECI{mV+DsEjWBj+Hxwb}>PdSnB^s zaoP4QO!W@!>72UJ{A+(&`tmC}UZ-ih*yn?78~a8j=4!`IR1&xeQ{yjMF~cs~cn`WG zuh-Umu?|NtC7dLR=la~}eB^VDqFv&8D7ppREJbq@u9m$Qu0T8rNhHF!8N*dSw~5zZ z;p<5S)_$IYU2!ilJ?F=uCxv01^_2&qy<;o=?q#=3D#T)* zEiyB6kG68EA$IP*DqiRX^V{e=_9?2tn{t>J_H{hxF0qbn*gDXGdDJF#}3T`33SKQ2DIrFOX?`Pq}k&f&V36H?R+K4K@OB>ZeI zI$3)*x4y<9mVznH?|7fZOErWpF8}dY(DD+0k2CRn*L;7^i(yWiViN0qtI|%uY=B>G zrrA_y@}k$Xd!$yq&v?bCI5elL^lEK|&b(?Hna@kJu|9YwwaOIs#ZsZP;aPoWFe8d- zlz4iNySE^8m(dOdNtH+I% zB1ee#Z&Df7Y&9lpBvdU8 ziCQuR$e)eYMC)MpnT=mgOOD)#Zho-(I3kZKZ!iIGN1n^An(oqVAG{x)_+Y4k;$+mP zCv!^((?LZ0F#%n_SFes>I)|_-pI`0?XD3WcUZ5|l_n-;aDB*osa$#wmPdq5vC^~@` zrRtgO;+|euyYsU!;f|!lhuKd3{)#=afi<_}asm9SmF(5^(zPbU&kxrjLJv29VCl{B zy3k0Mui1J<=29q~`kBW_y;WDv884RL;7l2$fg(?8@0!$Om*Jgvtb1NN^=z9Vcu{6l zJA;ML<5#&44sJq>eJHze=)fMu!t&HU=g-pLhhhnnZ+p8Mo|-KN3oi*hu6jO^pE}&I zcqT4=+297vj9yX4=cX8JuKo~rXHW4Tq?kES|47@IS76lp&XhL?&)(FTjh9_4rY=am zjGSYhyr@?8Yj@Y0&z-@w*+e~QS7kyb)oAaPl$P5i>7RD#TJ??wx`d{|wjt|L11&@C z6R7J|m}PtQ3SYgY zV9Ybm4q-t;vewG2c@2U&|E%Oh;?3tq-hoJ~o%plck>?7Hth7XOs34VfeU|r?V6qu) zcyLYPLYEF^mDj)R(wlyzVaiBJ*X-A0G6Fv>P+Hz3oJ?oyPFoGlG)V zNSBHX^X*4Q@xL{b%Y`vJvonXb@9;j`c*2CI^f|-!x%KN?-jP`Psjs-Dsh_)s{32Qw zWw*-f98(jzUUvIy@NK@xGpdxT>}_5fI&0;&exXn!nL)8}r0eO~q4T$H{LL*ZBe>CJ zMw?cOF?AUm+1ljtaou~*FcUdNhcf7t9Yh|^6dSqAhAG{n))*1i=@8qC6e|6@U4C~d z91~H7Udls-N1Sm!e{)>9*@P$Rc59QeR^CSb^alm>G1Tj}4%5yXQYSks(z(ccxA(v7 z>~I*(DLc3JWL$YRp|nRfI~lF3}5OnRAiZ;i2#?nkuyaN_b*+~d>4F+cp=l;ia~cg8*H zCjxn3Rfhe)j;{O>%JzE?vJ+9VZ`sC9Vu&y;G9sp;rtJH^i^Pzvti@QeOGDD|TE@PF z*E-p=HTFrPCWd$H!_4>jeE)&xhx45K+}CxTb6-b1$evDS;v(rt7&C=~B;&uiWw~nU zv`l)5t*|)W@Oy*3)`n@ZHqsm2OLzjxcMieOFQI z!6usxIAM3=D7_um>>zB7{ee`xcq;RTNb!`Lax0HBU>|qjtKIQVieM`a=ASiVPJQ(@ zhKU1s5*ovs_f5)T^`Ah>D%E5~`j+tRGSV?>0=J!Ou*4W}&ZHp%Rk3S3SZw~X`=RR0 zxEgIlm8-#r&Gr+1` ze^hw#!*mJh1Qmhl-##C&-7>RMI2v`ErgS_zECJRwO#LjQAD)vt)Hv2FO0%x!HMxZ; ziHWn}_G2{49H@26sb@wvF6mjpqOsR@o(3#2qLsPaQB!x$CJxQuuzR!~UuzL=m&QcW z@^MgWcwb^tEnM-DEwb`!i=%J_ToI8FXMEWZx|)mIV3CTkI7Kj(o!e`Qo1nQodGX?a zs<)$Qj;re&9bg(b8swof(KRC{i!84PySq@kLR4OLruxNsce{}<)}TE ziif0MK5~`1iVG6O_mj6~GxsB$z*RAPj|Ys{3vGKUuc$*jklX|z6ceO9Q6|A&Po2{d z!aQcgc9&UDH2OLVY_-TFq?wlIB{WJs!$He{5fR`t8Q5>@C4^CL4c$}f&toW!>`W0O z{VX4=rS$(?){~LiJKCI6F&S%*RC3W4=jlz0o7MF7%kvcOwoKc-ZOZ@N6*i)yY6)~> zPPu-*Dj_4;(H9jT1OFrP!SC?#Nc?pP;=o!@(y>$9b;{w^Evq2_Kf^IUdfBnUTCoLE z=7d0`rq~BzNP79^EZ_pwRVtq+}3w~FfKDtao`ziC52J=-liO_U zw~V+K^G_m!^LSS= zT)Z;u5n{XZ%DmYe?Sh>G_GJn>BB}B-hzA2478eRw#Zw&fM(?;Aba>h#CF6UF$~aco z(4~9k>i5`P7*$y%WnJhs)d|nL5Ev3pdMiV3=s`W#KMO=~vXN&ybJW`!_r*%KJNy3SQTMdO8vT0Vkl; zaR;HpFP|#7&Ldk}_FEkDK1IpLuW}>@pEruXm`AoZoDS5-go>IhRZo|X$;VJX*g?H! znjZFQ`TFGF(zzsRm-1md>L5%{Oj(e+O0)4!sM;ek5??z$%XO{tZOvGMcFw9^Oh(nu z4Od*{AYB;lXOsa$q~Z_H+W=0*urjMeC*bu^Pi)s53fYZvYAw8O;RxyI?Mvm=D@ns` zAX*ByniG6T0XeW5YaEHxAU3NP*OToy&$^Wb6#VuBOV6BCz-?85fp?(A^M^^%{qT8v z+ajmMaY3F_%>x0$6KCSjpFTJ5P4h`lBO?4PYn!dq-^dA3JH#<26PrS0SGCST-65hO zZQL38G>kGqzwZ3NJC^Roh02`t(hvsJy<7z}>lV-ZA#qp6BYr5`@zGkhr?6VDC*PoH zTkog-;5cjQU5;4JIBXh^uoi|8-KUP<;*S%7kC2ul%A-pgN9s|*&ffoADE~&GZCvcq zXyX*ctK^c_Fmhf5-9+E(jz{;~RoaeCs*yYIHP7fVh*QXugp~J=h&bcJI<@-^TIpBD zDJA+AN9=6us8_RZITTL53fE zusp2v%<+cA{fa)Fg;+8hX8-tDB7Q2U>euCwrY)BzFa=ql=y{bYoZEUcQJQ$p*b~yG z-C|WMkynv0XO98)O~4w?oqL>c(Q;9{-LlC?=Cf zRw75^3t#Cu#G_TwdGQ>&KWDnbG~((&vT=5>v!+cW= zc8@-=69eW;Mh{QS&H6cnm&qPIbBO!y<-dJg-fQz_MmO7b0Gvn+>H>AKnR8Fw&5)pR z-sj%j9f;RngvjaJ3wG#6Y|;-L(zsaf-w1(~KH_v1bw1k&s!Ps=!_Y37UzWYx(g@)I z5}a!vn)Z*(bYllSI~+qYlp;Kx^eEfY>d&EUqxFr!M}ZAJ7eGKuM5AwhHbY5vS5oSy z5+gr&M!L|C<^>y;G55h~aFGZ}bc+hWiS;g96{yi=na+Z_WF&sptpS8VTrv;ddFb*rq8grj&js#g%174Sq@lqA)f@1w_4V54n+2xe zYh2!D6Uh4GIcV9%BiS)-$+zg=FE!qL*ts+y`M;vP+sHEA*p+`O8UJNzG;piZI2iDB z_#EX`-#q>?y39j(Rul21Qq10tHscY(VQ0jKL5cL2CTlD2xk~#m-ikZ_YNVK134Z`X zC%fvk{ED!7e*U1#fcmaLw;tuTZvQ}x7u;{dij)M5lfEBcB9{B!s6qYZQPn{^MP|DG zKJG7xF8l5iqS}t)}Q+tRYoL4vCu!)EGKX1lE6^L+m3Wu?V|o+Z$T>S(K~?ijTZ!w1su=f~S>*xY|}cXl1B9&VDD$ z9xfDIGyTe(N=L-fHR3P;o7#$qB%Z9OTjzWiNh+)xHN)^e zY2+}NGok-`?4b}@f0W&WS!Z#8!%T)=$wZ-JSDuA? zxl>*JeqnA5@1Is0a(B|d;rOVUGe+60-NxO-q(t1y;Yi~xeA%nB*gYbc^y}6-#3|MO z8Et=p&*pV%w0T`4_VcrwY*>}&gMXLB0L`O+*h{;6unecAEESLHRUb7U1>9E82UYV| zcuzMi_`tb7S9qF&?+}Vn>ms=SwhrF->Y_AZV6=C(XS5zNdIgBjb*Q%rKxx(-!V~0Y zBb7p&ACO)2^2u|u!eyJ)|7Y51e3w&#O4Qe^~#;3+Fk{3Z3!*9Q);=1*=QpUEqvfy2Knhp?J%tH zEIaT-CfzRgd~95|KEK`mMcqJt+&eibK~hQ+>LF^3@b>>_ zJRlHeW`F-lC51iayZ07ud*%N5DI7WmdI-o>IG_15^$>qX)SQFEtC&?4689 z1)F_sydNoBoA>44V@U}Z5#)DTfy{?;rk$*Xl22{ZhHg)T1_X(VYN(gpjpF2Fv?*6i z@5W0_p$^0Z4=A00%{TeGQguRnrD3ONJ!fN&3jPc65m-wNE=TxAVcS7ZTl|pSpK`g+ z0!z-IfptffL_rn2PKHKE_$`zC%S$B^T>6T=0XKvX4Qf{-x;%ee*HaoG(1wSRs;aaO z9di%iU+L)8Hn8h`LFb}A`-+A-)Q1^8w^W;vG+L?1?KQ;Bd9uAWkg5fRB58M$8kYG_ zO99$0qpubq`uwWEpi&s-2XbHncukGD0^Qkj2M|Zx+9Sd3Yvs=TS~F3Tz5Zh&ne-Ym z^SyeGcddSoSi}vRwotdB~G)Pi_H6n`DrAV!t^$YMrK5RoaKlCemR0P-LRrky-Gz#cT<0^ zwbVRS$n{EpUP16bi%bx`h=+e=?`=(zAWPj2oYR;y~p>TjD&GJ-6| zZ#+Mbtn(p(n> zSC9o0uCD_~)wVJw`06@D8juG7I+d*UA4AYGD{%C*9qI)@>I5{Zt>qN2eh-t)`vmht zQzdfeW6O$`%J_aK6tM4^_0pE`SM2u1Uo+<@icN8R^m3d(=NCA zs{Ws(Lant~)vbKFP8zb`nA-QNkmHQ3#5LA41T0aW!(WHhr|yn+dtrX1{BGm+;YR=6 z+|0V@q$dWzO_I_-a5xyt=AOQlUvZ|_9JAQCWe!j;9izK-kME%`_Ll}_{r>p9Ner~! z$~;bKP;T!yjU*4ego68bK3TE>Y13pYx_?bDgy6E#mH_O3b`x~ttJNPL45^(Jj#(En zVVg#XEb8kY8G&yyH$CKQ?D`x1K9x1v^1qG`vtE$4aQ{F$H5NXrd%Cgx5tHjSuFI1R zn-0~NbPyI04?P?>gR+gSXyT%;mm`D|`vo7tvU17VwDhlQPpC$0lft6-qS3*=o*Bh1 z_w8cGJk&o(8QUj04{EWwlTO5^q+u68C%|K_;KOuG-j$Z#1^4UvYiAH-dbfS=kaM{O z6C=Wp-tlJ2R0G|$+M02_BndPM$}#a`H{3JGVr(4Lz2$=Ek=8lawgFdRQ&dQijTc^2 z$o7h#z~=Db{LoI9=0LUOb>9dy9Vwo(70{gpH)Mv~)F%mt&)3YefNzEk+7(iq>b#z$ zyZ%s67_YxLx83~tISgDqi>PqC0Gs5S)cS&b=s*g&a?brx*JaNn*duy)~e|G3_Bsi4^ ze##!H59!JaaAN}tqzvnc=c!dRZEYbvg(^{t&%U`!Zxohmu++@>;#;3uE-Ci?I(_@o za7QHI@MHgksL8=WWNtwqy&{-XuZ78|I>IO4ItP$4(K5WRhJRrNjevfUqu{UE$g=f= z<)St!uX7>8UD;`^-}|Z%9j}?3sW!ofAP24ON7d#Q#|3x)tN?od)+NP{Bpk94fNC~# zoed_YQKFTr)I%i*)*AL3@+N+$H$eQ{hWq@IKjG4s+uc`+5dwn?zN%;+rOyKxp~a9z z#)34qGW#^D)z1h2>u9djU2R@qtxwK1?SM_m;P?hwhyoCuP<2-)5a^tw=`G`jV06yL z-V36_^=IC1w~PK{XHlG2kyLb0RpLTtL2wet<8EfQYdgZU>SB4S28)rP4n*f41{M&o zggNuyzDYoifWB5X%g#yP@;b{-`G}G>C+s8p0>qErkpy-gL3mf04THz7%K?eSiSUNK z?Cfl?0a}f2-SLPP$=HlT9uugLSNcFK4+q*RRxP>c` zB7oqG0V131jY;4=qq!E|0!?^`I*1tAB}d8YKS3tQMxOTTTz>Pv?y#Tw0Gm|$mbk>( z$xO34*E9gck>w3Hk!WltpUB<4-079T1L8?7ZbKB5u2)jyPoNbRmM}o?c7}D|p${;p zFFCU$O__X~U1-Algc&h8bKx7c{SSEp4-1QdZq$~;`9N&4=-?>-siFLFElu^Sj8M!# z#QQ=KpoM4`8+;SI!7A$~7}xVCb09!zZJ*P)^;tKvllRkQi+6l|jdIgv!XpTbIUB}0 zf0Og4(xs#9S_{sTSSuK}$y_`iLe0J# zZ1{ijf2DiLoD~8&fw30O+4#HYGKP~zp9^|06dA;B2Tm|BEcmQGmgYtXXvli%In&-X zUxzGub-58?0`r6okKL0J9#aIdz535ZbMe1RJtUDD1^_PcP1LQjueK%$8mkEFUP5qva#SQ(Vyf+VjrFDbidXSeuqM^}IzjdVJn|=%eq<6_r<*5gTc0#51 zrZGH><&{RKTBj`dJmXT#8V;cFa-3$mE^MBioJvR%83F{ErOvsF$PatzZ+phT>;AOS zrkhN`SY_aKD|_EUh_-Y*%Iw-WXOrSX79F1R7OL$?dDEBVFzdjNs1vVJNi?rCl8`to z1jv-|y09>s&{LLOb{H5Xq`%Mrktep7FKl+0zAbta`FZzAPJrJ}WBPpy8m0SzWkLJn zd*-+sH%@$83oDSI50hvH18B`!*>VVuqCp=Xr}<&34xaL z0U=_yr9k&8`v~Rs<70;1&|YbIqCqL@TzJneFgpSBlxkSpDfT)Il_7r!K6q{b5KZfn;a9t(knD zJdWF+l;^GF=a-~BoH1`pp5VQH@%IQ{FYeN)<-2}eziFd`ugBrVPxjmTinj(^>7HM@ zg?8~Z*&1Ohwm=_awl{viTVZr?)p0t(5qs?>W@^x}UD{)VTaxPO)UO!%VCK_gWZ{ab z14TCTJ-H*Lj?>J{%>LZMh_J&#ZypV&^0)8b`TCl=GSov@Bt>19^cfhU{r&wB{BGKv zKzf|EQc>(x)A}E;PBQT8c6~Fc$;IM5s(p@Fw0(T``_rxCY;9AmaScICuK%iET#^s| z_2FtwTbsb;%PG`s0w@&KMH~t0rt@#js(Tt55s8V3$;qZSZ~A0sFNPwQDf^-rLKomy@nSL#^ORYnjvR+H@k~GW#d>*KM(9e^Qj91sX!wEL`2z zCYq|e_q1{irELdquzSpB7fVS=eg6EpK7>sbeSq84tMYQsVExnCiR?~ByRT2ReiRS) z_wpt_l$Ji(MMgyxAqWBAS73o`bjYJ8#>dC!=gVydia3;_G*(8PW`3J=e7=M3s`T8h zt*y1g9?*BNp)yhM4~i$d%fHH@(~O;3d01nTqOVWJaq3r7b2IzrU=~UIMyIM(PtN4} zZn516=jZC`n=bA3K}_@VOT2Eg&ia)enrWS_3DTa!74FCaebC+YmC@T<&ta*CwhrU< zXV}-)*G&^W+}wHx2BHUVjm#}$34dpuq&>IH63fcUMD2$6nBc~zu1!-BSoFF?e6YXELhnQ2 z$>_IhsmQkm^W2M1R^7}AWGya+mP#>9N-~<W z*;?qkP0*X~Y-tJfSNVA3#}b(J{?@OXb%L7oHA3jxVb$t^fjIxQwKd)EPr-PBcZ1Hy z%OX`14DX`d-Q3PTl#@HUC&JI4{VR*YKV35m(IT(;DCMq(osO4u?Ju%XLbHc*OH0QO zwI%%it)#4M#`d(ZKPBbzRuBnFgZ}Qp5ma?;Sa`VIa7C$E6ZJtC3;TH?S>yih`lLf? z91=G`DZ9VYz=nL3aL(+?Mk!kUNx66PW_6}!*4OOp`R=UZXPsZv7>>+efBM^aXJvH$ zZ+1a`zJs%~0Txqv^TG!qlcQ9-dwa`6#brOdP7)*P(vxZ07pwhLqk!q z`R5z5tS!+a)xU_YP(A-xKej@}(ZvZ%JbxTwzOP^J@2|IWsU|E8mAjgmO~4y3v9m8M zE=CI&ls#!Ze_#t+cjdM(xwz-nLR-8f9qFAoQ5#X)!I_DPjm;jT>4^z2H@k!cE|O$% zpxBNu5w02~V8BBkNc@23@BIDkoty^0ncTj0>y{q{%je`|Fc=c>v^Dm6IOl!c zBI`#jQT#PEHH2jXUUkH5u;lsd>}-KWdr?u5VZoF8PoF;R9_B=S5T8<6(_~;MRxG@y zs%kUWR~Acp6osNGvmcd<37n|reI^n+Hum_y7#kg}O~4;04NHG&?kzv_D?z%P)Ml0B zczR9PvSF6>yM}aG6v_vodhP4`#KNNeqj=}=Fg`62dH*=BQDhTy7CPh#|t2 zN!M-spZsZ5>ILFt+B}QA`bMnT#zvi%P%q?I$G)CB;P@VEr}Q z(b3UdIHsVWK!@+Hi&w!@kyr>u@7|F|DwZ5y%7;+LEot%C(H&g5AT1F`5 z-Mm15O4)!)~Anv-Td^&a-ED!T3Y&??^WkJD47R=#$E8?hSk&Sl@%2bl%gUd-<+1UV|Mu&qQT>A zZ+~;?q>tKJu;eEZUlV2);^V%-DKI!q+r-iETUFfQXY)>nhkUa@s;@Z{?d|+lC9S2g zv9YP?B6|ROY+>P-(7TMlqo@l+o1=uHz$PUnB`GN>FJB&&NmNDiL^jvg*Z1^@adRtN zrj9AQi4t=4hc%$?z7Gq_cbrzq(-|zbGqSU@V`5@rZ*FNR#~k1SXt=0pXd2#~8y_7t znG-%z{nZ4?fnAo0j*8;sPco_Tt?@lm?mQp$P(oEjB}y?B41D6Ram1^tu!j`UVPVwg z&drXGUxP#^D=RCyO%s}(osGp3D%{umi|yFXor?(zd;Bi!2rBaw(e%x~i);o&ZTcY= z!L9%P{h(CecJ8fZE-VGYmdj%QbrF#Wq-CFT|sKBo_J-#Lg& z#WY+h`{1i`Nh`CRX%_7X{DrSn(yrYzDSV)>|51mJ;`He&rK^yE(^L}$O3fjYLMRjv z$a#`Qf^wrcyp74FC0jc?RWv<4{elyVo!v6zq`yN$-r&OM%Sdz!gMj|bLo%ggk?88~zRt}( z19_ZdJECQhjGhnT_nW{#rS=4A$e#=@dk`e~A{C?g_3ok>1P#r&7Ns!zAN;@EkK>F~ z)XvsL>i#Z_k2|jX`vJ!Kn`?vs3fSGMu2Ki2`e$J9mx_vw}i(A3r=0|Hj6~CMHClkD*;% zk!==9ms4-#T*~zY2vc!(VPRp!3y?7g)YjGY_4cCW0zSHBl9Q9u5Q{OmaJII-o>kJtx;f$s zPC7g+Y;1hI?(u4#X#)j|gorD$q|g3X^~Sdj0-Uk)L0`-^+QC;nw{vv(mVPIZl;?f> zW)BG=FE4N5%1f}n@W>jx(A3lv*ys3eCsb5O z$t2p@*cdpB!!dyMZWu9bSlig_dSPsBb4Fz$6kR%u=7_M@S`!y!3bHe2ymwYiMykAX z4a)0nr&rwo3!1VObh-hs8uQb5fLm(dX)KPsbPOTcW&4C9-TyxRWh2IVei&Wl`Ncab@OjPzX>$xcpAj*gC2 z<}3$L1PEKgb!jmDVe;$OuOV^GIY}T0;$rU2KDNHQ@F);`ggR82({uMgn7qbiX?b~h zW<~+My*y$uG7Bd_P`~8Cg9pEJ49WpOom-oAUhFT_%+fNidfg|3GM3ZnAx0%3&n;`0 z6eB+RWxyHh$W$vpNOpFCXgy0RrjsZAAUJ3dy8irG16P8a54#SCJ^5}>Kj2w_8AdW_ zGcz;T5piaUIN!|}oviM;?TmjM?4;!670&a20qlc=2zzYI04~{Isi9nO{=Oi7gx;^l zWI0W*uYAte*B7%r zF8w|Vbpdq`eM@6+3t}TZEp3G54%7pRseiz-*?Ps)RFb_2I5*<5L-?I^8zhmQ)p{TuuG`s(Ya08#ofPr|y+nYQpFSDyZ7m*s;o}d9gVDFt zZS^srnkFr|q;KHeyjovBKtOVHbF;U%Pg9AnsHm_VDx+g&UKkx+o$0uA&{kDd1(6aw z#cg@G67XNMVVxu#fvs+M-SbjpaDU$`RG|y32fz55z|rNPzURJf(_Ay@5Y6`}AJ&5< z;N$#{l8_7y4F#kdVKF1#+d~jF0Wr4QUU_4}Xk;`3o~aTq5h=y?6LX3K;w)sX9UM+; zYl7r|@1Z@cLa*2s;!+WSPImUk5c36>ks6_2OGD)l;2@uQK~;I;%z5j+d~>J|As5HV zcuPdLNPF$r7uyaQ8lDaJ_oZZGWoG7!Zjr^!T%zzRup6m@op~ddq``yTor(+d#1Ia) z!?{$a>~BC`dpcCM3EnX5KFzYl0YJb7hXH7N?C6VEuWkcw4M^8RifvP)`n@<g);_k_qw{4j~SZ$hg*n0QcP(eW3%SO)6 zpJ!>rZESRXNyyI1xB&39|B|>kcyb$gjeeO^2B3<`#i;*)hvj89YU;JMGv3{n&H(Y{ zBW94}4uhbom*HK77NH%`oM zYo?h9Q}HM;PY$>-0X z-@A7YTy5dcXMj+D|K5(Oe0=LNwI$?(sxQh>MSw z8KTlDKCA#@HhxTA)0L&2Ygp;=Mc^2~yRR!G;T=R+B-gBh;Yx;*S%lraP3giiar0dR33&bpKbF8O0#T^s z!wctMiO|rno@1|0dHeQWl87@E%2j6fgV+d0+SH+>|I5;1{dcvIeYGO4uAQGqs;^RdIy z=VstV#4SMo#W@1X`N-ijpL7B)BHZ`WF1=~)x`V2=x_wyq(3&=~H6t$_Z=sw~#Fr62 zh1KwZXew#iE7Y(X@uDjqslz2cdGUDhA9JfYEM^^f?%!ul{r1gxk|EIJ`1h@6;}X^n za%V2>S&gM@uHjNKLbfx(i%eO`MX`R@{wa%!FaMD$2W6ACc zbUGi*Y1D#*GyW+m(UHMbVrqpPr~M=)%k?Wh?Cj>d&psn4$Ksl-BJrOOJYCW9EWMS> zJw3B2PZYghrCUwJT|{ZHp%E0yt*!bvvtKKN_0Ek_O_KQTv7$SP=y`pq>}A!~?cOB1 zF2sDG@xD<;S0;(y7@GYmRpIvR;Fs+7l8&U?BP@uG-SSTCCQ}cShGpw-C;%%)g+`%r zNw_98;7vQ~uxChrMPuyx#X)(C8<|dVo~Gi>-{0!ZI+dkg+T&75X!3m)WtW!YIK|)6 z(t43SQnAp*S;r?)yP?Q7oReJjzIXM~_(;>b{#fF|_&cs={Beq8YwNv>5B;{!Fm+|c z7q=k)-dD$o0|{(Jn`BFayq~U9u>^_J{+muc7-5M2 z-jFfey1*u*a8)rwG4*j@Sf7D}=(FVp&!XQiVIWY@4u?KB=RCzx!8-@@OjP0k6+c}kgD;-ATY))>m`d2zk?r&lR=Ld3dk2?Z(de7)#ZrJaXpeozmqV z>aUjbws-R~sKiTsxw2|-AF2t?kAIO{kAaX-=L#_>_sFx9zj7y#4ucxD|IbN&ktOE4 zY_(}vtjDfGMab2;A5wfTtq^IH&{+^k=*W=$xR!{hu|@T~XUQziE9718-me&ZC5s{K zMl%iUIoWnKnm+HksKP&D6L za<7w)SL_NMskh(BE$?EJ7D}4|XD3&?{Dt*XG9k!RE)5;FTzE*Sv_Q&w$u}3fv)FS9 z7c@;x*teVv>oyWlk=TyLjOWTz+U?*1S5h69MwD`XzEJ!zmH=LO=qSM^ z&?fJ!x}C<{pC0FXNS)TO>B>Rc9t-x5C4wMHJBSf zzCBc|bX}%M6kM^MtFvVw<=+SiUmn!pp{tSebXofCe}F8nj?06qYwRyI*G6nQ@;D~H z$UW~h*t1N6Qa&BMdlU$ncP5S)8PZa$Oj%P1a-DUS&HA}$lq*hQ^{XcRxq&)WQR>iw zf|hSTZk-INEiWsLw&V`&mF&qvM)&*h7i$!4M+!}qihVA`o6rP1)iZi6^=C)RWt4cW z4#I*FN#~`hnHlS^YK6MlT3OwRHov1jTxg$Or@WKMQ(BN6f2)N(@(=7yor%$;nT7M> zuo5;;ecIMh_6!&Mh>F1`)5xq?@85bA%jMtcc@}gO8l)#X*#4dIdq@mTONjd>-Oue} zrhbk-!w7zav{tA&*7I@Nc) zFp2-(_l|sij0DbY|FKTwiJlwnsF-jmt>B(qvf0Y>vv7=80hE5eMAVGnxpU#pg|kS- zT4h9r=KR(WiKpWY!F|c4fefprK~*#}MVhCv9XMyEON81Dg)=C-8~ap5dhEnq!o5nt z-bdF0zvx<(Z*@tCTuImu|A{vU`u6QFHiM)&R{7urc|fp){Wz|>_~prn15sY1%y_hf z@xPTji5REN<~N>KTxH@VyZ`)oyV&|yMc8d7{SjLT)=g$~w8qm)+pjhDsv%;iVfLHL zP?B+H{s^j&o^u}sOO&d~ANoMp$)_Zh9`8M=Ncx1WLe@pG&gKsLYL4{PxWB-VynW+d zDjsy+vu)3*6vL9B%HW-c8Jg})!>6Sy{LKp|w6T5en~}1>=Zgc#pg3*)CuLUt8iR72 zNd8#zv8|bP73>dnuBz=OWH9y8-C$nF#NaCY(HFmq)wQjxm@Y+?nf1jAMhWg14?dvq zTOZxn<-ij7^eY@Xae@}!QaRtgRhMg)vy=yG*!&F1`0u?ta_wdY2I{5ur=+EcZdx1M zKYj$|bNWg|gu3w@yCv{+^8@AM3+^VBdmCcT{B|cY&Ya%)f(RT%;kkB~3Y+WQh}3Ge z<58JP%P=pN)sFXUgCuZ|koD?3 z-eR~p^n!@g%xOp!tWD~s~K~%l|>75UABoBIsl<>_` zM&HY#wemPISufVUM<$t+|Al*Ww{T*&y;$#A`@edJdNBR3{X8uBMa}!#*kfLRGOx>3 zb7h=)E;LN}fZ-54Wj()fx$q)yUdFtSC1=rvfa_Dc2&(JRjaLAXeDkTP5|ws^|2(~K zK+4DzeOok2r~Txo;6s}zo+WL3q58&whlex1t*hJTst|bqf1~2-9~hsqLqqfUnKbGu zKPKbhsb}yJV`9S9(U&-0^C`VaM0%P39N>>y?Ei)9RU{Qx8GU!8s82V^`6!2CQ0p&= z7SU`F0?e+UAidESAC;j;9Y>{i3zbrak9?B=a`*-EFQyDiAs@>W-jb{;DWmlX#thQTc}6cQ+e(>= zEhAwq)^2B@a!e0zPeMuCO?6lPLUEsnNyFy5bc{30orEu?#kbx09{k=uYC3BDl$Ti6 zT;k&L^M|NcP;jkA=xzoV7Z>k(UwB1@ermo>atGt^`<6-4H}plK)F%;ni-7pbhi{Mg z=pHg>b9|eTcLu+NyAP9PZgRg%mudIBI4d%zw7!FpG%7_NK76RJudk-2cI(!W#C9$~ zaptC`&>UoIdi>I&tlK7#gZ{$65i+&;ICPDBnSoY*A6zllzr-*q=uR!j%rI z0?X)wy=_TETpXCq_094>Um8gJbG;5QU0~cWM*7SEJ52H!r;1h5|F- z-MfYU!g-$~BqjPenDRrK906VvYG-z^ziNVh--ci`L*%amSUXO@wy20&CNWndV{P5x z&mY#w$!V=j)k0lo9%6b-Vdeu%j0A`n=iOVDt}C2 zd`+aJEA;gfkWnhq*TKP?%q;V%scBzQ2LH?=PQI>LT3Jx!+YQwBtZt~=R1%o4_ZM$lenP#t`Rz$-tmT|Om**#c%bzk&UT+Q7 zC%dy${b^#I6QicOWP5@9zNXQxviHGym`$ne?VTayvL^Sj zfvs3tT6%Tj3^dTG5h@NYE~Qj8=oW*OiLF^^3PSN;hcNDKSYnrDtVX0a*#0 zYASH2JepbExn3bZe>|hVbp7S0@wxI5%WH@VzWl04_n35Qou}ex^+|NC70r{?gg=j8 zfAl|Q$MvWpZNhax6&))tD=c?%F?_sij4Kjn47d?|5E>BT9~tnIHo)itTdin2>QD;O z1_eb$VJ|nC^*(G}Z@*%5%fVMTexjl-kyk$Yb6+cPu%ky=^8cqC?CwSip;3U|Xp>x4 z{vb5Ew~Q^$&$k?@sszebF6k5n1s>RW5FP9v9H=HpiJLXP|Mg3`$mGeBskO-#5KJUS zM{n0L7?HEd4F3H2vV9ti=2;?0ZIk^TmEgTsf+%hy7 z#cT%^(Es;-fG2+6y~xDG1OSrX_}Ca2C?Fjn;ICf28X6jkc3K^~<4xd+w1fi$Tk|-L zjsKW(g;=-HUv08G(yV;nhfCaN}$yf(m?brHe~-Q=r(FblE*A^$JlHl zu`d4#Kh)`X<}*cNzpF7jX}}N1eg52}oEf&oPIdilD){L?S$;;AooaG&a&_0s%4$B0 ziA~yrmVv=_tTsSRa-hF|ZFhfA|8{P(CQl%tXQex9Rl}r?^$qg5B>z4%cn{eZ1`*4y z8Bj??3mO6WRS1Fl{9E~*w$^X?0T`Wv9VhY6!B9vnF+I(dG8^jRE6MlK=YzS zp8md2GxEv4nm^FQ{U@eJq$xDE>lJ~OW9GxBWsX}TN)<(k(LE2=jl~+OXiU3bciMjt zoqj8TbqJp_`U{-~t!&-MUA0t!`fk%@>Xoka$r z)>fPSomJQ@1Y#Q634RBv_vEo-Xf)a%{rO??U3U);tt2E{tHn_1Q|BysOf(VZ`&G8u zG{p_&+Z;c7WUuReqaLa0eCxB{Mthf+M$*_B?k+U@8=SjU`f6;hCDAgGgLZk8o1*(t z{9Q*ZH3`AR#f2wwZqkaWIpV+kKY4tFAaYjc8|B7GEzc*lD`yt8RJm!jicUi;J3N&7 zDk^QDXqo;MfMR@YP1=Si0=6B8cu5yVyzgX9bMuReQwFN?b% zRA8IuD)Z<+k-$)0_`yUk#-1z>AZLklb#W=m%PYkklwFhra(w9T->Awz{b!4c2$*|9 z6EanrB|U;mbH^W87(Z8qQcgff=-d4`QD9IPJCgk>E4`r~bvHS$sEGCIV>IYosNl}8 zk~^-B)m2m=6+9d5lMd7EiC7?~d9`!Sc7VuXd||=*pN`u-XvPBbTZIrXK>cTFWp6|? zGs-=$4f6N5t8r$kwZiA++<4_r`!I;$9b;#8_3JzPucg?y@xk!C^zCJ)=S*KE#5DId zRD;#Gqg^rQYJ{Ls09~1Q31=SnYk~&>WYUF*uJ>5&X`uJREW~-HW^|UD!W+;VJFB^g~rZ`ui-+PP@XIED? zQS07~+0H(eGFT4e5m?>$Ds;#rVq%)cS5Hu~{xZC&fBfhR=wg#Vuc;krZuS8647{5B zS)GpP$cnVw?CfKK zIFhb&zv3sd=yH$j=WlEv|C`fK4+s5_r0WtNEooqBnm?N+qa4e3Lk{c6+uAL zypS|_o1sO}K;=P(26+v%aUx5bEp+>nBRq?FoslC~LmKQxatahK=V)9-J-GH?5zK2S ziQLxHH8P>wW?^RL1o9&AO5pa<8^fN*o(f-%tf+M+f1+z`)Bc!E&Za{xv@)e;&TF8z2Wg?^_4Q z#4C|?)B&b+Q#fr791T@;OJT9AKv;{gFyUdAhD3ah<-y_WeJ(Qkj;`*qho)8*I?_4F zYKr3u8j5K39=*-Z9E6S$Jh~W_yN-mneN%$9iXgeo`~cA&hAJECr)cpy>&8=oL<1f^ zYK#;$5n&ho{ETz#~gjp*q8U>0r!}_{TA_+s88pg73#i`O9+pP ziHy7$dc&b~uzBl2CvoL&y<1|AWh-{Di6$Lw#w%_*40#IK8RadjfY!=?GA z1kH2Vf;?fTkFie>yKN|+Sgyz$r;pL!ad>3Tq{V@2AsU84^C?u9DAcn=62kxVlTo?t zZEd#%p-E_@a;Vo7iqIJGn%X`+9PBrxu-f%Mu@3Sub>S zOHufN>Y=mbxoPsW*tk3rqwF%>#sV^zPq#<{&_BmDTZ+kqUh8JJH8(dmHkNqpI)JEw zpP&D}0To=X;+&aqA82FTr4kU>^U6wTYJ;GT>0-z!Ztm^@=z4wqhQ^W0PzS<`Y^<%p z;l^iX{70xe$5!2-Zw>lKNKueYi?p(?g8~d%Iwy>2;tLC%p`-jUK0b8DGE4>wRnSnG zb4$r?YhwqYBUxUGwH>5^B||^0Ec?G-iEgPx2vr#f87$043>7yMD{5moC-+Mi;IBAy z@bmS!&}0OIsRAk7^Sxuq>5wAf|1z?O))GTe8}OTK>_3^90ZW0zF=&8`@eP{&2Qd_) zgpU39ulq52AI@k=o<4RI1bXnWBPXGWznkn1t>(@&Rmd#i;pzw!H{a4fQJs^N=UqNUw) zxzYl5WbSAZ`E`Z^(Ct7E`$D85uM83q8CeKO9xQq3fam~SDxiGQuktDl3TjQchlE3E z_1MBfTVG$w{$Dj<$#^KPp!PEQ{`4Wh?E40s5n7HNgo&nb>Hsr%f-dpIAIn1M!vmC` zAl8;&MTs{j^!p7N1HFL$4fqf!3m~Yui~}Ctg4W zIKv<5=v+o1y5>A^aL8A<%)`gWR}c=RSumSy74Gd|fkns$$4Lt2^b$>w5^&y+)$rCN z9@{Qz=oq&|3sRmw9V2Z1R%V-~BULFn_PW&*6O$j~t03kQg`1dciHZSfq7etndTc;NSU0p3YSNN8DIg1K0=P696XuUEca} zlI=1lC)6H!z6ui@VxMDZbMk$z!^vzGOb6H7=2GaB; zsoN6td9H$jxx4GrfI9j|Mu^Jc??pwRMmvB-f#5e|B)okZu$UJdA&@EwUhgXh`2~3m z0_)80Ab?m{F6lwi1N{>FA0s1){%}bsWosWlKZ7lwQ}o(X~mX|kh2m@mABP1t4+bCl77w*%YC-SZT7uCcz3<)H5Iy4XDgB9)_Y>)7EheSqdIyr3+ z4n_!?>hYY>v9UNcMJ8%wwC?Sf!GE`u` z0VL?5u)Q+UpmPIngJ;@4ir+>H$1H%No&u;6_Ea^Zj2w&)S`|5M{rH&$+ABEqJvj!KJ}+181s^o#7*2X0cNz)m{LplBdHL zssNhFs=cLhP#%HK?OR3s;^HDdAD{5GYetwW7cN}5a^)TX7g}0gX&|z4jUg6v%6S4g4@~Q)BQdJ+c;^i^cOU*Acd!7zVRE@2B=qKh2?hc)`VE+ zAVx_xxJ`(BPlxb{)Ji;{w8#qRa_WXU1z!$USixusCptbefRUysD$N-BloX@$ylXzEfd<| zI8m@ll>j>dx=+l(W)H~;@*9p*{pm*-htiIh3{{3kCPYJ^q0il*H8{?(%*Pw5PzL-R z8fsIRxp?*F%^ir%AlXwg+{@~mZC*$N3j(V|WTRA70WTgoas*1~Kze?)tnSmNPlM_i z6t2ojN&{Gg81!Tj5RS30!KZC*4ngXJ%lZ>VZ4e^_`z(&1UNraK+ls&OoSh1!&|Z-E zt^R(cB7Fn%A^UIy;LuLZ&OUllWaj*zIiH1c1!d*^tpU5+a&kQQL(jdn!EoxBk=N?+ zJsm_`0cx{NrmX6=wk2>^?Hqk~1i%Pn?q0iUQBhGi6}qJk=Fm0(fg7jg;M+hDm7{G4+ z)dQ}49zYx2iDMASELvkX`z#W{x!;*Ey72YAzjsU%`rA4%iWMGyDO91C|9sF?iy(FZ zXihYHU%9It@SqSqVD?2G4cx0bH?4V9D3}YNImAd%i;LL}5BBwydLr9P5KH0Y!sdVu zo}Tm#q_Sd_v`!=0e{*yFAf|^f|4lXSx|LRD`&$~_E5JuDkc5KDKcKfIurG_OH`T9M z+39N-ZxlEroO;H!j_$DiC$WUWk9%(r78C@y%Z8eo8uC+(?EHxs!x}dm7b7v+~nO&09s6*+CxQam2Nx4mp(^q7kwGL|(BRFhiqD%!&m zDIiKkI{{s^H4E8oQyUYZ9RTds&6_Z1MSMU!>$8iZi?BdW$t1QX3;{6q=^2F`n3*98 zbE5{+JD%cU|G*{ZiZysvG@12UK2GQt9=YYhw+m1VWYLd`Z4I2;FOJ&Z0A3PqLU8vq zKpid_84Q#<*n=%SLqk@{iCndeEdWx?%=*LcmcTm_WxR2~6E4tIqCs2x%?23|jZv<* zeb${xS0e?Imc2&DifU^n+2*3sM!=A|pou{Lv6*2kwn#hd+J%lU2^UWw9 z+{%yq9P$UiOV~k+Sw0j9luV-U4(hyPva;qO&s3V!oXFFG1a<&BJF7|+rG1*}46BqI zAYh(IMOnMtmuukBpX%*ze1v={fA?-Mlb8x(kpyg-xtUpnepXsVbsC#0Unx3CrYN80 zMQ^X}k1=)-uo7LnH}8_uu7_=5aJ>THl)gH`2^RU&dnd;JAVhDqj*=@8-^gy6< z?%ufrI$qfKJT_fmu#`EOfS+_fICkvVS0ijf%j8^c{;5-^dZAw~$fC}HJ z*fu^gG7=U9;q3U)AFof-G|zu~`C97{-DL^(GK7HO{n#+@zV`I=^oWQEQURx&HMAvnRr@bMZhZn?E;90$(QfYDT7WY(UAUB zmo^-oGWM&rr`#T!o6cKNoccR)lgMmAa)Fe68x8mP7`svdLDsGk*`zOjrI^|eksc-x zArA5?I02RGB}3$Ral73hJ%tBeNdpjCa`HH&S5i_^38$H}EG!1A8Zm3sy5^eiXZ)W+ zHu(RI+66zRCeoJz0+Etpkl_2f3Y=pE4NB~jDgra0N)iPTcmRS1N$`VP(+h>)AQEP| z6^jMSB|#pqgZ$J|(c#pZ{x1!dYdqCkzI#_*etvmM^4Xuu2WE7TufYkS2Rt+L6r2IH z?{hszA9B;eRzkZ9vs}4dwZEq164?%O1-y~XfV$ak*!u)!LuR$$%9?S#@cH}q?^@Z2 zE-{h89&xFBJVi-~bzlFInraSRI_&1mcKr3V@%l-A-Mp(3jQOVuA2HROMKx%Z2%3&a>a^phDJZscM?&1 zrjH-P>>?#N6EfG80nP5%OmZT3=aZSSTWz81Yvv2}31t4d`g%BZ1wB`JXh}Ui_dq-i z&hcTzQ>oCSGZ}$m)z#jfQNrozebzkD-%mwgc4Ew-)W~}?^0Xt7*YTlxq^F0h{5T15 z6ajP#tU~~_ikpUpDw|y`U!FJKpF!H&ro=po?F0m(TLeU`bUAv;i1b(bhZh0CHKWjE zO4rq<&DP{esC?{nx81Hj1TP$;jL->ou>!35A^`RHzx$dsFLFh1e$G1cE@9-ItWWh9(=;d{Bz$aBRku)WV3gJ|LGA{7L7%dNvvJN0%xc2?g>`c5_&|-*Do&o~(*|Pw50%uCMrMd8Sq5f z@k1ds&u=h?Dwx@roBtT6TjZ459*u`!j}!N*|HFy zLOsaNWITxTC=&he{~MR^ysI<)Ng3|*%^cBC+R)~v1#t-!kL%OzMi6YF>dzYI?w*db zs|pAS$^Fs>J<<TY82h^2U4EFMkpnT_brb=B3on3PR>e z$M>wlFdemspgwcWjnW>SP~x?!g)tklpc%NE93$@d{ehnSMSxT2@AjiVfy;oQ za$z8?T3VnWA+8B}utf-({TxK0v^1{rc95QULb2S{rNPCO2CoP1G|x|`#C{Zdh%lew z&n+e<2JA)MTRN!L09#!C3{jF;v;xP_VOa=OjkN31M^Ia5IXF382F`$vj?Njn;q0Uo z6avdb=H}*gwY7s)-g;Tx9-f}W`O2R^k!`bh#JjsbpX(`Da6f$(2CpWceCyQxf6N!`lC@_9&b=#ou3d4;}sblJw#QDpy zcs=4~rw_c7>M`OBpPZTkv!`@z!PE}K4R%Ouzo7=L4`$gTrrXP5fPAjd5>(ErDkv~Q zO$T3gu%000o)16-iV0sozhcX7OF-T@3>3%FP+I5e)L8<{UMhGaE07t>8(krrt6OMKQ#O6oI2H!{U97aotL>a{EmdaUtVx`!b zD8BN!gTJh8AGxNHUy^^jUUdz|TNFz@iHxdoZiIJTMK_m`$N> z&FEPa&_Ie;V5Te6eTLU)w;8^&!vc>lfR`6z4;GgZ!d_2LkL+4#2zM$43*lk1bklqM zKT15YO(}~Xm&JF=9(00bb@*6sOkL8s96a6*g^|(DPlnfL8!DP|$-j7$abJ2vib^5i zjhY1UNXGg)GJziu410VD&xRLI2|eh<+7KFZJGc_J3GI!z;qAEO+BDgx*yZ9uBhS&_ zw^0}Hb*}Gu?KUv;zU%lA24vrEGMbQBNkUjbiZCk-6@jV3WJLJM+2F~RKpsh1bv zXF5hb3SZDij`A9j-RR(ci=WHI&kZeOkZq79oDZs}+^?pzZ@d4M1ywa0SC!H66ogD- z6{BZ(d3oEV*58fa7}>Z#(lx(1c0+WpVl&&$dn|y9uf?M?Zg|5NUMGkj6AV5_p4yeq z*H&u&DB=(I+p3i}g8Pjj`;7oqn1brdhc^Z4d*S;p(mH3!1S?i<%Wm8Tu?J!+8n=wu zE>D$0%Tvo?=F%{8(#!6u@ckH~aqY5%eTZ3Gi!{EYI27j*pqokoF$ARu9(sA zjZGtYt%Q6+*2vK(P1rp?Au?;%W!dImFZNGj5@fc6s)3n#nk`w}r&krI5jE>LGIKE1 zvXJOKF#LirtD0Br#qh{Gesi3lvhCXSS1DIq;n=OS$gx}R9ow#O?K5`B#u5y zi_e)_Sy@dbzJ5=nsI9F(AW<#m>nBb5WC!#4P>uP&Ch~w|pRg#0uo_*pks2OivDwClI%U260)D8BEtxRpFHQc$WI!xw*`~hUXtE ze0Fw1E-ky3+uTH z=Tx2c-oK$mUD(_lr?^;)t0HjjB8gRTmAf!4y3yVzwtwOI){{sxZ^53xW9HwO{ki-S z*lwK#D;;YRH=kuYcB@ps3PKfhl&~cSP`U44YnMtctZG;n+-^hH;v8>R~f;G<(v z7fu2H^Zl>x{Jyo{lYf`*t$}eq=?h?2gY3NE(86HrdNi^deG+l?1gcebf0WX-eCYB$ z2w;W;T#r$u$Mu$cFp=oU^y?ZKr|(?nApMW13l%Y#%Z|!F;ECi;o$_9hvNO6@Gn{qG zYQfp41xuJlIjsdQe==Igh@ioox@hO#q9?Q0*Z$>Mtlj>cHWtT)tZ`K>=YIXF za0RNQXGKa^a*eQ{D8a0)3qBbgDS3X$=$JjTg>YZs9&4;D2?}zouGK}fvr75Umx$Ph zlNKsr05Vymyr88fa{i!Jb-#9Cc&jKa!2_|Bh-by|0bTP)m#~{i*qt{bc%a;-Vk`_j zW>XoAyq-VACB9C+>lt?OdR!}Ci;JsktL&SzKx$1b(_oIJs?CDChAi*FFO|#Qg42HY zsm^glSNR&^&U?(B*;2)OuFg`xHfDJnu+^|_vFvJq>Zyyv`%_|x`x8dEKhcJ6qi<}B_e$Z7 zY=l)dqStp=V;v@uW((Q9KA63Q1m-oTp4hxCNFOLEDJh8Ecc8sfwTuk)cn`_T;yU2# z1qufiRlVob*>)S{^ZC}j3D6uP>@>&{`4RYl5bp)kB5!{c_#S~rQQoV8MhlxB$hIru zsu6SK;zW!^!tPIoD&s-F9R1S#%F3ZxrvwacRuXZeITCz+@t!ZO?;*i0-w{67sAuT@E@h&+ARg|*V_QeBm_SbGIeiv*=t&oXn}2QWK%n?b;=bp?TVSX%_cmM z=($uXhTUyt!y&)@s`kpUdrVcMOjXN!Rm*S_zlip}5e$8Z6}VbEE!RFV!E(v&HjV7J zj$D52)!^#YkfdrL5IwRtyp354Pu#DO-LK(Fa2p$_S{%URatXNK(!^^pz_vT*da|JG z+j9RGZEqe9<@<+$P9lS3D%tmJW68b~hR7gH*0E(LTlOtR*0RTtJ=>5N+ZY;aCHq#k zu`6Q87D7nQ+xK_QzvnvFbCKly$NRgX z#8%)c|Dx8TIsb5Re`ntf*6!dXJN|Q>E%xyB1^iF#BG1J)zb*H_H_tkM2hHrB+wTkS zj^VC{{|F(W{z&a3sZ_Pum;Zbez@`4NI-R@7rQiI+t~zkhjSAV-xc6VsQh1$KB^Dmy zwEB^q9oHUywo$S8Dag`g>JXRjNl0s)0hHVb}i)Eos`Xw4vW9{})cxAzjwIfATxJ=urQm17NDTK+u2x z2Nl4+chojg|F4si{eOMk;m24X ztoQr>yx=syOK@PV{NK1T7X8xx-$4DpKK#G$|NrUa|J}#`{ki|UCx!nfH-wtLtOg-h z(6|r1Bn`SmR)n8o0YySSBcu7%fS>8R2H=@Fpe<0-Z^*w#nlEE`dK>I}?24u0Mo=G6 za?>A?<0PZ9As?B{;AD}A1cWok0AIsP)JT#9><#d1iA;V;q$%78ejG=xMiom4G=t~3 z$aP)jLf?QxK}lNe{r;br=%RQ^lO(jDQY0gIZqBol3Wdxo*s{jzb^)H4J9iWQy)!Q4 z|6Ulj_$d}OUAIpX;yrdX6&bu^NSc?IBGEhvE(mJ4MSGJbxIN&E4@1w5YBUsVNs(hY z&fr~}N5GjYt?v*$2d9v_e3=MP8is0R-Y;5QM5huw6V_6C#krh1#;~+$Sc_YdcJ}@s z<*T*$bOd4m%!l0MeUUCbg;Z+FbE@10+F=AKGy9IX;B@}d*RbmKT;`^56?H5}FV7Fy zMoqE2*Spo2b1x=V5@U=KV*Xv6bMR!uAc+6JsCZ2F?>$q4V(`d6me66QairhKrALbF z0WC`Eh9V5Ypfuk4&0sC^RDpsG|Hj~^Zq#FJ&&r2jW$_Do9zSc_=Xy|uoU6%qos;}} zm`Uozu9mV6R$z7T7nYd5A$u}zUY%v>#7wkvQ(AdF;&BLSgNz#qSBFw?B}t56{}wH5 z@A!^b%YpxV_E8=X^v?kR(&n;a}s zc5ex-wxI39NK+D{gG|Tm?;G+Fl>>x;C&rW$ep4GeNxhe0&pj3Jv*}I>Nev4N$xmOy z4D%moN88Ei-vrrPWbHD7)B63%L9pljj`BHIQKZrUDsDFxG3vbxHE=Qdn)bPfE`}cF z$p4{V`Seq!%O$SCF}*UxbKYcujN)Ai459$Sqv<@B6Vn$7A=89Q6eMex7DC7(rvYih ztI~Y0?Y-V*!??m5ERllvSHV3@m&Lt3Y&z_G+vy`^sgQJjbs+Ikw30kkzSxs*-y!O# zw1<&a;Twa(!i+oX+1uN52C9c~XVP5c>N_{J_8l#RG-V5~j!WCvbh!G^fY9mahVV0C zKAebC5((ZuzM!Ap7hpxCvFaVf`HYDW0yZ%#eE5}jnZD6JUY6G!^eUAPY=kj-Q)y}T zvg}GJx`OPqXJ3@p|Gs%-5r}P}Coe`pcoHfy`VF5aA+Got?VeF+5scG8=2_ck6gZJ5 zKZmtb?Cz|~X3kfgN<|izXTwqY!ul=Q^%73liqLfDj`B3;PFg18) z`4@jh4uiOZx2DrG1nVkMLWsb z=9QYwoaE%ww}>(N{oH^nP$&K|X?@KsemBXyU+wfMs*2C4@x7(K;T%ygeu

&nsxf2+et|3ni;UhE#mq2A`i!Aw+Ds-XV zm4cm-j`Nk^7D9-q2%6fC0HIIb%0hT~FG*W$H9478={9XUS~Rqy{1PQNdT|=BX9L>c z7vB&m5V`yUmUQ*k4!#6=iCHb70jAho~v zGw7G~31YhKCs9Ks%nnKWxHMc0SKkaJFe{Z=hE|RpjmEbeY!|@}NfNg1x9;5}(oC6( zxmd7t8__4nLQcGll!aqf5I&xrUaIAvu9(R>Kx3c(Sf-=z-h~jL7#$m*#>Pew@F!xgWk@CBo_;wm?E^y z4`CE&w!!1}{3SK_M@hBSR{46`Mb9ivtMD_Ay>qmo7)CK=Pm91i?jnP61ogW^QVa|S z3`u#z%4=^Mr(n-#JR}o)ERG(l7WC4L3jel ^%b?bAm?zS67O`@Q`WlOzG8tOJ-o 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 Date: Thu, 7 Mar 2024 13:23:04 +0000 Subject: [PATCH 23/43] Update UI snapshots for `webkit` (2) --- ...to-right-breakdown-edit--light--webkit.png | Bin 88098 -> 81023 bytes ...nsights--lifecycle-edit--light--webkit.png | Bin 70008 -> 60778 bytes ...--trends-world-map-edit--light--webkit.png | Bin 83171 -> 77593 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-left-to-right-breakdown-edit--light--webkit.png b/frontend/__snapshots__/scenes-app-insights--funnel-left-to-right-breakdown-edit--light--webkit.png index 673d7fccf21c68890a355511af8c7329b617d8f0..e58bf370c4f3ee63e3e916b11677a652c513f2bd 100644 GIT binary patch delta 23443 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 delta 30431 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 nq{b5KZfn;a9t(knD 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

&nsxf2+et|3ni;UhE#mq2A`i!Aw+Ds-XV zm4cm-j`Nk^7D9-q2%6fC0HIIb%0hT~FG*W$H9478={9XUS~Rqy{1PQNdT|=BX9L>c z7vB&m5V`yUmUQ*k4!#6=iCHb70jAho~v zGw7G~31YhKCs9Ks%nnKWxHMc0SKkaJFe{Z=hE|RpjmEbeY!|@}NfNg1x9;5}(oC6( zxmd7t8__4nLQcGll!aqf5I&xrUaIAvu9(R>Kx3c(Sf-=z-h~jL7#$m*#>Pew@F!xgWk@CBo_;wm?E^y z4`CE&w!!1}{3SK_M@hBSR{46`Mb9ivtMD_Ay>qmo7)CK=Pm91i?jnP61ogW^QVa|S z3`u#z%4=^Mr(n-#JR}o)ERG(l7WC4L3jel ^%b?bAm?zS67O`@Q`WlOzG8tOJ-o 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%0D^^$mgSOy~|MN4%lAcdFdoVE63%quB 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 Date: Thu, 7 Mar 2024 13:31:52 +0000 Subject: [PATCH 24/43] Update UI snapshots for `webkit` (2) --- ...sights--stickiness-edit--light--webkit.png | Bin 55424 -> 66104 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--stickiness-edit--light--webkit.png b/frontend/__snapshots__/scenes-app-insights--stickiness-edit--light--webkit.png index dac183c55c7130139ca8cfab4720f15389604c4d..4a4344df4c09e00ec50ba495a68ab8607721dbcd 100644 GIT binary patch delta 29373 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 Date: Thu, 7 Mar 2024 13:40:27 +0000 Subject: [PATCH 25/43] Update UI snapshots for `webkit` (2) --- ...sights--stickiness-edit--light--webkit.png | Bin 66104 -> 55424 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--stickiness-edit--light--webkit.png b/frontend/__snapshots__/scenes-app-insights--stickiness-edit--light--webkit.png index 4a4344df4c09e00ec50ba495a68ab8607721dbcd..dac183c55c7130139ca8cfab4720f15389604c4d 100644 GIT binary patch delta 18609 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 Date: Thu, 7 Mar 2024 13:52:46 +0000 Subject: [PATCH 26/43] Update UI snapshots for `chromium` (2) --- ...rror-empty-states--long-loading--light.png | Bin 123261 -> 81696 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights-error-empty-states--long-loading--light.png b/frontend/__snapshots__/scenes-app-insights-error-empty-states--long-loading--light.png index 208c245f982735d5d628890903b8de4696aa8b94..85e97d00c266202f6c09a8b996343cfc87c6fe49 100644 GIT binary patch delta 30934 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%0D^aQMXIY?5+tT4+#S@?f&Bx>k~TP~C;~g$UsPS~ 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 From 8f091b6e414b9611f51513a928e40288e0665468 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 14:03:53 +0000 Subject: [PATCH 27/43] Update UI snapshots for `chromium` (2) --- ...rror-empty-states--long-loading--light.png | Bin 81696 -> 123261 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights-error-empty-states--long-loading--light.png b/frontend/__snapshots__/scenes-app-insights-error-empty-states--long-loading--light.png index 85e97d00c266202f6c09a8b996343cfc87c6fe49..208c245f982735d5d628890903b8de4696aa8b94 100644 GIT binary patch delta 72826 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 delta 30934 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%0D^aQMXIY?5+tT4+#S@?f&Bx>k~TP~C;~g$UsPS~ z3s+ZliYPCH0{2*&QUE#|LM`_-hQzv0wlD~x%DDVi7DWoq+joE~uU@^{VtPY&TXOYV zLw^cQjj@rN!_}X5#pK#ODQ2|sw>YqZeSEfTZSB?XJ$?=brQpf*!y>xIhjZs!)=-V@ z7zsbgeHrFH^f=ZDMp9YFzK&L%Yvqr~pLtkPT~o9CU06y=85H_M(*#1*qNqg0a^KH} z`$dHUp|8{}`wtcxZTElps`}tTSNI}Z-p=DHJ}=J}Y@-$^5K#^?-xJS;$en9loMv9A z2H5d=vwPE@t}A15@iBiE11o|@R<-_-BYsiI$yrShtATjNyzI>=@r9Kg4|3f1d=9^1 ziQj`-PyWhx;C)eXEk&_Defl&dH}aWO3!2sx6etBfSE|63p|q&_6b0cU`@o7{xCs`X zpoMKln}tQS|Ln)Hvtvt}Eipw zw~B0TdfRQSHkGYBYoD7f>6}kSfgoA*di8a{^iz%_%}q`BfnEjuvtUK4)0fcvXM9y{ zKJ;m-4FDOB`Tlt_Q3S~9hofV4W`6zTUmteEGxZSuw}~1-6=YE{vZj}i$^;dJr%E0- z+Ut1a<5P84R+gU8%fUSQ<%39ta8?ad)Az%iN?p5$XoA=MN(lqhw-e2Ck=dG!*o~;8 zNxEV76jYB|T6!L><$bPI`)>Yh6n9C}{g01JkjNqjg_}|HPo6yC7K+WSocX}S#2g(Xtg6VWcb$`y zGmKe81++NVHfswkNd+w}3d(T;a;k;icR|VY%osD`hTe)h0ckfqOb%iP)f1?zxPh_i zTB*jw+*}%v>pGI8veWM?^!4>++-Eb$8#hUw!8x%Dg-whurk1XK1QFSuX}l-%_$u*A z&TsX}lznh8eqj|=Ra3L*)31Az;@4WdVt3_(&A6qIprC$)`J=SxI`8h6+GAnS$;qtb zF~(xZ?(6z&i_fD0-PmW_N{Wi^WWa410~(n(=#SG zxXD_1f0#^R=@rLbCL|=pNUna!Q%TYGP!5Aw5%#$Nn9AFUQ`>v(ZtB8Ap!yOil>e9%pt~<=s?|_(zgFGYe zkTI=ZKy!ThEX?yH%xGk|&!?)_SMtAsYqTiz-HR+|EyzAx0Ian%>rqf^PEM{k-o?04uCal3`Y$C8DbmapWX6XN56P>sdldEz zr~~#WG3sh|UM`vEsaKVbyMh>J_;HBlR34!1!A7@raL}^W%|R0utpFh9g_9N&>=wo9 z*mLJw7y#XE5HT_`qUBYjQsaq$3V@1+#R93%*Vk`JwBrE@6n`5M!a>2a-`*l6I&SHv z%*8XodnoA2M1r&7m#290de|E*jyTBk-N;C1LHzHfA(ajsl)&u@UL*@>+giGnCP$yG zf9nZeL?8Qh+t#*o!$7Uld|QRGKH$x_fWt4dt>6fxU$aqor|AM50}O%zP3J<6j)ZxC zkp5e$0wH=OspSK1ziO={hR*TTtEp))FbI)S@h3syGB-aDY`L`aRX`q5fW!M&6D^P# zF)=X*w)L-*BZ3E)6TqWK-3{{ru1_F64|>t^sN~yYTGY{J43iA5o{-ChvgFiiW;g1H zn%alj!bE{ncTfv3okdHI*#2ZJ@MO_5GpA={+_PhLVq>F#4`3-XTCB^Hm6Jmiw5)Ax zX#b5K7$qhGMC@!FyT67dP#6tRfSf#eQoqhOQyC#pDp2M);_KkOd`LOvrgFP-drLdi zPT`j2?!A-WoFLWwqZ`9GHXj~fIKl6kB}scjk)S%d=C|^f6mb|uI^u!f-M9s;d_6Jk zLuFo0spohNb6ix$NnxeHpggxU*I%=2-vzMqi{WKUx2deTIc)x5txZTrVv#mbQYjW3 zjg-ntU8%J;TL@t58S+VHj~_oSTRi6L8gFG~`KeKZ9eKCUU71rvAL|QuYYd`db*za? zoffmDGx^2no~^ZM3qhu1=lDCc z-QA;jiMK2%fr(nV&)~b6;cUYu`p|#TgZ>*isQ0DG0cmKr_B!HRW=Gt}@=leT2e9pW z4Fv%IR{TW)y~~u1$`5c(czF2RnEk$+!i1qiH-tPkl&xMbp9c!WgKrZCBnB4lit@iL zs*uP97npTd`SJpJqrDtu>{d;-ya0Or`V<4*`OT5@YXR$nb}}_Q2{CVC5cAgP( zKpBQOlApgXE?#!n<~2@~`jL-5dZEC4pB4EK0od72U z9xZ|R?jr?9eQJjdjTp`_T?g6rZ(7mx9x$L+piuc46N=crzL}mzMG7-x`tUvAIT+X& zIYF%3NIpZX0$i@RTeZHK+2z$0LQHAtnrl+I z{F5$(@h9|w+!z}wJ;#6(T6BD1!Gw}HjY!@~#=F4OPY z=qQh>C+FqQ^N2~*gi@Zwcg@hrsaTpca~7+K`v%dQ^#DtftC!a@E~~Uu1K4BcCYoK7 zWFTWP)$5#xpR>=lMDuNtd?P$Ape7d=b8lJMezgzq@=`Ub?Au>q^*53*U6+C7p@h%8 zZNTE}8<2@|v#R9*i!`^=#8!88Cz9RE%Zt}!w-R7;ZIJvnmadgG^*O`pq@X$`k)=_i z@cD%W$t?U;cejK~tyt;u3gJ+_lfQ>)*hycXnVry#_4uqCD=-CI5C;1C?gbO?J}dvE zY%lBWzPfYVhwuXHV6 zB6+*L7~dDdzas)%8sTFsVWF`ou$pT6y1cbx`AsyPmKT>9DcugF(QdSKuR;>kQ8PX;V4vM+9)eZ5z|YUkJr)R}+Zw(b*uixcZx2T1en4VH(%$qkevyRmyFz;Vkh z=9A@4_88q->!si(ELI4NvPleZh5~1e7GOE`;|+jF0W1k?(edI#;*L(sT8LktIDm(v zwGk^97k3G` zLAaGl%3F49f8QM2?$2r3c>2duB5!~}m^>GTpTUrcGTp!(igKXBFK5ihE#^Rgnxw9L zzm$r?Rp1z{+7+}dEHX#^-3oziJrBLxfAS1)+EAnwE-tQz6iVCPumGxX!smYeOzsy3 zjM;B52Xv&uKFx`{X3UH)}y|;JpOmPg+{m95{2uz{p^?yJMHX0*rg< zpbQ337lI=X9y(;f$D=`rvyCe%whxVnzydY8z-@Uzg9~WTU@VZIOuK*=-_^qntAqdk z@GsyOPLGiO3l7}Th|_XZf-6*D#{u`&_%NPO#BRR;JAQ+MjwpH=k#GcEWQx8-``{k z6FACT?xmVasT~TZ+ovK)!I-@u5S%K^mmV?e=mi^6Z6fwJer zL;|jqZe<7v9HcPPW&!}`rVWLc{!6JqsT3qS97=Q_mkd{-ogP0spDMEz$++GM?Qm9A zSKE5d*@LJ&hsTptffr$fX;;}9Q}L+@@DV}?(z;pa&j~>lP{#RgO=9{?>UK01Nx!a0 zK_qZo08iEQ>UB%NCIZY5s4mqsG$LPzoT3}t?MnSiNJNB3$fIIsM;`r@QgnCy9OFM) zJ2f@M4c5Ruds+k-Gr(HR%`PqBDuCljT^&i7h!j&$PU1z~@eGa508%u?Dz_z1TM77A zR3Xik$QWTANM^U$#AbOE;k&iBRnlLCPy{^uJb%D1DZ7N1FaO|0xWA%EDT~*>ON>?h zb>#{HnB(*Jb~^EIG=IqbZ6?Ui%Ia6~qAsc%8}`NrxZuDau5MsZbBcvq-3U>~8X#(L zmSY|7p9)fZ3Sy(Gqu+SwkMz325#T@8P`9M$Jhsa-51l`#v9L^o(oGelK7|J_W7+@v z;|9xzeYZDrYHRP_kBFJEUDjgZ=AI+kF5eaqV5A&S@ZBSa#S8P^0sBzgfAct{aIvrE z9Jc*!wd%0DaejSdc{dIXZI8&5CJ$9Rm}7*G0o#td<78fTnJZSqGoQTYw2U54ukP51 zfUM-xrMVyETsj7Sa5u=9y<6h^(D@-jztUH5m)DW)ju(gE!Yg0l!n+P*UrxPR{BliY z_^i2xedzJVOWk+gh0mn@(RcOXf%3R5@{{vd-aKT!$(=%+pTwnCO+ty&3h!DG?o0b6 zwb2s|+CYv-IC0b~!gHyuXBV+enBytt5f#-%$dXzdOLKwx4Frgf1NK1YK#n-#!1;zr zaG2(r1}7@NQ?JzW8z8o8NUq2}tUUQB4IPvU-W!@dd{-cE&+)=vp7^^(iD;M25SqBg(TD>YAs51qhez6 ze*L-u@A-Q2g1En^fo$+e?DJ#eiE#(3FuEE1lH2Tl3=i%s5zvr45R{OGF1qb;vq<*XE^zHXqW3yG)xwx8kknv6BZ zRrg8P@&fJr{NA_hal=Zh8>{M=mp6_a-bCe}+&`iEetVq3wEoz^gJgz3zoY-!*L~ux z+&zBRYLxm%obJeN>gIV*11|pkW8e_GOz{H-hG;O+MJkz10`Z}%rJLM>1;zOqvjSZE zev{#&V%Z%nj=l4gy$hAHeoOACG)5!*_b^j3N%)KL9LCB1mnFl)A zJ^AYq;crG9b=1sWP2vH4ak%K`L^41@(1=A;F(W3Q5UcURoA9Qa9qUh-1Kt) zt)5ep-sv6o+nzQ{Oo=ONlvnSn6Czyaf_Gv*+#`-k5G$s82Rf1@vUN-lM#zaN%br7Y zzphVQr-wap%mZ{sV`F2>V05O4F{B9jZFRm5U&1eKKruT@bn3E~^XiUdH?cyR%Z2_X z_|2(?#g0QdV&l`4mH&Pl0O_h~j9Fl#(6ghNmDf||2@y>1m!(K40Ip)Dqc+mg($>jM z=m#qO%gkTJgN-FrxO3oEwnk6y7N;-ikJ z`7j*5Ps(kHGG7V`7Yo2~8pwt~!zLc?vs868>_xQIVvG7-&Vg{9hu9l~znW8aG|iio z9u5cI3uCzjyzV2*fE2tEMgo(0o1A_WSeIk&7nF0L>|Vcqz5bn;()G(MUFgPTITLbA z132qqhb1nM619u`Rn2=ixj4kpBUJ^4Tgm76{2xA}IoVtPoL)Hz64$`&5}e#;)qO(n z!9Hu}#5RPog=8Z7Cnzue-b%uC;^m{XaRLfM9w}K&n>NnaM~@rJLXF+7jd)&8ljHO*YyE~m#Y1tv!#UH?R=)iWzgfjj$@*=Ls_Xfn&nsLUu>9>yx}u3O`|*gu(%8;2lv;08*kFAjC2VBW7y<8e@SieuNuNyX@Q@4jax4j~PEwy?XM zNv$3iQH~?oE$veHEa|ni)%8tt8BIWS)wucm+>)7#vkDlRsf^@QnQLU+%_uaem|e_t zYVPeVRrV>@()mVNwe^b{1_t?{h?E}!rVfDnGWY{ljstDNxGPQWI0*809ERVeLQw50 zO5W*3-Fi00`fJ-PIDCHl%l!JkotmGu(Vz z22YAj&++J#aw`iUbAlq$D2z=;#decd*>mGGVw{?P4fl5xDPcCPwr%1l_V!>aF%*vm02=%tPr9 z^;tPC`HXnr>>b*4iwW~GHadI|d8if14nZJDtP22?9~aKD)xn3Jj@TA^hl!Y-kIL7qgR3PfKE#lareh!E8la z;(dal0MvwDW(NB_8w6oX_EaHXI3?vTd10_gUhVzMF+1AFjvXV7voXuex5o=<$oQ;c zgtj{*fGcFio7ZPG3LY=+@p^bz+$*MP?uA;Ib;>ESJFoy_WyBS7bJHafAApZC1P{S{ zc|wYd*>lUv`brkT$!m}<+bzkRst|NNy_*XhuaF{?athf^86h(mT6N}{WVYV=Gk3&h zpf6vhJ$B5+f42jYOlvgRMS^XOEjEz>htFbT+bl~#NfG6TcDS-Kh%{JL4afk?o(B$U z#9qpX%gD&UdsHFPS*i8R;7KFkr~z1;+dJ@cB{4KP2s3KvfH#P zpmjq4=nu(0xyd2?Rc$9SBULuIBDeEf&NmLmU28=? z@XZk&LcR%E9-z(Y?V_sHwNfszt9qc-Ztz-8iYtXYzhmT&jakNS)m)q0_9c{vWE7Bg zIfw>M-hM5XC=v1gfQD)2A&(%ilCf@`#z{1Y(VcBVd2xBbFPiwNvV%XM=E&?at4?WP z0657Ml?DP9r3hmg*~>z7eArCo7e@yW%0&e2zdt<5)?e`y)^!$qPhsA@!v@|Hcpzm@ zK1&GF)6vu}^KPqI=ED)$>cqEf@7D zT2`in*=jE(ea7r1crJX;O_3tFk;!b3oqL;A%A(D>n4OMxy3l#`qnXx#zxk+NC=jQV zS6qw>XQ_!2;HuIRGi1IvcAb7tJh+!O(8c8th}sN{UXTaFJAf}PHr#g_o<4Ex&{-zL zQZMJPEQi}pzrfkC_7%n@fL6x8vjPF=84Vqn=LZsA4$%Yljyl_W#JvDsA^JUG%YxY8 z;NaIGArhJ}dqqd`U!>WISCQffQYfEsZ3bAZ@E-69veG4GmY_9 zI0uEufrDedPLtb|kefF*XIruxoEU;5Kh^_v~(cKZ{#k=Vt35%K(l@# z+fBu;;YCpB8m}hV5?Qf(ySQ_1$B!TH zeW5C1`~8C%xY;+jn6NNV3gT)S%{kkZF@BFqWy8s`gYRQwV_z7F9OUQVs2)I|dMTfe za52wPP*lKj=0t$wx|F3|w)Ku#uTZ#9cO`jaS>h6~K?1ddhs*Ut& zKDw`rT?N)`>z)ZX)6KED8ltN7R@B!Bw(R56{4;HFrM_b{5zUWQ>f|Bzg^?rI5O!C^fCXX3N|kJQmLoJ0d?15;R?&py z#XwIFn0M$>NMjo1KJz1{a4>(>#@;JL5*f(|$XHuoFPslzgdlw0(@_wt^V#-@k-ifK z`0jp(xUeaHr-)thwjG$`+_aC#v6M)Ur8B&Io)h2Hc#TL!FHSP&&Gu%`b)`1wSFaoS zRQhql$FXKKCthO5_+=(GB?ESJ3k`_5;OwiQ#j3j$d7XbfGZ>xI ztieGsS*ZE=1Wk1sunUF8gW6RcWZD|2D4n-TYIV_RwvMO`4qT|t_ZQ)+%jd7cZDw=D zJytbqNKUGJ2M+A|P7LAu)*x>+no}41-mM=4M=ip2UIGg+>(&M;;|23VXEG_M@53V; zfEaL)bD2b)--C_RpH~~d?NcWFo2DJX54fQMro`Mf9;bH}qc?~N;n2#)O8*-F^(qSq zx9QRJDz{}DPsq(DlvzZZ`Bp#v<6?!rd&5&s=kNrpFJ4aq0|Vtl7)4vN+SpDJ0o`HG2i=g+^N#%8dYUpQQ5P73=WxX-=cGP7WGe_z1=}2%QS5I~67cI;69W?y zx2mdYW(2&~V9(zuU^jsG@mkeX0Ba%D(-COrIP^z7C49^9n}B2Kl+rKf2RIH={2Y4j zolT4bU%)wi<%O8`t{_v`>#$e-qjlRu?n)YIX@4;z!k5@GK}Z#o_Ve?jeAfh!!} zIq@MyqOIJjP*+hPW|LP`J5f;eVg+k&jG;cM{T-7wo)obhV6e9`;v_PN1|_fdG;X*v zy`0KTIk!9Tz|KuD&U`N!7x!GK1oM(cx=%R+1ze}$#Ga(Ws?35RUnLDk!^y9XPPG#o zH2KY2?_bVV%g>0)(`L9doCY(KA<xChC}&EYH#VW|DmK z&3}FwU8rDy0S64j=?kfekVdve=|CBH2B4k{57BVUe1Z%z03t{nwE~&r9IyU+Fwqpg zj`Hz_|JB)7Kt;8;{SF2m1NGQ|h)RQk(j{Vn#DKKKh$syMQbUQGBj*@MNQrdU3`2*s ziU^8y58XI4f;4>32HtmlvF=^py{@B&oZ0b@=lRu!&M7c3us!i{sDI=;)S>3ss|^@W zQ{n2AgwWHaE0r63Py1;=1cd^5!qz>pW@<^_4F$#48McoE<^XOSJ(5r=1H`w|CjxM13;s>$Y4m(YPK@HhZg`@|C0-#<5;7r7)QQ%kyc;~v=9{Pnp!PA_6B zed6OkKIg=^t|MIeTjWX0Y>NzJ0* z5A5%!Q!jY5=lu51Tc2Q{XaV5OU8WvGrRqGOnc4$K78yA;_iHgAikW3IEoLWY%0cQT;4s3^UKj*b;`&}{h9x6LvA;#s(zc9i76?z9R zisGOD`Bi_A1sHoXA18r4jZ=<6_-Qf>Nk`)yZUJLeZ?^X%1W=edwwmm~-)Rxr5GDi- zlb(sgjR-n`;K)5YGCB|kFO5q8~4y)CdTL726fro{EWJa ziXU1{8kD~jAJlQ@P5OX*knZnSQ8FVHuf;xfTQkbsQ}ytQXaaWYdb=Cqebhj`TCTm) zfHe#cpB9zU=b7mS5>uGsm{NSx@6UBgw{>e;Hzm_9*z>>}LxKp8)kh3AOiJUz1-H&_ zV}%D!{mP+|&ap2J(RZ1-VcJM3r4S@=-4ngX7);JzFN=bUOV%}TxXa3QJ?n~idl{A( zBqoMPOjU9i{-GJgw{A0F`1THUS1U>waq+Ak|5Al0JTv zhNH_%>4iiFv*u*KLX)Ypm3hzBSAIq$RNK#e;qpEsRvZ`H8ed=kR>|zNsS*qzFPWrf z>ec`n(}18hXsvJ&FRDYHEyZy>YwZa*!d%-Ls*JRP9&jwJ$hf*`+?*x@M1tdO_{TQiZ3$NK8U#la!Fx;PyS*7lX(bXE?%KQwK#1^b{M9>#Qb3_az{o+)V3Xl{l-FF zf=)i61iH-R;)Bk>Y$B$VoD~1~#zxhW)hXMOeA^&l>ki^tu_WCq#`D=7T|LZng|DiE zN#c_Irgtjt>|H>9mLB)sVnX`l+1Qquo(ZR?UJB07Pj9j<>=qYHH64G42XS-j=R3bn z9$i}I@!Y!?=!p4wd+5@*uUxqY7!#WuNC$idfw#(qS`YdPi_X?bJk@om>Q8a!xp)Yh zU^6ndvTB|Zs`O=Q3$xx(gYlaCuwRmmoy{C+A-15#7E~Ib^@e#RmX(YD;!X4eFtUVo z_k>^8&4-H96kv-JXHUdykTiLwZ$`4BjHyn^3QNV|R}Ii?80L58x>eT7jFv65c5+wo z0mwaS+L}r)?#wLaxUK)v~ap9jDpUR-f}Do&f>`mTNyByHZ2J<@y93Bh1u1cJYd1Y;ci^)&^n!?8~R_1@Q z$Wc2Nsocdy1S76%*KopN8t{=2g+mU&BAp`R68UO*A;ORM!VCB-X9NioXS|stWKgG` zR5*E3fuF}`-FWfb1MzSenb4MN1RVq7T`R;8E)hjpI2f{Lj~>&0Z8bZG8-dTC z-;_0&4o$AQ3w^ejlrNKr3|x-njOcq%Ny{sqO&%NDP^#HU7AR4xJm4ND%griyd%O)H z4p(bZN&2fh9y@{2=EscZ_7T7=&!*zhx#KqLKr%oOyqWR~ELSlvU<1G}xt%xLz- zWzOzLvE1lDL#Askib-|hD#j!1V1m(f>=r7@R^86)lICmZ*Km)Ey(k1dDFn=EARzdH zps;tW-F9`|P~vGpMGHjO&6_t*5W4RcfYmrTFHaMCK|JqSJ-2Tn9F}3#Zie`lji|Wd@HkGv^b}0NBJd4|Y&CdGe`}!VW zJax#7gbs%Vs;@d>HWscb3Yp+LvLMl_6k2a^A%se*SQpQ}dsn)iMtg)lKKAoPeEZuN z_$Bd?{ei3i%0i{9=;!w*ge+UyAg;Rci9XdY52m2mX5DpBY?`&Qbn2U9aEnS&|@T&pMXen4$gd0Hr?P_dj7 zjlXaUx>tuBegP3Vf0&m*O2kTSn0jkoLX>6VZp_Zk7LHrVY{uAi)G`NLcFmp$_C(?f zsk+RTzXLy&rF(rlZs>K!sYrFZKT>+gd6{RdPa&-_vhKHeXWk^WGe4bZLDbOJ2B5(D zvYu$2iWeHv)tFGNj&p-BpnsPb-pnNElylo<9U;rEBiU(b!&9$RR!>n?7YOaRe%g>5xg|JT2U#nP?Mz&;a(k5ch2He#mYdk!P zraMEG=xIbB4Lza9%0x)H$$%`&^VL|=4==1v*)tE&HL=K{A4~{`8P|r#`~uVr-0-2I zX3wE0nD9DLmS{=MYxqU%j>W3H_hHsp5Ho-^Mp=+NEad+WVL z6EK`|9~&8ub^EdmpuQD;epL@zI{$BmwrA0FH;dL(&D;)37rL0+)77jq>Wi#N=%b{B z!%W`|Ai1{rgZr>?`&G;>=NOamb;j9d3)B`OnH&V3)2Y%`D|+v*GLw3nmuz{+Zc<2L zW{HqRD-=8fi6-%1zTBoe*X7jL0LYs9{rm0I@cL{~GR7$mnkI;jG21NN4GWVzma&_3 z0BL)#$PNJo9hsl`>e-srb2sj1n+%HW8aEI3|2)-Q1o{i`9GtKC@+BFn3P6qCf*^zT z(3w8bT8Mf8Ql}=*4v!!}6hUTz!`hM!Sas>>8`mtFE~BStHLSU5YWm%K^9owR)Qh*B zEJtBe}o87KG?*;A&L~*Uggr7qF9{HF^ZOW<%a?NniZJ!By=GJR z4@X`aFD$EmpiS`<(1Bz)Wq(1Jc~c-|;D$ed^!4JOqM$WnV;3$vu(+@aOyI(&eatyd zk1bMaT1N;x0qj`wrdjkpQASsgPG(7`j1FWPq{)yptMvG*mkL@2aj~)@w>$IjY6L=_ zjPJSb#NR;QbI1Xk+*n{Y3MfS9)UIfO$Qx-|YHHBH>McxzZ{HqV+l2gKMM;hVrKD3B z8hib(OX?vqy=<-y2@}*Aof{&vzkaD{Yli>`0SmJ!;JM~QRemB&CfOb8+S)&tfPVpv zVn4c4C45J|%L9T80VN>993FP4F4Z;9&MoMc?=5xfw3md#cdvy_h%>t*6^c!XYhxCgK(T-or z;!=#q8x0v8k|wmc4RM>E>K${~SaM@yBM>*|01q+S+*tRI@9TS*kd##2)YN1HXBH&2 zJaoKrbZBTuM&xW*O{;0yH^V}+v^R{o&BhjXML}L(Ub<6Jk|Bs0I=tLFQ((kE&xE3y zXigmLz+k1652L`Et_8I;AhxK;3DgA<*IYFLsrG632jA~y^40>bzzHa6!o$x(=9fxB zLIM%mHg}rcIe^}ts`GvGrU{H9xz4|gu^?$B6yYEk6I4@LdU}ua9#O3k!9i3;6!+n+o)C(56H; zH`gT{o&h6FeM}VJm7&p5M>SmtmOR&rp6JbSAptWhDW?mJo_Pu z$aLff5`veS)^t*`Wdh^`w%|IccSMq*M6N6`&9Z`?Nx*jKF1RYkKmT)(n~Td22$o~V zjtQF9N6S<~b<>rzqG89g#LmGn4%c7YX5jCE!9ga4p5A11%yp9WRd?ptI?EzNZEnIuWsr1wlI_6^^D-CNdZre$=3OqGni|k7m}Bk zr*$OTd@oSoEMV8=07cV-DnWalqBdZ_=?Zn}&7sY&}6UXm)2s0;RKK&~wlB~>JQenJNXzG9 z6VryKzAZsvIHG}V`z_ts?d55%u&|&3Ch`i(4wecE%BT_(z~DxD+>SlW^m)^18Zn@U zZR?O>^R>TipaUUTE`p8FoMMW0C8M>&+}zw*9V@h(yU1P`W0op_LAhiONwURCO2cMzvMFi0yamR!^#NZ^Mh` zVoZTb4k?fWL39JGc2*SRy8YNuBW9^sFE2&6{)0!pn_6xjIWJ(B4f2+xoaP1;Pl7|q zF>5-tzL3s0Uevn|I_NcVCn2qZtoB@hdSFlM`u(h7A+UX^dOLPK$5-v3J6sqoqdN&x zCDv)sPq9M!S^%rr+|X;-VHmC(glm>;{)I-{Ai%ri7N!4RV4bf0T0=T9F&EO5XmGc0 zuGQ>yfHlt{Fz^&-vT`!12`)QU6zXG=+7q#)lNb^_C}589^mXY!|6D)YS^fPx1Jmh~ zCsSx_cIQ}(^0KkB3%X!GTn5SL_wT<@0%hPj3(oEi4`PmG{rH>_|kPJOF>AfI;+U zg}qJ*2*+MQWJA*X%vD9$-B8eBI9&X4K$zVASsN6Fg5?#3bLymuZu{pL+g)T^CwLm5f)jWdXQQz3;?A7_Yqb|#z|&=!?$o34l_#)w7&yl76giH931lg zJub*N9!M8zWPu$N*M}k`gW`@zE#32nFg{Yn5jPe86ZC(^pdWx9+#doce8y`;HdEfd zE!D|*5_v4(7(A%J9GXw^?4sf7;XCu=Nv=}`y1~4-MxONI#3qwkQ(*T_FrQAsh6#^@ zI)+?2vUN7(28zYDWe1U7>;o+^I5AL4OSMU+`q3({%P{wdCC zyh#cj^RW$o5!<*_da9PEGpy`+izMV`agY_ytA z?(kgEu21A?o(#TFT-JFCP(#hHDVQe0&b1()1Y%sBo>9cCKXw^E)r3H{KDa*^BnVz} z@F)&9QQc0*iRSV2k`&p}bvj^UEvo82>ExQ{!XyObmK;0q2pcuKOiF{{1Ri60?n|8N zik4o-j_(5&9eLvxCFZK>KVPlCp&vIXb8C<$=*A7Vv-(9v`j@}pc-}tXx!Ky%lD877 z`#ry;ttryt7E))B-2qY<6r)IQKK}alMZfldICwr&gJ~diT?_aR+L|P^xFJl{!T0V? z7&Sb+Qf0{RVA_AbE46$t%BsRH1FcV;e^_TtO+uoNdEsLb5s>I6PhNK(z2ah2*0%UP0L*8<;*);E0h zqHhx9WYY$*Y!g5!=-M^-)w>1fSOemCC{(XDGN(&)tWOY% zV3h}E&x)eNdhGS>N6J1>dv4cgurl)t{^007*Xf_70GBxJYb6|nfMnitn!9!6CB{Gc8M zMmqidd((<9w@GQ<%lR5`IwLM!HB+EjeDaj{(xt+bs8+qs&5h|ghRY1kr+!k(D{{*e z(Ytkb0^eYqjVgt3`xi~%bJk<&U(=kTrfS6ncRd-cy##!iDaZtC&e`EVd5286OS9#pOn1QHp2ofLI*l;E9Qmm@YhO6E>RYZPmB5S&lKQV5-nM6-;X*~ey8nHoW zF@46hAC#G|+kE7z8~OB!si>_;wMd`l@c#WO-=j}3Nw_G2cyi+YF)J%rwlkXEATN)Y zjDt!DHf6N5Ny?+MH~Gz*Rd^g7rmt~qguMu^e^q+x4r+OgeIWQ^CaBP#M>>yaqse6v z;@W0rDQQakOYUhg(cD*48*Kg!M>hqcB60gt0U3-f98X$J1tl_E`W{d;OQXqPFIIu^1r; zma4YLS~RqU&(jJIWU#_5{$`vlR)WJ|3Xg-P7s#G|LU`tZj1Sj$W9naJPc^0P`tgT! zbX%eDYjdq7@55WSAPw30%hIP`+o5f+a#G=JE~rb+IaVIZ|o-`l-% zeu=?c>(1SGz~l#q{WTMBO!13V0Zg-(JrPAQ6Do=Q_H9|oiV7oL<9OtrAkc%T9`?pDb?Cd{i5_|2Rg^zvme>WUe`>?x#q zqwmiBosU?!;<>iI3y_NjGrL_|rEop2V^SENyD>J9pxR-%kcHe|!$qhDOVb=3W54u_ zhL}%zIFMktL zy>%ebSf`i&Hq3-e?W(s5qRQimJh|U=@WJF(UOE0kM#DM5s;){-JLb4U>?Vs4E4sza z_Q?QYP8pA<>XFPnQ?oj)daO$x1uuBwa*c%PZCQPf21v3f^1qJ=+G$7J8O0JX_mPIQ z?}H9m`L@_yMOb2Ona-v8*Ny>VZ$@Z_4}6&y?$HJ-Jt3v#&iN^eL%pEu!?w)xHd1=!yBQ zC@R0hdt*LarU>n-f56f5PHZy>>89|9P2^5WEP}wgab+Qjup%~A3iNL-zLPLX2}!6U zOxrl@WJ94r&rbmwaMW3yweo~}Y8#yiqmC*P-< zkYMDK{^pGW`s3ISCS+>y#faQSXZ&<80?Cuc#GH6_x92PHJVZGLar?V*kE!Eim&NX3 z@u!@+Q|G2a11U0ou?ML9{FxHbC|e|hp@`dLK7c@@9T_Iz_c>1* zo}$In&qhaw`KnBrN+YAmcfP*9Q&EoTE42H@!K$HYWtH}L^BuX<5CC-R4L49BpcGG# zs+a-GlziKJccL6g`1-jv>3i?0EE+`{ZD zi6=E6ftX1j9>aIn-`t$2Tf*GkG&{(VLzoorz!N|Lpa*O;F5=kMErd5|JL}GF?U5=} zQ${Ls+YI5gqOIMnDtFq8H4G%4IYU*!hs`%@O z$DhPThlznEt~GsAJxhT_=5Skk=3~8`S077&2V4gF`EhO8FQBbxT1C&PrZ<_AHFA3V z730w)I!58K`H-_EzgI|w_L+MAf==}hL%OZq{0$^6!@~xkl&dL17G{eE4@bTq-VOTxLFIF=i)luFxN)Y~Jt{v&wFL@_}8ed(1yQ-wU>6wHr7546krryNrWqGs{f;qUH(A>Tf#DspVffnFH4* zJM;B{-9-F5YEr*^`OD`qTAu(^c3Hm^lChXtvy6Cv0Z9feUd|kMLlbyN&DRS_6=i;L zGWXWDdpF+EpZ!0VC=(-V4T$;lAJTEbH;j=uDzDJ>16PEFH8V3a@#byU>N!1Rt1Iu^ zzHPd(wi=XqRjoRhtp23;A&NFs^&-8!Hi|n!J8wn-hnbHT7WPw7cOWMhS0+|0W^}A6 z$@i-dQyl1fz*R6swclQz1Z|uDSf5XcsxlNbTY6;>(fAVTq3GprYgV5K6=@3lsPQ8f z?)b-nYcIo$>>Dqhm)5$crx!gl!>N_Dy*!GaNA0W#aB4ZWlP-Jj)5T%j9(4-2XUIuq zTJ1>UFc=OCN1A*7U8@YkCp%^@Mr*}~b*&OOQQQ^%gB^RaP%F^L8Q>d6RBEoa!gm(X z1`LHge5Z?H+1&n-ddMef<^({B(fLzs9+-eR$E1l#*3}lBLfI{_&uGfxe31!mJebrEbjNt+js`wHi<4%dgfk3(oz@ zt6S3|B;z$j8zM=^zsxW^!cnk1yCcNIxQHkpQLbz=78&*3P?Oc9p{?hKf6!x#ULBv% zK-}x1%Fct55pXjlvtH-wrGH^m*{@zbi=aqN_wRh+zd1j*&+b1<$Ns+rX^Q{VPx`-n b)r`#}2OZURXK&_iU1hmDO1IN)K79TkT4} Date: Thu, 7 Mar 2024 16:20:26 +0100 Subject: [PATCH 28/43] fix groups --- .../funnels/test/test_funnel_correlation.py | 82 ++++++++++--------- .../test/test_funnel_correlations_persons.py | 4 +- .../insights/insight_actors_query_runner.py | 3 + 3 files changed, 49 insertions(+), 40 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py index b9bdbbbb17896..6d470ec19f359 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py @@ -84,7 +84,7 @@ def _get_actors_for_event(self, filters: Dict[str, Any], event_name: str, proper funnelCorrelationPersonConverted=success, funnelCorrelationPersonEntity=EventsNode(event=event_name, properties=properties), ) - return [str(row[1]["id"]) for row in serialized_actors] + return [str(row[0][0]) for row in serialized_actors] def _get_actors_for_property( self, filters: Dict[str, Any], property_values: list, success=True, funnelCorrelationNames=None @@ -446,16 +446,16 @@ def test_funnel_correlation_with_events_and_groups(self): ], ) - # self.assertEqual(len(self._get_actors_for_event(filter, "positively_related")), 5) - # self.assertEqual( - # len(self._get_actors_for_event(filter, "positively_related", success=False)), - # 0, - # ) - # self.assertEqual(len(self._get_actors_for_event(filter, "negatively_related")), 1) - # self.assertEqual( - # len(self._get_actors_for_event(filter, "negatively_related", success=False)), - # 1, - # ) + self.assertEqual(len(self._get_actors_for_event(filters, "positively_related")), 5) + self.assertEqual( + len(self._get_actors_for_event(filters, "positively_related", success=False)), + 0, + ) + self.assertEqual(len(self._get_actors_for_event(filters, "negatively_related")), 1) + self.assertEqual( + len(self._get_actors_for_event(filters, "negatively_related", success=False)), + 1, + ) # Now exclude all groups in positive excludes = { @@ -471,30 +471,30 @@ def test_funnel_correlation_with_events_and_groups(self): result, _ = self._get_events_for_filters({**filters, **excludes}) # TODO destructure - # odds_ratio = result[0].pop("odds_ratio") - # expected_odds_ratio = 1 - # # success total and failure totals remove other groups too + odds_ratio = result[0].pop("odds_ratio") + expected_odds_ratio = 1 + # success total and failure totals remove other groups too - # self.assertAlmostEqual(odds_ratio, expected_odds_ratio) + self.assertAlmostEqual(odds_ratio, expected_odds_ratio) - # self.assertEqual( - # result, - # [ - # { - # "event": "negatively_related", - # "success_count": 1, - # "failure_count": 1, - # # "odds_ratio": 1, - # "correlation_type": "failure", - # } - # ], - # ) + self.assertEqual( + result, + [ + { + "event": "negatively_related", + "success_count": 1, + "failure_count": 1, + # "odds_ratio": 1, + "correlation_type": "failure", + } + ], + ) - # self.assertEqual(len(self._get_actors_for_event(filter, "negatively_related")), 1) - # self.assertEqual( - # len(self._get_actors_for_event(filter, "negatively_related", success=False)), - # 1, - # ) + self.assertEqual(len(self._get_actors_for_event(filters, "negatively_related")), 1) + self.assertEqual( + len(self._get_actors_for_event(filters, "negatively_related", success=False)), + 1, + ) # :FIXME: This should also work with materialized columns # @also_test_with_materialized_columns(event_properties=[], person_properties=["$browser"]) @@ -827,20 +827,24 @@ def test_funnel_correlation_with_properties_and_groups(self): ], ) + self.assertEqual( + len( + self._get_actors_for_property( + filters, [("industry", "positive", "group", 0)], funnelCorrelationNames=["industry"] + ) + ), + 10, + ) # self.assertEqual( - # len(self._get_actors_for_property(filter, [("industry", "positive", "group", 0)])), - # 10, - # ) - # self.assertEqual( - # len(self._get_actors_for_property(filter, [("industry", "positive", "group", 0)], False)), + # len(self._get_actors_for_property(filters, [("industry", "positive", "group", 0)], False)), # 1, # ) # self.assertEqual( - # len(self._get_actors_for_property(filter, [("industry", "negative", "group", 0)])), + # len(self._get_actors_for_property(filters, [("industry", "negative", "group", 0)])), # 1, # ) # self.assertEqual( - # len(self._get_actors_for_property(filter, [("industry", "negative", "group", 0)], False)), + # len(self._get_actors_for_property(filters, [("industry", "negative", "group", 0)], False)), # 10, # ) diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py index de0c469107742..72a0b3a3bd4a2 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py @@ -63,9 +63,11 @@ def get_actors( funnelCorrelationPersonEntity=funnelCorrelationPersonEntity, funnelCorrelationPropertyValues=funnelCorrelationPropertyValues, ) + persons_select = ["id", "person", *(["matched_recordings"] if includeRecordings else [])] + groups_select = ["actor_id"] actors_query = ActorsQuery( source=correlation_actors_query, - select=["id", "person", *(["matched_recordings"] if includeRecordings else [])], + select=persons_select if funnels_query.aggregation_group_type_index is None else groups_select, ) response = ActorsQueryRunner(query=actors_query, team=team).calculate() return response.results diff --git a/posthog/hogql_queries/insights/insight_actors_query_runner.py b/posthog/hogql_queries/insights/insight_actors_query_runner.py index c56162d019c7a..bc79636610ec4 100644 --- a/posthog/hogql_queries/insights/insight_actors_query_runner.py +++ b/posthog/hogql_queries/insights/insight_actors_query_runner.py @@ -70,6 +70,9 @@ def group_type_index(self) -> int | None: if isinstance(self.source_runner, RetentionQueryRunner): return cast(RetentionQueryRunner, self.source_runner).group_type_index + if isinstance(self.source_runner, FunnelCorrelationQueryRunner): + return self.query.source.source.source.aggregation_group_type_index + if ( isinstance(self.source_runner, StickinessQueryRunner) and isinstance(self.query.source, StickinessQuery) ) or (isinstance(self.source_runner, TrendsQueryRunner) and isinstance(self.query.source, TrendsQuery)): From 47b999251c3cd7a7b62528a13af1021607117a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Thu, 7 Mar 2024 20:16:18 +0100 Subject: [PATCH 29/43] fix test_funnel_correlation_with_properties_and_groups --- .../funnels/test/test_funnel_correlation.py | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py index 6d470ec19f359..8ebd956ca6871 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py @@ -108,7 +108,7 @@ def _get_actors_for_property( funnelCorrelationPersonConverted=success, funnelCorrelationPropertyValues=funnelCorrelationPropertyValues, ) - return [str(row[1]["id"]) for row in serialized_actors] + return [str(row[0][0]) for row in serialized_actors] def test_basic_funnel_correlation_with_events(self): filters = { @@ -835,18 +835,18 @@ def test_funnel_correlation_with_properties_and_groups(self): ), 10, ) - # self.assertEqual( - # len(self._get_actors_for_property(filters, [("industry", "positive", "group", 0)], False)), - # 1, - # ) - # self.assertEqual( - # len(self._get_actors_for_property(filters, [("industry", "negative", "group", 0)])), - # 1, - # ) - # self.assertEqual( - # len(self._get_actors_for_property(filters, [("industry", "negative", "group", 0)], False)), - # 10, - # ) + self.assertEqual( + len(self._get_actors_for_property(filters, [("industry", "positive", "group", 0)], False)), + 1, + ) + self.assertEqual( + len(self._get_actors_for_property(filters, [("industry", "negative", "group", 0)])), + 1, + ) + self.assertEqual( + len(self._get_actors_for_property(filters, [("industry", "negative", "group", 0)], False)), + 10, + ) # test with `$all` as property # _run property correlation with filter on all properties From 6129f04337f3641137223be5fb817cf60803d860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Thu, 7 Mar 2024 20:27:56 +0100 Subject: [PATCH 30/43] test_funnel_correlation_with_properties_and_groups_person_on_events --- .../funnels/test/test_funnel_correlation.py | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py index 8ebd956ca6871..95ae1c4b2b841 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py @@ -1033,22 +1033,22 @@ def test_funnel_correlation_with_properties_and_groups_person_on_events(self): ], ) - # self.assertEqual( - # len(self._get_actors_for_property(filter, [("industry", "positive", "group", 0)])), - # 10, - # ) - # self.assertEqual( - # len(self._get_actors_for_property(filter, [("industry", "positive", "group", 0)], False)), - # 1, - # ) - # self.assertEqual( - # len(self._get_actors_for_property(filter, [("industry", "negative", "group", 0)])), - # 1, - # ) - # self.assertEqual( - # len(self._get_actors_for_property(filter, [("industry", "negative", "group", 0)], False)), - # 10, - # ) + self.assertEqual( + len(self._get_actors_for_property(filters, [("industry", "positive", "group", 0)])), + 10, + ) + self.assertEqual( + len(self._get_actors_for_property(filters, [("industry", "positive", "group", 0)], False)), + 1, + ) + self.assertEqual( + len(self._get_actors_for_property(filters, [("industry", "negative", "group", 0)])), + 1, + ) + self.assertEqual( + len(self._get_actors_for_property(filters, [("industry", "negative", "group", 0)], False)), + 10, + ) # test with `$all` as property # _run property correlation with filter on all properties From 909d964f76b18b9de83b825fd1d525346c61cdf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Thu, 7 Mar 2024 21:05:20 +0100 Subject: [PATCH 31/43] fixes --- .../test_funnel_correlation.ambr | 5376 +++++++++++++---- .../funnels/test/test_funnel_correlation.py | 2 +- 2 files changed, 4172 insertions(+), 1206 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index fa9e892779ce5..3e33ce3fcd658 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -148,16 +148,18 @@ allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_event_properties_and_groups ''' - SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, - countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, - countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + SELECT concat(ifNull(toString(event_name), ''), '::', ifNull(toString((prop).1), ''), '::', ifNull(toString((prop).2), '')) AS name, + countIf(actor_id, ifNull(equals(steps, 2), 0)) AS success_count, + countIf(actor_id, ifNull(notEquals(steps, 2), 1)) AS failure_count FROM (SELECT funnel_actors.actor_id AS actor_id, funnel_actors.steps AS steps, - arrayJoin(arrayZip(['$browser'], [JSONExtractString(persons.person_props, '$browser')])) AS prop - FROM + event.event AS event_name, + arrayJoin(JSONExtractKeysAndValues(event.properties, 'String')) AS prop + FROM events AS event + JOIN (SELECT aggregation_target AS actor_id, timestamp AS timestamp, steps AS steps, @@ -198,19 +200,12 @@ ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 FROM (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e__pdi.person_id AS aggregation_target, + e.`$group_1` AS aggregation_target, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -218,22 +213,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - JOIN - (SELECT persons.id AS id, - persons.properties AS person_props - FROM - (SELECT person.id AS id, - person.properties AS properties - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props - GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 - HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_1`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), in(event.event, ['positively_related', 'negatively_related']))) + GROUP BY name + HAVING and(ifNull(greater(plus(success_count, failure_count), 2), 0), ifNull(notIn((prop).1, []), 0)) LIMIT 100 UNION ALL SELECT 'Total_Values_In_Query' AS name, @@ -280,19 +263,12 @@ ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 FROM (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e__pdi.person_id AS aggregation_target, + e.`$group_1` AS aggregation_target, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -306,23 +282,19 @@ allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.1 +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_event_properties_and_groups_materialized ''' - SELECT persons.id, - persons.id AS id, - source.matching_events AS matching_events + SELECT concat(ifNull(toString(event_name), ''), '::', ifNull(toString((prop).1), ''), '::', ifNull(toString((prop).2), '')) AS name, + countIf(actor_id, ifNull(equals(steps, 2), 0)) AS success_count, + countIf(actor_id, ifNull(notEquals(steps, 2), 1)) AS failure_count FROM - (SELECT person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons - INNER JOIN (SELECT funnel_actors.actor_id AS actor_id, - any(funnel_actors.matching_events) AS matching_events - FROM + funnel_actors.steps AS steps, + event.event AS event_name, + arrayJoin(JSONExtractKeysAndValues(event.properties, 'String')) AS prop + FROM events AS event + JOIN (SELECT aggregation_target AS actor_id, - final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, @@ -332,9 +304,6 @@ steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - groupArray(10)(step_0_matching_event) AS step_0_matching_events, - groupArray(10)(step_1_matching_event) AS step_1_matching_events, - groupArray(10)(final_matching_event) AS final_matching_events, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp @@ -343,9 +312,6 @@ steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, - tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, - tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, - if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 @@ -354,266 +320,254 @@ timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, - uuid_0 AS uuid_0, - `$session_id_0` AS `$session_id_0`, - `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, - uuid_1 AS uuid_1, - `$session_id_1` AS `$session_id_1`, - `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, - tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, - tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, - if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, - uuid_0 AS uuid_0, - `$session_id_0` AS `$session_id_0`, - `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, - last_value(uuid_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, - last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, - last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 FROM (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e__pdi.person_id AS aggregation_target, - e.uuid AS uuid, + e.`$group_1` AS aggregation_target, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, - if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, - if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, - if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, - if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, - if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - WHERE ifNull(equals(funnel_actors.steps, 2), 0) - GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC - LIMIT 101 - OFFSET 0 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 - ''' -# --- -# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.2 - ''' - SELECT DISTINCT session_replay_events.session_id AS session_id - FROM - (SELECT session_replay_events.session_id AS session_id - FROM session_replay_events - WHERE equals(session_replay_events.team_id, 2) - GROUP BY session_replay_events.session_id) AS session_replay_events - WHERE ifNull(in(session_replay_events.session_id, ['']), 0) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 - ''' -# --- -# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.3 - ''' - SELECT persons.id, - persons.id AS id, - source.matching_events AS matching_events + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_1`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), in(event.event, ['positively_related', 'negatively_related']))) + GROUP BY name + HAVING and(ifNull(greater(plus(success_count, failure_count), 2), 0), ifNull(notIn((prop).1, []), 0)) + LIMIT 100 + UNION ALL + SELECT 'Total_Values_In_Query' AS name, + countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, + countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count FROM - (SELECT person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons - INNER JOIN - (SELECT funnel_actors.actor_id AS actor_id, - any(funnel_actors.matching_events) AS matching_events + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp FROM - (SELECT aggregation_target AS actor_id, - final_matching_events AS matching_events, - timestamp AS timestamp, + (SELECT aggregation_target AS aggregation_target, steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - groupArray(10)(step_0_matching_event) AS step_0_matching_events, - groupArray(10)(step_1_matching_event) AS step_1_matching_events, - groupArray(10)(final_matching_event) AS final_matching_events, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 FROM (SELECT aggregation_target AS aggregation_target, - steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, - tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, - if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, - uuid_0 AS uuid_0, - `$session_id_0` AS `$session_id_0`, - `$window_id_0` AS `$window_id_0`, step_1 AS step_1, - latest_1 AS latest_1, - uuid_1 AS uuid_1, - `$session_id_1` AS `$session_id_1`, - `$window_id_1` AS `$window_id_1`, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, - tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, - tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, - if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - uuid_0 AS uuid_0, - `$session_id_0` AS `$session_id_0`, - `$window_id_0` AS `$window_id_0`, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, - last_value(uuid_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, - last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, - last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e__pdi.person_id AS aggregation_target, - e.uuid AS uuid, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, - if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, - if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, - if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, - if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, - if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) - GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC - LIMIT 101 - OFFSET 0 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 - ''' -# --- -# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.4 - ''' - SELECT DISTINCT session_replay_events.session_id AS session_id - FROM - (SELECT session_replay_events.session_id AS session_id - FROM session_replay_events - WHERE equals(session_replay_events.team_id, 2) - GROUP BY session_replay_events.session_id) AS session_replay_events - WHERE ifNull(in(session_replay_events.session_id, ['']), 0) + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_1` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.5 +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups ''' - SELECT persons.id, - persons.id AS id, - source.matching_events AS matching_events - FROM - (SELECT person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons - INNER JOIN - (SELECT funnel_actors.actor_id AS actor_id, - any(funnel_actors.matching_events) AS matching_events + SELECT event.event AS name, + countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, + countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp FROM - (SELECT aggregation_target AS actor_id, - final_matching_events AS matching_events, - timestamp AS timestamp, + (SELECT aggregation_target AS aggregation_target, steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), notIn(event.event, [])) + GROUP BY name + LIMIT 100 + UNION ALL + SELECT 'Total_Values_In_Query' AS name, + countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, + countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups.1 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, groupArray(10)(step_0_matching_event) AS step_0_matching_events, @@ -670,7 +624,7 @@ ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` FROM (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e__pdi.person_id AS aggregation_target, + e.`$group_0` AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, @@ -683,70 +637,39 @@ if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - WHERE ifNull(equals(funnel_actors.steps, 2), 0) - GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.6 - ''' - SELECT DISTINCT session_replay_events.session_id AS session_id - FROM - (SELECT session_replay_events.session_id AS session_id - FROM session_replay_events - WHERE equals(session_replay_events.team_id, 2) - GROUP BY session_replay_events.session_id) AS session_replay_events - WHERE ifNull(in(session_replay_events.session_id, ['']), 0) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 - ''' -# --- -# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.7 +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups.2 ''' - SELECT persons.id, - persons.id AS id, - source.matching_events AS matching_events + SELECT source.actor_id AS actor_id FROM - (SELECT person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups INNER JOIN (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events - FROM + FROM events AS event + JOIN (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, @@ -812,7 +735,7 @@ ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` FROM (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e__pdi.person_id AS aggregation_target, + e.`$group_0` AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, @@ -825,68 +748,41 @@ if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) - GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.8 - ''' - SELECT DISTINCT session_replay_events.session_id AS session_id - FROM - (SELECT session_replay_events.session_id AS session_id - FROM session_replay_events - WHERE equals(session_replay_events.team_id, 2) - GROUP BY session_replay_events.session_id) AS session_replay_events - WHERE ifNull(in(session_replay_events.session_id, ['']), 0) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 - ''' -# --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_event_properties_and_groups +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups.3 ''' - SELECT concat(ifNull(toString(event_name), ''), '::', ifNull(toString((prop).1), ''), '::', ifNull(toString((prop).2), '')) AS name, - countIf(actor_id, ifNull(equals(steps, 2), 0)) AS success_count, - countIf(actor_id, ifNull(notEquals(steps, 2), 1)) AS failure_count + SELECT source.actor_id AS actor_id FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN (SELECT funnel_actors.actor_id AS actor_id, - funnel_actors.steps AS steps, - event.event AS event_name, - arrayJoin(JSONExtractKeysAndValues(event.properties, 'String')) AS prop + any(funnel_actors.matching_events) AS matching_events FROM events AS event JOIN (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, @@ -896,6 +792,9 @@ steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp @@ -904,6 +803,9 @@ steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 @@ -912,25 +814,50 @@ timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` FROM (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_1` AS aggregation_target, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) @@ -939,97 +866,46 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_1`) - WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), in(event.event, ['positively_related', 'negatively_related']))) - GROUP BY name - HAVING and(ifNull(greater(plus(success_count, failure_count), 2), 0), ifNull(notIn((prop).1, []), 0)) - LIMIT 100 - UNION ALL - SELECT 'Total_Values_In_Query' AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups.4 + ''' + SELECT source.actor_id AS actor_id FROM - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_1` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 - ''' -# --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_event_properties_and_groups_materialized - ''' - SELECT concat(ifNull(toString(event_name), ''), '::', ifNull(toString((prop).1), ''), '::', ifNull(toString((prop).2), '')) AS name, - countIf(actor_id, ifNull(equals(steps, 2), 0)) AS success_count, - countIf(actor_id, ifNull(notEquals(steps, 2), 1)) AS failure_count - FROM - (SELECT funnel_actors.actor_id AS actor_id, - funnel_actors.steps AS steps, - event.event AS event_name, - arrayJoin(JSONExtractKeysAndValues(event.properties, 'String')) AS prop - FROM events AS event - JOIN - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp @@ -1038,6 +914,9 @@ steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 @@ -1046,25 +925,50 @@ timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` FROM (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_1` AS aggregation_target, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) @@ -1073,76 +977,18 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_1`) - WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), in(event.event, ['positively_related', 'negatively_related']))) - GROUP BY name - HAVING and(ifNull(greater(plus(success_count, failure_count), 2), 0), ifNull(notIn((prop).1, []), 0)) - LIMIT 100 - UNION ALL - SELECT 'Total_Values_In_Query' AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count - FROM - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_1` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups.5 ''' SELECT event.event AS name, countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, @@ -1195,7 +1041,15 @@ if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'finance'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1257,7 +1111,15 @@ if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'finance'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1270,148 +1132,226 @@ allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups.1 +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups.6 ''' - SELECT event.event AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count - FROM events AS event - JOIN - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_0` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) - GROUP BY groups.group_type_index, - groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'finance'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) - WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), notIn(event.event, [])) - GROUP BY name - LIMIT 100 - UNION ALL - SELECT 'Total_Values_In_Query' AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups.7 + ''' + SELECT source.actor_id AS actor_id FROM - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_0` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) - GROUP BY groups.group_type_index, - groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'finance'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups_poe_v2 @@ -1544,149 +1484,2946 @@ # --- # name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups_poe_v2.1 ''' - SELECT event.event AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count - FROM events AS event - JOIN - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups_poe_v2.2 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups_poe_v2.3 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups_poe_v2.4 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups_poe_v2.5 + ''' + SELECT event.event AS name, + countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, + countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'finance'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), notIn(event.event, [])) + GROUP BY name + LIMIT 100 + UNION ALL + SELECT 'Total_Values_In_Query' AS name, + countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, + countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'finance'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups_poe_v2.6 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_events_and_groups_poe_v2.7 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM events AS event + JOIN + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) + GROUP BY actor_id + ORDER BY actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups + ''' + SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, + countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, + countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + FROM + (SELECT funnel_actors.actor_id AS actor_id, + funnel_actors.steps AS steps, + arrayJoin(arrayZip(['industry'], [JSONExtractString(groups_0.properties, 'industry')])) AS prop + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LEFT JOIN + (SELECT groups.key AS key, + groups.properties AS properties + FROM + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + WHERE ifNull(equals(groups.index, 0), 0)) AS groups_0 ON equals(funnel_actors.actor_id, groups_0.key)) AS aggregation_target_with_props + GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 + HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) + LIMIT 100 + UNION ALL + SELECT 'Total_Values_In_Query' AS name, + countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, + countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups.1 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups.2 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups.3 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups.4 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups.5 + ''' + SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, + countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, + countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + FROM + (SELECT funnel_actors.actor_id AS actor_id, + funnel_actors.steps AS steps, + arrayJoin(JSONExtractKeysAndValues(groups_0.properties, 'String')) AS prop + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LEFT JOIN + (SELECT groups.key AS key, + groups.properties AS properties + FROM + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + WHERE ifNull(equals(groups.index, 0), 0)) AS groups_0 ON equals(funnel_actors.actor_id, groups_0.key)) AS aggregation_target_with_props + GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 + HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) + LIMIT 100 + UNION ALL + SELECT 'Total_Values_In_Query' AS name, + countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, + countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_materialized + ''' + SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, + countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, + countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + FROM + (SELECT funnel_actors.actor_id AS actor_id, + funnel_actors.steps AS steps, + arrayJoin(arrayZip(['industry'], [JSONExtractString(groups_0.properties, 'industry')])) AS prop + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LEFT JOIN + (SELECT groups.key AS key, + groups.properties AS properties + FROM + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + WHERE ifNull(equals(groups.index, 0), 0)) AS groups_0 ON equals(funnel_actors.actor_id, groups_0.key)) AS aggregation_target_with_props + GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 + HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) + LIMIT 100 + UNION ALL + SELECT 'Total_Values_In_Query' AS name, + countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, + countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_materialized.1 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_materialized.2 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_materialized.3 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_materialized.4 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_materialized.5 + ''' + SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, + countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, + countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + FROM + (SELECT funnel_actors.actor_id AS actor_id, + funnel_actors.steps AS steps, + arrayJoin(JSONExtractKeysAndValues(groups_0.properties, 'String')) AS prop + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LEFT JOIN + (SELECT groups.key AS key, + groups.properties AS properties + FROM + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + WHERE ifNull(equals(groups.index, 0), 0)) AS groups_0 ON equals(funnel_actors.actor_id, groups_0.key)) AS aggregation_target_with_props + GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 + HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) + LIMIT 100 + UNION ALL + SELECT 'Total_Values_In_Query' AS name, + countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, + countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events + ''' + SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, + countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, + countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + FROM + (SELECT funnel_actors.actor_id AS actor_id, + funnel_actors.steps AS steps, + arrayJoin(arrayZip(['industry'], [JSONExtractString(groups_0.properties, 'industry')])) AS prop + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LEFT JOIN + (SELECT groups.key AS key, + groups.properties AS properties + FROM + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + WHERE ifNull(equals(groups.index, 0), 0)) AS groups_0 ON equals(funnel_actors.actor_id, groups_0.key)) AS aggregation_target_with_props + GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 + HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) + LIMIT 100 + UNION ALL + SELECT 'Total_Values_In_Query' AS name, + countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, + countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events.1 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events.2 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events.3 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_0` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) - GROUP BY groups.group_type_index, - groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'finance'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) - WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(funnel_actors.first_timestamp, toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), notIn(event.event, [])) - GROUP BY name - LIMIT 100 - UNION ALL - SELECT 'Total_Values_In_Query' AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events.4 + ''' + SELECT source.actor_id AS actor_id FROM - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events FROM - (SELECT aggregation_target AS aggregation_target, + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_0` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) - GROUP BY groups.group_type_index, - groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'finance'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events.5 ''' SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, @@ -1694,7 +4431,7 @@ FROM (SELECT funnel_actors.actor_id AS actor_id, funnel_actors.steps AS steps, - arrayJoin(arrayZip(['industry'], [JSONExtractString(groups_0.properties, 'industry')])) AS prop + arrayJoin(JSONExtractKeysAndValues(groups_0.properties, 'String')) AS prop FROM (SELECT aggregation_target AS actor_id, timestamp AS timestamp, @@ -1829,7 +4566,7 @@ allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups.1 +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_materialized ''' SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, @@ -1837,7 +4574,7 @@ FROM (SELECT funnel_actors.actor_id AS actor_id, funnel_actors.steps AS steps, - arrayJoin(JSONExtractKeysAndValues(groups_0.properties, 'String')) AS prop + arrayJoin(arrayZip(['industry'], [JSONExtractString(groups_0.properties, 'industry')])) AS prop FROM (SELECT aggregation_target AS actor_id, timestamp AS timestamp, @@ -1972,17 +4709,258 @@ allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_materialized +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_materialized.1 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_materialized.2 + ''' + SELECT source.actor_id AS actor_id + FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_materialized.3 ''' - SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, - countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, - countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + SELECT source.actor_id AS actor_id FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN (SELECT funnel_actors.actor_id AS actor_id, - funnel_actors.steps AS steps, - arrayJoin(arrayZip(['industry'], [JSONExtractString(groups_0.properties, 'industry')])) AS prop + any(funnel_actors.matching_events) AS matching_events FROM (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, @@ -1992,6 +4970,9 @@ steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp @@ -2000,6 +4981,9 @@ steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 @@ -2008,27 +4992,60 @@ timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` FROM (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e.`$group_0` AS aggregation_target, + e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -2036,96 +5053,32 @@ and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2]), 0) ORDER BY aggregation_target ASC) AS funnel_actors - LEFT JOIN - (SELECT groups.key AS key, - groups.properties AS properties - FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE equals(groups.team_id, 2) - GROUP BY groups.group_type_index, - groups.group_key) AS groups - WHERE ifNull(equals(groups.index, 0), 0)) AS groups_0 ON equals(funnel_actors.actor_id, groups_0.key)) AS aggregation_target_with_props - GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 - HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) - LIMIT 100 - UNION ALL - SELECT 'Total_Values_In_Query' AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count - FROM - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_0` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_materialized.1 +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_materialized.4 ''' - SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, - countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, - countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + SELECT source.actor_id AS actor_id FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN (SELECT funnel_actors.actor_id AS actor_id, - funnel_actors.steps AS steps, - arrayJoin(JSONExtractKeysAndValues(groups_0.properties, 'String')) AS prop + any(funnel_actors.matching_events) AS matching_events FROM (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, @@ -2135,6 +5088,9 @@ steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp @@ -2143,6 +5099,9 @@ steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 @@ -2151,114 +5110,78 @@ timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_0` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - LEFT JOIN - (SELECT groups.key AS key, - groups.properties AS properties - FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE equals(groups.team_id, 2) - GROUP BY groups.group_type_index, - groups.group_key) AS groups - WHERE ifNull(equals(groups.index, 0), 0)) AS groups_0 ON equals(funnel_actors.actor_id, groups_0.key)) AS aggregation_target_with_props - GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 - HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) - LIMIT 100 - UNION ALL - SELECT 'Total_Values_In_Query' AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count - FROM - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_0` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_materialized.5 ''' SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, @@ -2266,7 +5189,7 @@ FROM (SELECT funnel_actors.actor_id AS actor_id, funnel_actors.steps AS steps, - arrayJoin(arrayZip(['industry'], [JSONExtractString(groups_0.properties, 'industry')])) AS prop + arrayJoin(JSONExtractKeysAndValues(groups_0.properties, 'String')) AS prop FROM (SELECT aggregation_target AS actor_id, timestamp AS timestamp, @@ -2401,7 +5324,7 @@ allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events.1 +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_poe_v2 ''' SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, @@ -2409,7 +5332,7 @@ FROM (SELECT funnel_actors.actor_id AS actor_id, funnel_actors.steps AS steps, - arrayJoin(JSONExtractKeysAndValues(groups_0.properties, 'String')) AS prop + arrayJoin(arrayZip(['industry'], [JSONExtractString(groups_0.properties, 'industry')])) AS prop FROM (SELECT aggregation_target AS actor_id, timestamp AS timestamp, @@ -2544,17 +5467,22 @@ allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_materialized +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_poe_v2.1 ''' - SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, - countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, - countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + SELECT source.actor_id AS actor_id FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN (SELECT funnel_actors.actor_id AS actor_id, - funnel_actors.steps AS steps, - arrayJoin(arrayZip(['industry'], [JSONExtractString(groups_0.properties, 'industry')])) AS prop + any(funnel_actors.matching_events) AS matching_events FROM (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, @@ -2564,6 +5492,9 @@ steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp @@ -2572,6 +5503,9 @@ steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 @@ -2580,27 +5514,60 @@ timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` FROM (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e.`$group_0` AS aggregation_target, + e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -2608,96 +5575,150 @@ and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2]), 0) ORDER BY aggregation_target ASC) AS funnel_actors - LEFT JOIN - (SELECT groups.key AS key, - groups.properties AS properties - FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE equals(groups.team_id, 2) - GROUP BY groups.group_type_index, - groups.group_key) AS groups - WHERE ifNull(equals(groups.index, 0), 0)) AS groups_0 ON equals(funnel_actors.actor_id, groups_0.key)) AS aggregation_target_with_props - GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 - HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) - LIMIT 100 - UNION ALL - SELECT 'Total_Values_In_Query' AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_poe_v2.2 + ''' + SELECT source.actor_id AS actor_id FROM - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events FROM - (SELECT aggregation_target AS aggregation_target, + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp FROM (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_0` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.`$group_0` AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_materialized.1 +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_poe_v2.3 ''' - SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, - countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, - countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + SELECT source.actor_id AS actor_id FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN (SELECT funnel_actors.actor_id AS actor_id, - funnel_actors.steps AS steps, - arrayJoin(JSONExtractKeysAndValues(groups_0.properties, 'String')) AS prop + any(funnel_actors.matching_events) AS matching_events FROM (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, @@ -2707,6 +5728,9 @@ steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp @@ -2715,6 +5739,9 @@ steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 @@ -2723,27 +5750,60 @@ timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` FROM (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e.`$group_0` AS aggregation_target, + e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -2751,96 +5811,32 @@ and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2]), 0) ORDER BY aggregation_target ASC) AS funnel_actors - LEFT JOIN - (SELECT groups.key AS key, - groups.properties AS properties - FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE equals(groups.team_id, 2) - GROUP BY groups.group_type_index, - groups.group_key) AS groups - WHERE ifNull(equals(groups.index, 0), 0)) AS groups_0 ON equals(funnel_actors.actor_id, groups_0.key)) AS aggregation_target_with_props - GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 - HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) - LIMIT 100 - UNION ALL - SELECT 'Total_Values_In_Query' AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count - FROM - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_0` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_poe_v2 +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_poe_v2.4 ''' - SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, - countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, - countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + SELECT source.actor_id AS actor_id FROM + (SELECT groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups + INNER JOIN (SELECT funnel_actors.actor_id AS actor_id, - funnel_actors.steps AS steps, - arrayJoin(arrayZip(['industry'], [JSONExtractString(groups_0.properties, 'industry')])) AS prop + any(funnel_actors.matching_events) AS matching_events FROM (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, @@ -2850,6 +5846,9 @@ steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp @@ -2858,6 +5857,9 @@ steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 @@ -2866,27 +5868,60 @@ timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event FROM (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` FROM (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e.`$group_0` AS aggregation_target, + e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__group_0.properties___industry, 'negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -2894,86 +5929,17 @@ and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2]), 0) ORDER BY aggregation_target ASC) AS funnel_actors - LEFT JOIN - (SELECT groups.key AS key, - groups.properties AS properties - FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE equals(groups.team_id, 2) - GROUP BY groups.group_type_index, - groups.group_key) AS groups - WHERE ifNull(equals(groups.index, 0), 0)) AS groups_0 ON equals(funnel_actors.actor_id, groups_0.key)) AS aggregation_target_with_props - GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 - HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) - LIMIT 100 - UNION ALL - SELECT 'Total_Values_In_Query' AS name, - countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, - countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count - FROM - (SELECT aggregation_target AS actor_id, - timestamp AS timestamp, - steps AS steps, - final_timestamp AS final_timestamp, - first_timestamp AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner, - argMax(latest_0, steps) AS timestamp, - argMax(latest_1, steps) AS final_timestamp, - argMax(latest_0, steps) AS first_timestamp - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time, - latest_0 AS latest_0, - latest_1 AS latest_1, - latest_0 AS latest_0 - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - e.`$group_0` AS aggregation_target, - if(equals(e.event, 'user signed up'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, 'paid'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [1, 2]), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(groups.key, source.actor_id) + ORDER BY source.actor_id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- -# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_poe_v2.1 +# name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_properties_and_groups_person_on_events_poe_v2.5 ''' SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py index 95ae1c4b2b841..23acf13618d15 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py @@ -84,7 +84,7 @@ def _get_actors_for_event(self, filters: Dict[str, Any], event_name: str, proper funnelCorrelationPersonConverted=success, funnelCorrelationPersonEntity=EventsNode(event=event_name, properties=properties), ) - return [str(row[0][0]) for row in serialized_actors] + return [str(row[0]) for row in serialized_actors] def _get_actors_for_property( self, filters: Dict[str, Any], property_values: list, success=True, funnelCorrelationNames=None From 85458001aae9c6e3bb9d8faab0e6e2dcf8a85568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Thu, 7 Mar 2024 21:26:00 +0100 Subject: [PATCH 32/43] types --- .../funnels/funnel_correlation_query_runner.py | 2 ++ .../test/test_funnel_correlations_persons.py | 4 ++-- .../insights/insight_actors_query_runner.py | 13 ++++++++++++- posthog/hogql_queries/query_runner.py | 2 ++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py b/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py index 112278e3caf92..945a1b7da5cce 100644 --- a/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py +++ b/posthog/hogql_queries/insights/funnels/funnel_correlation_query_runner.py @@ -416,6 +416,8 @@ def events_actor_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: ) if prop_query: + assert isinstance(query, ast.SelectQuery) + assert isinstance(query.where, ast.And) query.where.exprs = [*query.where.exprs, prop_query] return query diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py index 72a0b3a3bd4a2..f324dcfcf7c3a 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlations_persons.py @@ -47,9 +47,9 @@ def get_actors( includeRecordings: Optional[bool] = True, ): funnels_query = cast(FunnelsQuery, filter_to_query(filters)) - actors_query = FunnelsActorsQuery(source=funnels_query, includeRecordings=includeRecordings) + funnel_actors_query = FunnelsActorsQuery(source=funnels_query, includeRecordings=includeRecordings) correlation_query = FunnelCorrelationQuery( - source=actors_query, + source=funnel_actors_query, funnelCorrelationType=(funnelCorrelationType or FunnelCorrelationResultsType.events), funnelCorrelationNames=funnelCorrelationNames, # funnelCorrelationExcludeNames=funnelCorrelationExcludeNames, diff --git a/posthog/hogql_queries/insights/insight_actors_query_runner.py b/posthog/hogql_queries/insights/insight_actors_query_runner.py index bc79636610ec4..782dd5b054a0e 100644 --- a/posthog/hogql_queries/insights/insight_actors_query_runner.py +++ b/posthog/hogql_queries/insights/insight_actors_query_runner.py @@ -12,7 +12,15 @@ from posthog.hogql_queries.insights.trends.trends_query_runner import TrendsQueryRunner from posthog.hogql_queries.query_runner import QueryRunner, get_query_runner from posthog.models.filters.mixins.utils import cached_property -from posthog.schema import FunnelsActorsQuery, InsightActorsQuery, HogQLQueryResponse, StickinessQuery, TrendsQuery +from posthog.schema import ( + FunnelCorrelationActorsQuery, + FunnelCorrelationQuery, + FunnelsActorsQuery, + InsightActorsQuery, + HogQLQueryResponse, + StickinessQuery, + TrendsQuery, +) from posthog.types import InsightActorsQueryNode @@ -40,6 +48,7 @@ def to_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: return funnels_runner.to_actors_query() elif isinstance(self.source_runner, FunnelCorrelationQueryRunner): funnel_correlation_runner = cast(FunnelCorrelationQueryRunner, self.source_runner) + assert isinstance(self.query, FunnelCorrelationActorsQuery) funnel_correlation_runner.correlation_actors_query = self.query return funnel_correlation_runner.to_actors_query() elif isinstance(self.source_runner, RetentionQueryRunner): @@ -71,6 +80,8 @@ def group_type_index(self) -> int | None: return cast(RetentionQueryRunner, self.source_runner).group_type_index if isinstance(self.source_runner, FunnelCorrelationQueryRunner): + assert isinstance(self.query, FunnelCorrelationActorsQuery) + assert isinstance(self.query.source, FunnelCorrelationQuery) return self.query.source.source.source.aggregation_group_type_index if ( diff --git a/posthog/hogql_queries/query_runner.py b/posthog/hogql_queries/query_runner.py index 52c423d1dac9f..3cd3d1e68bf9a 100644 --- a/posthog/hogql_queries/query_runner.py +++ b/posthog/hogql_queries/query_runner.py @@ -17,6 +17,7 @@ from posthog.metrics import LABEL_TEAM_ID from posthog.models import Team from posthog.schema import ( + FunnelCorrelationActorsQuery, FunnelCorrelationQuery, FunnelsActorsQuery, TrendsQuery, @@ -95,6 +96,7 @@ class CachedQueryResponse(QueryResponse): InsightActorsQuery, FunnelsActorsQuery, FunnelCorrelationQuery, + FunnelCorrelationActorsQuery, InsightActorsQueryOptions, SessionsTimelineQuery, WebOverviewQuery, From 82b00ff17c6b1eddac89f24d80ea65439d9efd12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Thu, 7 Mar 2024 21:29:25 +0100 Subject: [PATCH 33/43] fixes --- .../test_funnel_correlation.ambr | 726 ++++++++++++++++++ .../funnels/test/test_funnel_correlation.py | 2 +- 2 files changed, 727 insertions(+), 1 deletion(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index 3e33ce3fcd658..31b7269decbf6 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -148,6 +148,732 @@ allow_experimental_object_type=1 ''' # --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties + ''' + SELECT concat(ifNull(toString((aggregation_target_with_props.prop).1), ''), '::', ifNull(toString((aggregation_target_with_props.prop).2), '')) AS name, + countIf(aggregation_target_with_props.actor_id, ifNull(equals(aggregation_target_with_props.steps, 2), 0)) AS success_count, + countIf(aggregation_target_with_props.actor_id, ifNull(notEquals(aggregation_target_with_props.steps, 2), 1)) AS failure_count + FROM + (SELECT funnel_actors.actor_id AS actor_id, + funnel_actors.steps AS steps, + arrayJoin(arrayZip(['$browser'], [JSONExtractString(persons.person_props, '$browser')])) AS prop + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + JOIN + (SELECT persons.id AS id, + persons.properties AS person_props + FROM + (SELECT person.id AS id, + person.properties AS properties + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 + HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) + LIMIT 100 + UNION ALL + SELECT 'Total_Values_In_Query' AS name, + countIf(funnel_actors.actor_id, ifNull(equals(funnel_actors.steps, 2), 0)) AS success_count, + countIf(funnel_actors.actor_id, ifNull(notEquals(funnel_actors.steps, 2), 1)) AS failure_count + FROM + (SELECT aggregation_target AS actor_id, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.1 + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.2 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.3 + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.4 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.5 + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.6 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.7 + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons + INNER JOIN + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + final_matching_events AS matching_events, + timestamp AS timestamp, + steps AS steps, + final_timestamp AS final_timestamp, + first_timestamp AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner, + groupArray(10)(step_0_matching_event) AS step_0_matching_events, + groupArray(10)(step_1_matching_event) AS step_1_matching_events, + groupArray(10)(final_matching_event) AS final_matching_events, + argMax(latest_0, steps) AS timestamp, + argMax(latest_1, steps) AS final_timestamp, + argMax(latest_0, steps) AS first_timestamp + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, + latest_0 AS latest_0, + latest_1 AS latest_1, + latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + latest_1 AS latest_1, + uuid_1 AS uuid_1, + `$session_id_1` AS `$session_id_1`, + `$window_id_1` AS `$window_id_1`, + if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(latest_0, toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, + tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, + tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, + if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + uuid_0 AS uuid_0, + `$session_id_0` AS `$session_id_0`, + `$window_id_0` AS `$window_id_0`, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, + last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, + last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, + last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS aggregation_target, + e.uuid AS uuid, + if(equals(e.event, 'user signed up'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, + if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, + if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, + if(equals(e.event, 'paid'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, + if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, + if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, + if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- +# name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.8 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM + (SELECT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE equals(session_replay_events.team_id, 2) + GROUP BY session_replay_events.session_id) AS session_replay_events + WHERE ifNull(in(session_replay_events.session_id, ['']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 + ''' +# --- # name: TestClickhouseFunnelCorrelation.test_funnel_correlation_with_event_properties_and_groups ''' SELECT concat(ifNull(toString(event_name), ''), '::', ifNull(toString((prop).1), ''), '::', ifNull(toString((prop).2), '')) AS name, diff --git a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py index 23acf13618d15..f69eb3c6977b6 100644 --- a/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py +++ b/posthog/hogql_queries/insights/funnels/test/test_funnel_correlation.py @@ -108,7 +108,7 @@ def _get_actors_for_property( funnelCorrelationPersonConverted=success, funnelCorrelationPropertyValues=funnelCorrelationPropertyValues, ) - return [str(row[0][0]) for row in serialized_actors] + return [str(row[0]) for row in serialized_actors] def test_basic_funnel_correlation_with_events(self): filters = { From 98743f1f65a3b5ba210820ae6cec6954f750acf2 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 20:35:55 +0000 Subject: [PATCH 34/43] Update UI snapshots for `chromium` (2) --- ...rror-empty-states--long-loading--light.png | Bin 123261 -> 81696 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights-error-empty-states--long-loading--light.png b/frontend/__snapshots__/scenes-app-insights-error-empty-states--long-loading--light.png index 208c245f982735d5d628890903b8de4696aa8b94..85e97d00c266202f6c09a8b996343cfc87c6fe49 100644 GIT binary patch delta 30934 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%0D^aQMXIY?5+tT4+#S@?f&Bx>k~TP~C;~g$UsPS~ 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 From 2bd0281ee7cc359d061a9849e5351883bffbb468 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 20:45:18 +0000 Subject: [PATCH 35/43] Update UI snapshots for `chromium` (2) --- ...rror-empty-states--long-loading--light.png | Bin 81696 -> 123261 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights-error-empty-states--long-loading--light.png b/frontend/__snapshots__/scenes-app-insights-error-empty-states--long-loading--light.png index 85e97d00c266202f6c09a8b996343cfc87c6fe49..208c245f982735d5d628890903b8de4696aa8b94 100644 GIT binary patch delta 72826 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 delta 30934 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%0D^aQMXIY?5+tT4+#S@?f&Bx>k~TP~C;~g$UsPS~ z3s+ZliYPCH0{2*&QUE#|LM`_-hQzv0wlD~x%DDVi7DWoq+joE~uU@^{VtPY&TXOYV zLw^cQjj@rN!_}X5#pK#ODQ2|sw>YqZeSEfTZSB?XJ$?=brQpf*!y>xIhjZs!)=-V@ z7zsbgeHrFH^f=ZDMp9YFzK&L%Yvqr~pLtkPT~o9CU06y=85H_M(*#1*qNqg0a^KH} z`$dHUp|8{}`wtcxZTElps`}tTSNI}Z-p=DHJ}=J}Y@-$^5K#^?-xJS;$en9loMv9A z2H5d=vwPE@t}A15@iBiE11o|@R<-_-BYsiI$yrShtATjNyzI>=@r9Kg4|3f1d=9^1 ziQj`-PyWhx;C)eXEk&_Defl&dH}aWO3!2sx6etBfSE|63p|q&_6b0cU`@o7{xCs`X zpoMKln}tQS|Ln)Hvtvt}Eipw zw~B0TdfRQSHkGYBYoD7f>6}kSfgoA*di8a{^iz%_%}q`BfnEjuvtUK4)0fcvXM9y{ zKJ;m-4FDOB`Tlt_Q3S~9hofV4W`6zTUmteEGxZSuw}~1-6=YE{vZj}i$^;dJr%E0- z+Ut1a<5P84R+gU8%fUSQ<%39ta8?ad)Az%iN?p5$XoA=MN(lqhw-e2Ck=dG!*o~;8 zNxEV76jYB|T6!L><$bPI`)>Yh6n9C}{g01JkjNqjg_}|HPo6yC7K+WSocX}S#2g(Xtg6VWcb$`y zGmKe81++NVHfswkNd+w}3d(T;a;k;icR|VY%osD`hTe)h0ckfqOb%iP)f1?zxPh_i zTB*jw+*}%v>pGI8veWM?^!4>++-Eb$8#hUw!8x%Dg-whurk1XK1QFSuX}l-%_$u*A z&TsX}lznh8eqj|=Ra3L*)31Az;@4WdVt3_(&A6qIprC$)`J=SxI`8h6+GAnS$;qtb zF~(xZ?(6z&i_fD0-PmW_N{Wi^WWa410~(n(=#SG zxXD_1f0#^R=@rLbCL|=pNUna!Q%TYGP!5Aw5%#$Nn9AFUQ`>v(ZtB8Ap!yOil>e9%pt~<=s?|_(zgFGYe zkTI=ZKy!ThEX?yH%xGk|&!?)_SMtAsYqTiz-HR+|EyzAx0Ian%>rqf^PEM{k-o?04uCal3`Y$C8DbmapWX6XN56P>sdldEz zr~~#WG3sh|UM`vEsaKVbyMh>J_;HBlR34!1!A7@raL}^W%|R0utpFh9g_9N&>=wo9 z*mLJw7y#XE5HT_`qUBYjQsaq$3V@1+#R93%*Vk`JwBrE@6n`5M!a>2a-`*l6I&SHv z%*8XodnoA2M1r&7m#290de|E*jyTBk-N;C1LHzHfA(ajsl)&u@UL*@>+giGnCP$yG zf9nZeL?8Qh+t#*o!$7Uld|QRGKH$x_fWt4dt>6fxU$aqor|AM50}O%zP3J<6j)ZxC zkp5e$0wH=OspSK1ziO={hR*TTtEp))FbI)S@h3syGB-aDY`L`aRX`q5fW!M&6D^P# zF)=X*w)L-*BZ3E)6TqWK-3{{ru1_F64|>t^sN~yYTGY{J43iA5o{-ChvgFiiW;g1H zn%alj!bE{ncTfv3okdHI*#2ZJ@MO_5GpA={+_PhLVq>F#4`3-XTCB^Hm6Jmiw5)Ax zX#b5K7$qhGMC@!FyT67dP#6tRfSf#eQoqhOQyC#pDp2M);_KkOd`LOvrgFP-drLdi zPT`j2?!A-WoFLWwqZ`9GHXj~fIKl6kB}scjk)S%d=C|^f6mb|uI^u!f-M9s;d_6Jk zLuFo0spohNb6ix$NnxeHpggxU*I%=2-vzMqi{WKUx2deTIc)x5txZTrVv#mbQYjW3 zjg-ntU8%J;TL@t58S+VHj~_oSTRi6L8gFG~`KeKZ9eKCUU71rvAL|QuYYd`db*za? zoffmDGx^2no~^ZM3qhu1=lDCc z-QA;jiMK2%fr(nV&)~b6;cUYu`p|#TgZ>*isQ0DG0cmKr_B!HRW=Gt}@=leT2e9pW z4Fv%IR{TW)y~~u1$`5c(czF2RnEk$+!i1qiH-tPkl&xMbp9c!WgKrZCBnB4lit@iL zs*uP97npTd`SJpJqrDtu>{d;-ya0Or`V<4*`OT5@YXR$nb}}_Q2{CVC5cAgP( zKpBQOlApgXE?#!n<~2@~`jL-5dZEC4pB4EK0od72U z9xZ|R?jr?9eQJjdjTp`_T?g6rZ(7mx9x$L+piuc46N=crzL}mzMG7-x`tUvAIT+X& zIYF%3NIpZX0$i@RTeZHK+2z$0LQHAtnrl+I z{F5$(@h9|w+!z}wJ;#6(T6BD1!Gw}HjY!@~#=F4OPY z=qQh>C+FqQ^N2~*gi@Zwcg@hrsaTpca~7+K`v%dQ^#DtftC!a@E~~Uu1K4BcCYoK7 zWFTWP)$5#xpR>=lMDuNtd?P$Ape7d=b8lJMezgzq@=`Ub?Au>q^*53*U6+C7p@h%8 zZNTE}8<2@|v#R9*i!`^=#8!88Cz9RE%Zt}!w-R7;ZIJvnmadgG^*O`pq@X$`k)=_i z@cD%W$t?U;cejK~tyt;u3gJ+_lfQ>)*hycXnVry#_4uqCD=-CI5C;1C?gbO?J}dvE zY%lBWzPfYVhwuXHV6 zB6+*L7~dDdzas)%8sTFsVWF`ou$pT6y1cbx`AsyPmKT>9DcugF(QdSKuR;>kQ8PX;V4vM+9)eZ5z|YUkJr)R}+Zw(b*uixcZx2T1en4VH(%$qkevyRmyFz;Vkh z=9A@4_88q->!si(ELI4NvPleZh5~1e7GOE`;|+jF0W1k?(edI#;*L(sT8LktIDm(v zwGk^97k3G` zLAaGl%3F49f8QM2?$2r3c>2duB5!~}m^>GTpTUrcGTp!(igKXBFK5ihE#^Rgnxw9L zzm$r?Rp1z{+7+}dEHX#^-3oziJrBLxfAS1)+EAnwE-tQz6iVCPumGxX!smYeOzsy3 zjM;B52Xv&uKFx`{X3UH)}y|;JpOmPg+{m95{2uz{p^?yJMHX0*rg< zpbQ337lI=X9y(;f$D=`rvyCe%whxVnzydY8z-@Uzg9~WTU@VZIOuK*=-_^qntAqdk z@GsyOPLGiO3l7}Th|_XZf-6*D#{u`&_%NPO#BRR;JAQ+MjwpH=k#GcEWQx8-``{k z6FACT?xmVasT~TZ+ovK)!I-@u5S%K^mmV?e=mi^6Z6fwJer zL;|jqZe<7v9HcPPW&!}`rVWLc{!6JqsT3qS97=Q_mkd{-ogP0spDMEz$++GM?Qm9A zSKE5d*@LJ&hsTptffr$fX;;}9Q}L+@@DV}?(z;pa&j~>lP{#RgO=9{?>UK01Nx!a0 zK_qZo08iEQ>UB%NCIZY5s4mqsG$LPzoT3}t?MnSiNJNB3$fIIsM;`r@QgnCy9OFM) zJ2f@M4c5Ruds+k-Gr(HR%`PqBDuCljT^&i7h!j&$PU1z~@eGa508%u?Dz_z1TM77A zR3Xik$QWTANM^U$#AbOE;k&iBRnlLCPy{^uJb%D1DZ7N1FaO|0xWA%EDT~*>ON>?h zb>#{HnB(*Jb~^EIG=IqbZ6?Ui%Ia6~qAsc%8}`NrxZuDau5MsZbBcvq-3U>~8X#(L zmSY|7p9)fZ3Sy(Gqu+SwkMz325#T@8P`9M$Jhsa-51l`#v9L^o(oGelK7|J_W7+@v z;|9xzeYZDrYHRP_kBFJEUDjgZ=AI+kF5eaqV5A&S@ZBSa#S8P^0sBzgfAct{aIvrE z9Jc*!wd%0DaejSdc{dIXZI8&5CJ$9Rm}7*G0o#td<78fTnJZSqGoQTYw2U54ukP51 zfUM-xrMVyETsj7Sa5u=9y<6h^(D@-jztUH5m)DW)ju(gE!Yg0l!n+P*UrxPR{BliY z_^i2xedzJVOWk+gh0mn@(RcOXf%3R5@{{vd-aKT!$(=%+pTwnCO+ty&3h!DG?o0b6 zwb2s|+CYv-IC0b~!gHyuXBV+enBytt5f#-%$dXzdOLKwx4Frgf1NK1YK#n-#!1;zr zaG2(r1}7@NQ?JzW8z8o8NUq2}tUUQB4IPvU-W!@dd{-cE&+)=vp7^^(iD;M25SqBg(TD>YAs51qhez6 ze*L-u@A-Q2g1En^fo$+e?DJ#eiE#(3FuEE1lH2Tl3=i%s5zvr45R{OGF1qb;vq<*XE^zHXqW3yG)xwx8kknv6BZ zRrg8P@&fJr{NA_hal=Zh8>{M=mp6_a-bCe}+&`iEetVq3wEoz^gJgz3zoY-!*L~ux z+&zBRYLxm%obJeN>gIV*11|pkW8e_GOz{H-hG;O+MJkz10`Z}%rJLM>1;zOqvjSZE zev{#&V%Z%nj=l4gy$hAHeoOACG)5!*_b^j3N%)KL9LCB1mnFl)A zJ^AYq;crG9b=1sWP2vH4ak%K`L^41@(1=A;F(W3Q5UcURoA9Qa9qUh-1Kt) zt)5ep-sv6o+nzQ{Oo=ONlvnSn6Czyaf_Gv*+#`-k5G$s82Rf1@vUN-lM#zaN%br7Y zzphVQr-wap%mZ{sV`F2>V05O4F{B9jZFRm5U&1eKKruT@bn3E~^XiUdH?cyR%Z2_X z_|2(?#g0QdV&l`4mH&Pl0O_h~j9Fl#(6ghNmDf||2@y>1m!(K40Ip)Dqc+mg($>jM z=m#qO%gkTJgN-FrxO3oEwnk6y7N;-ikJ z`7j*5Ps(kHGG7V`7Yo2~8pwt~!zLc?vs868>_xQIVvG7-&Vg{9hu9l~znW8aG|iio z9u5cI3uCzjyzV2*fE2tEMgo(0o1A_WSeIk&7nF0L>|Vcqz5bn;()G(MUFgPTITLbA z132qqhb1nM619u`Rn2=ixj4kpBUJ^4Tgm76{2xA}IoVtPoL)Hz64$`&5}e#;)qO(n z!9Hu}#5RPog=8Z7Cnzue-b%uC;^m{XaRLfM9w}K&n>NnaM~@rJLXF+7jd)&8ljHO*YyE~m#Y1tv!#UH?R=)iWzgfjj$@*=Ls_Xfn&nsLUu>9>yx}u3O`|*gu(%8;2lv;08*kFAjC2VBW7y<8e@SieuNuNyX@Q@4jax4j~PEwy?XM zNv$3iQH~?oE$veHEa|ni)%8tt8BIWS)wucm+>)7#vkDlRsf^@QnQLU+%_uaem|e_t zYVPeVRrV>@()mVNwe^b{1_t?{h?E}!rVfDnGWY{ljstDNxGPQWI0*809ERVeLQw50 zO5W*3-Fi00`fJ-PIDCHl%l!JkotmGu(Vz z22YAj&++J#aw`iUbAlq$D2z=;#decd*>mGGVw{?P4fl5xDPcCPwr%1l_V!>aF%*vm02=%tPr9 z^;tPC`HXnr>>b*4iwW~GHadI|d8if14nZJDtP22?9~aKD)xn3Jj@TA^hl!Y-kIL7qgR3PfKE#lareh!E8la z;(dal0MvwDW(NB_8w6oX_EaHXI3?vTd10_gUhVzMF+1AFjvXV7voXuex5o=<$oQ;c zgtj{*fGcFio7ZPG3LY=+@p^bz+$*MP?uA;Ib;>ESJFoy_WyBS7bJHafAApZC1P{S{ zc|wYd*>lUv`brkT$!m}<+bzkRst|NNy_*XhuaF{?athf^86h(mT6N}{WVYV=Gk3&h zpf6vhJ$B5+f42jYOlvgRMS^XOEjEz>htFbT+bl~#NfG6TcDS-Kh%{JL4afk?o(B$U z#9qpX%gD&UdsHFPS*i8R;7KFkr~z1;+dJ@cB{4KP2s3KvfH#P zpmjq4=nu(0xyd2?Rc$9SBULuIBDeEf&NmLmU28=? z@XZk&LcR%E9-z(Y?V_sHwNfszt9qc-Ztz-8iYtXYzhmT&jakNS)m)q0_9c{vWE7Bg zIfw>M-hM5XC=v1gfQD)2A&(%ilCf@`#z{1Y(VcBVd2xBbFPiwNvV%XM=E&?at4?WP z0657Ml?DP9r3hmg*~>z7eArCo7e@yW%0&e2zdt<5)?e`y)^!$qPhsA@!v@|Hcpzm@ zK1&GF)6vu}^KPqI=ED)$>cqEf@7D zT2`in*=jE(ea7r1crJX;O_3tFk;!b3oqL;A%A(D>n4OMxy3l#`qnXx#zxk+NC=jQV zS6qw>XQ_!2;HuIRGi1IvcAb7tJh+!O(8c8th}sN{UXTaFJAf}PHr#g_o<4Ex&{-zL zQZMJPEQi}pzrfkC_7%n@fL6x8vjPF=84Vqn=LZsA4$%Yljyl_W#JvDsA^JUG%YxY8 z;NaIGArhJ}dqqd`U!>WISCQffQYfEsZ3bAZ@E-69veG4GmY_9 zI0uEufrDedPLtb|kefF*XIruxoEU;5Kh^_v~(cKZ{#k=Vt35%K(l@# z+fBu;;YCpB8m}hV5?Qf(ySQ_1$B!TH zeW5C1`~8C%xY;+jn6NNV3gT)S%{kkZF@BFqWy8s`gYRQwV_z7F9OUQVs2)I|dMTfe za52wPP*lKj=0t$wx|F3|w)Ku#uTZ#9cO`jaS>h6~K?1ddhs*Ut& zKDw`rT?N)`>z)ZX)6KED8ltN7R@B!Bw(R56{4;HFrM_b{5zUWQ>f|Bzg^?rI5O!C^fCXX3N|kJQmLoJ0d?15;R?&py z#XwIFn0M$>NMjo1KJz1{a4>(>#@;JL5*f(|$XHuoFPslzgdlw0(@_wt^V#-@k-ifK z`0jp(xUeaHr-)thwjG$`+_aC#v6M)Ur8B&Io)h2Hc#TL!FHSP&&Gu%`b)`1wSFaoS zRQhql$FXKKCthO5_+=(GB?ESJ3k`_5;OwiQ#j3j$d7XbfGZ>xI ztieGsS*ZE=1Wk1sunUF8gW6RcWZD|2D4n-TYIV_RwvMO`4qT|t_ZQ)+%jd7cZDw=D zJytbqNKUGJ2M+A|P7LAu)*x>+no}41-mM=4M=ip2UIGg+>(&M;;|23VXEG_M@53V; zfEaL)bD2b)--C_RpH~~d?NcWFo2DJX54fQMro`Mf9;bH}qc?~N;n2#)O8*-F^(qSq zx9QRJDz{}DPsq(DlvzZZ`Bp#v<6?!rd&5&s=kNrpFJ4aq0|Vtl7)4vN+SpDJ0o`HG2i=g+^N#%8dYUpQQ5P73=WxX-=cGP7WGe_z1=}2%QS5I~67cI;69W?y zx2mdYW(2&~V9(zuU^jsG@mkeX0Ba%D(-COrIP^z7C49^9n}B2Kl+rKf2RIH={2Y4j zolT4bU%)wi<%O8`t{_v`>#$e-qjlRu?n)YIX@4;z!k5@GK}Z#o_Ve?jeAfh!!} zIq@MyqOIJjP*+hPW|LP`J5f;eVg+k&jG;cM{T-7wo)obhV6e9`;v_PN1|_fdG;X*v zy`0KTIk!9Tz|KuD&U`N!7x!GK1oM(cx=%R+1ze}$#Ga(Ws?35RUnLDk!^y9XPPG#o zH2KY2?_bVV%g>0)(`L9doCY(KA<xChC}&EYH#VW|DmK z&3}FwU8rDy0S64j=?kfekVdve=|CBH2B4k{57BVUe1Z%z03t{nwE~&r9IyU+Fwqpg zj`Hz_|JB)7Kt;8;{SF2m1NGQ|h)RQk(j{Vn#DKKKh$syMQbUQGBj*@MNQrdU3`2*s ziU^8y58XI4f;4>32HtmlvF=^py{@B&oZ0b@=lRu!&M7c3us!i{sDI=;)S>3ss|^@W zQ{n2AgwWHaE0r63Py1;=1cd^5!qz>pW@<^_4F$#48McoE<^XOSJ(5r=1H`w|CjxM13;s>$Y4m(YPK@HhZg`@|C0-#<5;7r7)QQ%kyc;~v=9{Pnp!PA_6B zed6OkKIg=^t|MIeTjWX0Y>NzJ0* z5A5%!Q!jY5=lu51Tc2Q{XaV5OU8WvGrRqGOnc4$K78yA;_iHgAikW3IEoLWY%0cQT;4s3^UKj*b;`&}{h9x6LvA;#s(zc9i76?z9R zisGOD`Bi_A1sHoXA18r4jZ=<6_-Qf>Nk`)yZUJLeZ?^X%1W=edwwmm~-)Rxr5GDi- zlb(sgjR-n`;K)5YGCB|kFO5q8~4y)CdTL726fro{EWJa ziXU1{8kD~jAJlQ@P5OX*knZnSQ8FVHuf;xfTQkbsQ}ytQXaaWYdb=Cqebhj`TCTm) zfHe#cpB9zU=b7mS5>uGsm{NSx@6UBgw{>e;Hzm_9*z>>}LxKp8)kh3AOiJUz1-H&_ zV}%D!{mP+|&ap2J(RZ1-VcJM3r4S@=-4ngX7);JzFN=bUOV%}TxXa3QJ?n~idl{A( zBqoMPOjU9i{-GJgw{A0F`1THUS1U>waq+Ak|5Al0JTv zhNH_%>4iiFv*u*KLX)Ypm3hzBSAIq$RNK#e;qpEsRvZ`H8ed=kR>|zNsS*qzFPWrf z>ec`n(}18hXsvJ&FRDYHEyZy>YwZa*!d%-Ls*JRP9&jwJ$hf*`+?*x@M1tdO_{TQiZ3$NK8U#la!Fx;PyS*7lX(bXE?%KQwK#1^b{M9>#Qb3_az{o+)V3Xl{l-FF zf=)i61iH-R;)Bk>Y$B$VoD~1~#zxhW)hXMOeA^&l>ki^tu_WCq#`D=7T|LZng|DiE zN#c_Irgtjt>|H>9mLB)sVnX`l+1Qquo(ZR?UJB07Pj9j<>=qYHH64G42XS-j=R3bn z9$i}I@!Y!?=!p4wd+5@*uUxqY7!#WuNC$idfw#(qS`YdPi_X?bJk@om>Q8a!xp)Yh zU^6ndvTB|Zs`O=Q3$xx(gYlaCuwRmmoy{C+A-15#7E~Ib^@e#RmX(YD;!X4eFtUVo z_k>^8&4-H96kv-JXHUdykTiLwZ$`4BjHyn^3QNV|R}Ii?80L58x>eT7jFv65c5+wo z0mwaS+L}r)?#wLaxUK)v~ap9jDpUR-f}Do&f>`mTNyByHZ2J<@y93Bh1u1cJYd1Y;ci^)&^n!?8~R_1@Q z$Wc2Nsocdy1S76%*KopN8t{=2g+mU&BAp`R68UO*A;ORM!VCB-X9NioXS|stWKgG` zR5*E3fuF}`-FWfb1MzSenb4MN1RVq7T`R;8E)hjpI2f{Lj~>&0Z8bZG8-dTC z-;_0&4o$AQ3w^ejlrNKr3|x-njOcq%Ny{sqO&%NDP^#HU7AR4xJm4ND%griyd%O)H z4p(bZN&2fh9y@{2=EscZ_7T7=&!*zhx#KqLKr%oOyqWR~ELSlvU<1G}xt%xLz- zWzOzLvE1lDL#Askib-|hD#j!1V1m(f>=r7@R^86)lICmZ*Km)Ey(k1dDFn=EARzdH zps;tW-F9`|P~vGpMGHjO&6_t*5W4RcfYmrTFHaMCK|JqSJ-2Tn9F}3#Zie`lji|Wd@HkGv^b}0NBJd4|Y&CdGe`}!VW zJax#7gbs%Vs;@d>HWscb3Yp+LvLMl_6k2a^A%se*SQpQ}dsn)iMtg)lKKAoPeEZuN z_$Bd?{ei3i%0i{9=;!w*ge+UyAg;Rci9XdY52m2mX5DpBY?`&Qbn2U9aEnS&|@T&pMXen4$gd0Hr?P_dj7 zjlXaUx>tuBegP3Vf0&m*O2kTSn0jkoLX>6VZp_Zk7LHrVY{uAi)G`NLcFmp$_C(?f zsk+RTzXLy&rF(rlZs>K!sYrFZKT>+gd6{RdPa&-_vhKHeXWk^WGe4bZLDbOJ2B5(D zvYu$2iWeHv)tFGNj&p-BpnsPb-pnNElylo<9U;rEBiU(b!&9$RR!>n?7YOaRe%g>5xg|JT2U#nP?Mz&;a(k5ch2He#mYdk!P zraMEG=xIbB4Lza9%0x)H$$%`&^VL|=4==1v*)tE&HL=K{A4~{`8P|r#`~uVr-0-2I zX3wE0nD9DLmS{=MYxqU%j>W3H_hHsp5Ho-^Mp=+NEad+WVL z6EK`|9~&8ub^EdmpuQD;epL@zI{$BmwrA0FH;dL(&D;)37rL0+)77jq>Wi#N=%b{B z!%W`|Ai1{rgZr>?`&G;>=NOamb;j9d3)B`OnH&V3)2Y%`D|+v*GLw3nmuz{+Zc<2L zW{HqRD-=8fi6-%1zTBoe*X7jL0LYs9{rm0I@cL{~GR7$mnkI;jG21NN4GWVzma&_3 z0BL)#$PNJo9hsl`>e-srb2sj1n+%HW8aEI3|2)-Q1o{i`9GtKC@+BFn3P6qCf*^zT z(3w8bT8Mf8Ql}=*4v!!}6hUTz!`hM!Sas>>8`mtFE~BStHLSU5YWm%K^9owR)Qh*B zEJtBe}o87KG?*;A&L~*Uggr7qF9{HF^ZOW<%a?NniZJ!By=GJR z4@X`aFD$EmpiS`<(1Bz)Wq(1Jc~c-|;D$ed^!4JOqM$WnV;3$vu(+@aOyI(&eatyd zk1bMaT1N;x0qj`wrdjkpQASsgPG(7`j1FWPq{)yptMvG*mkL@2aj~)@w>$IjY6L=_ zjPJSb#NR;QbI1Xk+*n{Y3MfS9)UIfO$Qx-|YHHBH>McxzZ{HqV+l2gKMM;hVrKD3B z8hib(OX?vqy=<-y2@}*Aof{&vzkaD{Yli>`0SmJ!;JM~QRemB&CfOb8+S)&tfPVpv zVn4c4C45J|%L9T80VN>993FP4F4Z;9&MoMc?=5xfw3md#cdvy_h%>t*6^c!XYhxCgK(T-or z;!=#q8x0v8k|wmc4RM>E>K${~SaM@yBM>*|01q+S+*tRI@9TS*kd##2)YN1HXBH&2 zJaoKrbZBTuM&xW*O{;0yH^V}+v^R{o&BhjXML}L(Ub<6Jk|Bs0I=tLFQ((kE&xE3y zXigmLz+k1652L`Et_8I;AhxK;3DgA<*IYFLsrG632jA~y^40>bzzHa6!o$x(=9fxB zLIM%mHg}rcIe^}ts`GvGrU{H9xz4|gu^?$B6yYEk6I4@LdU}ua9#O3k!9i3;6!+n+o)C(56H; zH`gT{o&h6FeM}VJm7&p5M>SmtmOR&rp6JbSAptWhDW?mJo_Pu z$aLff5`veS)^t*`Wdh^`w%|IccSMq*M6N6`&9Z`?Nx*jKF1RYkKmT)(n~Td22$o~V zjtQF9N6S<~b<>rzqG89g#LmGn4%c7YX5jCE!9ga4p5A11%yp9WRd?ptI?EzNZEnIuWsr1wlI_6^^D-CNdZre$=3OqGni|k7m}Bk zr*$OTd@oSoEMV8=07cV-DnWalqBdZ_=?Zn}&7sY&}6UXm)2s0;RKK&~wlB~>JQenJNXzG9 z6VryKzAZsvIHG}V`z_ts?d55%u&|&3Ch`i(4wecE%BT_(z~DxD+>SlW^m)^18Zn@U zZR?O>^R>TipaUUTE`p8FoMMW0C8M>&+}zw*9V@h(yU1P`W0op_LAhiONwURCO2cMzvMFi0yamR!^#NZ^Mh` zVoZTb4k?fWL39JGc2*SRy8YNuBW9^sFE2&6{)0!pn_6xjIWJ(B4f2+xoaP1;Pl7|q zF>5-tzL3s0Uevn|I_NcVCn2qZtoB@hdSFlM`u(h7A+UX^dOLPK$5-v3J6sqoqdN&x zCDv)sPq9M!S^%rr+|X;-VHmC(glm>;{)I-{Ai%ri7N!4RV4bf0T0=T9F&EO5XmGc0 zuGQ>yfHlt{Fz^&-vT`!12`)QU6zXG=+7q#)lNb^_C}589^mXY!|6D)YS^fPx1Jmh~ zCsSx_cIQ}(^0KkB3%X!GTn5SL_wT<@0%hPj3(oEi4`PmG{rH>_|kPJOF>AfI;+U zg}qJ*2*+MQWJA*X%vD9$-B8eBI9&X4K$zVASsN6Fg5?#3bLymuZu{pL+g)T^CwLm5f)jWdXQQz3;?A7_Yqb|#z|&=!?$o34l_#)w7&yl76giH931lg zJub*N9!M8zWPu$N*M}k`gW`@zE#32nFg{Yn5jPe86ZC(^pdWx9+#doce8y`;HdEfd zE!D|*5_v4(7(A%J9GXw^?4sf7;XCu=Nv=}`y1~4-MxONI#3qwkQ(*T_FrQAsh6#^@ zI)+?2vUN7(28zYDWe1U7>;o+^I5AL4OSMU+`q3({%P{wdCC zyh#cj^RW$o5!<*_da9PEGpy`+izMV`agY_ytA z?(kgEu21A?o(#TFT-JFCP(#hHDVQe0&b1()1Y%sBo>9cCKXw^E)r3H{KDa*^BnVz} z@F)&9QQc0*iRSV2k`&p}bvj^UEvo82>ExQ{!XyObmK;0q2pcuKOiF{{1Ri60?n|8N zik4o-j_(5&9eLvxCFZK>KVPlCp&vIXb8C<$=*A7Vv-(9v`j@}pc-}tXx!Ky%lD877 z`#ry;ttryt7E))B-2qY<6r)IQKK}alMZfldICwr&gJ~diT?_aR+L|P^xFJl{!T0V? z7&Sb+Qf0{RVA_AbE46$t%BsRH1FcV;e^_TtO+uoNdEsLb5s>I6PhNK(z2ah2*0%UP0L*8<;*);E0h zqHhx9WYY$*Y!g5!=-M^-)w>1fSOemCC{(XDGN(&)tWOY% zV3h}E&x)eNdhGS>N6J1>dv4cgurl)t{^007*Xf_70GBxJYb6|nfMnitn!9!6CB{Gc8M zMmqidd((<9w@GQ<%lR5`IwLM!HB+EjeDaj{(xt+bs8+qs&5h|ghRY1kr+!k(D{{*e z(Ytkb0^eYqjVgt3`xi~%bJk<&U(=kTrfS6ncRd-cy##!iDaZtC&e`EVd5286OS9#pOn1QHp2ofLI*l;E9Qmm@YhO6E>RYZPmB5S&lKQV5-nM6-;X*~ey8nHoW zF@46hAC#G|+kE7z8~OB!si>_;wMd`l@c#WO-=j}3Nw_G2cyi+YF)J%rwlkXEATN)Y zjDt!DHf6N5Ny?+MH~Gz*Rd^g7rmt~qguMu^e^q+x4r+OgeIWQ^CaBP#M>>yaqse6v z;@W0rDQQakOYUhg(cD*48*Kg!M>hqcB60gt0U3-f98X$J1tl_E`W{d;OQXqPFIIu^1r; zma4YLS~RqU&(jJIWU#_5{$`vlR)WJ|3Xg-P7s#G|LU`tZj1Sj$W9naJPc^0P`tgT! zbX%eDYjdq7@55WSAPw30%hIP`+o5f+a#G=JE~rb+IaVIZ|o-`l-% zeu=?c>(1SGz~l#q{WTMBO!13V0Zg-(JrPAQ6Do=Q_H9|oiV7oL<9OtrAkc%T9`?pDb?Cd{i5_|2Rg^zvme>WUe`>?x#q zqwmiBosU?!;<>iI3y_NjGrL_|rEop2V^SENyD>J9pxR-%kcHe|!$qhDOVb=3W54u_ zhL}%zIFMktL zy>%ebSf`i&Hq3-e?W(s5qRQimJh|U=@WJF(UOE0kM#DM5s;){-JLb4U>?Vs4E4sza z_Q?QYP8pA<>XFPnQ?oj)daO$x1uuBwa*c%PZCQPf21v3f^1qJ=+G$7J8O0JX_mPIQ z?}H9m`L@_yMOb2Ona-v8*Ny>VZ$@Z_4}6&y?$HJ-Jt3v#&iN^eL%pEu!?w)xHd1=!yBQ zC@R0hdt*LarU>n-f56f5PHZy>>89|9P2^5WEP}wgab+Qjup%~A3iNL-zLPLX2}!6U zOxrl@WJ94r&rbmwaMW3yweo~}Y8#yiqmC*P-< zkYMDK{^pGW`s3ISCS+>y#faQSXZ&<80?Cuc#GH6_x92PHJVZGLar?V*kE!Eim&NX3 z@u!@+Q|G2a11U0ou?ML9{FxHbC|e|hp@`dLK7c@@9T_Iz_c>1* zo}$In&qhaw`KnBrN+YAmcfP*9Q&EoTE42H@!K$HYWtH}L^BuX<5CC-R4L49BpcGG# zs+a-GlziKJccL6g`1-jv>3i?0EE+`{ZD zi6=E6ftX1j9>aIn-`t$2Tf*GkG&{(VLzoorz!N|Lpa*O;F5=kMErd5|JL}GF?U5=} zQ${Ls+YI5gqOIMnDtFq8H4G%4IYU*!hs`%@O z$DhPThlznEt~GsAJxhT_=5Skk=3~8`S077&2V4gF`EhO8FQBbxT1C&PrZ<_AHFA3V z730w)I!58K`H-_EzgI|w_L+MAf==}hL%OZq{0$^6!@~xkl&dL17G{eE4@bTq-VOTxLFIF=i)luFxN)Y~Jt{v&wFL@_}8ed(1yQ-wU>6wHr7546krryNrWqGs{f;qUH(A>Tf#DspVffnFH4* zJM;B{-9-F5YEr*^`OD`qTAu(^c3Hm^lChXtvy6Cv0Z9feUd|kMLlbyN&DRS_6=i;L zGWXWDdpF+EpZ!0VC=(-V4T$;lAJTEbH;j=uDzDJ>16PEFH8V3a@#byU>N!1Rt1Iu^ zzHPd(wi=XqRjoRhtp23;A&NFs^&-8!Hi|n!J8wn-hnbHT7WPw7cOWMhS0+|0W^}A6 z$@i-dQyl1fz*R6swclQz1Z|uDSf5XcsxlNbTY6;>(fAVTq3GprYgV5K6=@3lsPQ8f z?)b-nYcIo$>>Dqhm)5$crx!gl!>N_Dy*!GaNA0W#aB4ZWlP-Jj)5T%j9(4-2XUIuq zTJ1>UFc=OCN1A*7U8@YkCp%^@Mr*}~b*&OOQQQ^%gB^RaP%F^L8Q>d6RBEoa!gm(X z1`LHge5Z?H+1&n-ddMef<^({B(fLzs9+-eR$E1l#*3}lBLfI{_&uGfxe31!mJebrEbjNt+js`wHi<4%dgfk3(oz@ zt6S3|B;z$j8zM=^zsxW^!cnk1yCcNIxQHkpQLbz=78&*3P?Oc9p{?hKf6!x#ULBv% zK-}x1%Fct55pXjlvtH-wrGH^m*{@zbi=aqN_wRh+zd1j*&+b1<$Ns+rX^Q{VPx`-n b)r`#}2OZURXK&_iU1hmDO1IN)K79TkT4} Date: Thu, 7 Mar 2024 20:52:42 +0000 Subject: [PATCH 36/43] Update UI snapshots for `webkit` (2) --- ...--trends-world-map-edit--light--webkit.png | Bin 77593 -> 80315 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--trends-world-map-edit--light--webkit.png b/frontend/__snapshots__/scenes-app-insights--trends-world-map-edit--light--webkit.png index c21e958b6cc14bc379720401385995cf91f23eba..e0b0ef427fa5e94cee6baf2a1073de2f744f8589 100644 GIT binary patch delta 25021 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 Date: Thu, 7 Mar 2024 21:01:14 +0000 Subject: [PATCH 37/43] Update UI snapshots for `webkit` (2) --- ...--trends-world-map-edit--light--webkit.png | Bin 80315 -> 77593 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--trends-world-map-edit--light--webkit.png b/frontend/__snapshots__/scenes-app-insights--trends-world-map-edit--light--webkit.png index e0b0ef427fa5e94cee6baf2a1073de2f744f8589..c21e958b6cc14bc379720401385995cf91f23eba 100644 GIT binary patch delta 22277 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 uO>QP~S+7Ij@N8_} Date: Thu, 7 Mar 2024 21:11:30 +0000 Subject: [PATCH 38/43] Update UI snapshots for `chromium` (1) --- .../exporter-exporter--dashboard--light.png | Bin 27611 -> 24372 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/exporter-exporter--dashboard--light.png b/frontend/__snapshots__/exporter-exporter--dashboard--light.png index 5f5193940aa4455a79650929971c87ff0156cf53..e682dc216ddd3e400d98e145f68dbb877393f521 100644 GIT binary patch literal 24372 zcmeFZcRZJW-#7k|v=m7t73!l%gh)0OZBbOn-jOZYqi=~MQrWA8q>LnFXH{0&dynir zKgRt$I?rp}_xbxhuJgLD`}fE1ai4#j-|Y8s9Pjt*^<1yx;br-=TQ=?9L?V&4oIfY4 zNFq@MlSpgEH>|^F-rd$)#eb-56wjU_B~Y9Bt_>f~H8vsyAyk{Y5T z7R)SusNXmzhb}(cF!XZ#{bHttADxdL?>$R*Ud4Y$)!VHXX#)}$g)Us7Q(ZqKTl4dNR*GqQ>1_t)+{A9B3{WWJ~WqmH^;hPvX?P6d!dWwpjOg?i+TUNGk z!~fPd%f4J!_LctWfEdp+#*!31V;h%)yXuYiYo};d^?i>IBgCV8d` z-1&S?x3(=TF?>`|-!9-bQZQS+Q$02{{eV7CW9A`$G3xqUsl#Q~`2G#dA!N$Y562n0 zeJuqjg$K<(N4ZJv5oq8wwz(AHd$Es`PYf zuq0Y^^V`+w+3wFDd-vvKanEn7l6Wp^(?%8+u5ZZUs~gPs92N?faHx7Y(vYk-`?>Bz zfw{^hGT9^gGIep{S7y)NEpe;bH>b72#X=r`P z>8qRPe$I&!W>KNjp5x+?qs8E_cIn~Qy~FwyT7oU=exe|#dGF5E+HvRXx+?W1r;Os;2bY1#B;k4-!5XB&Ub8q6t1+uJT~ zCb=%p2s=AFC*AmvHB;y8x-wuSARsU?G4s-4O8d*5kzxM2*eKWH*rxJ$)>9;#B$6q%2)X1AXN^RNmje&BDiHXT~ujtoqGx71M$~`QL*?V%I_({ua zPjuN?+1mDcFmX&+mtA$Dc<+dss_NNgSm|(2iBn+`|8!~&Jd*p-pfs_?$zrRdqm)OH zZgQFnWyJ3Jp^3RPc5zCTS~k@Rr9FDuZ?FA#p)iN3E_=JqH8)Znx4H}6s;f#Z%@wuk z8oQ-^QEHyA#E)&gHl8ca-mYtJmGo5`6ZTf*Jd5PBuZ}H^SQ=^@+uL*`j*^_U?ZHeV zUuVK5Ul09+JRz6;MxzcaY7fOnhF0hG_MANVI9O=t@mHRJvNAaig~+cx-<5V9bv|G< z)xPe9T!;X%QoUjcBl;kx(F{*2YI4R`Dwv6XB#@w#Z}6FlApxx;*yPQRi7Fg zFKc8P9tm)E-eBHV#(JQwt!=Ha#hK-GGaavzoU+W;vu?a~Yju-bmsU_smXqCX>P7ml zp6}1nzkI1my=By7chj>-cRx4xBQIBK5$Acg*?La-@VwgEfU~R)!Lg3FOKNLVFSpAu z_;YjB2nJ6H_yzUHZOkZCaDRGmn`-*Yh4#ndl@EN(dN%PWv3b;Nc6wHNw=!8(U6fJe z(YEi@`CS*TU*Ad6JL4DqJX73dai#x@iTG;iO5R;+IwPiVahnj)TkA$gM|p0f?{YWH zzqHWvZ0&{Thw^Q@BcrWe8xFTc6lbON30iiLS}p`iIH|bBJoWcKKh~BVEU|FFEh~SzaN3{mQzgBZ6jP^InnrK0ccR`PAe` zoJ>;OR$WOk3T_^4s{=H79VZoR#gNwY={Q#EU8A89374NliTaXi^w zv8)nvUuRGDw$hrjdq3NhFKu@hyql;ax-8wWV%MCc!%j*N*B7yisp5Z|-&h}Ax^2c`^CC;x!6}`zl<6e=VDm#% z#-K}Kt}lnp3`Wf6T36>%liZuA?46vR`TO7X@-p_=&3|b~RdsT?y_Ax2_@`c%aT~Km z{>bYaNPSlkXpn?{4Tx^3y3ebGfQDA~teyPN>#i zN@VoQ5U&)4XH4y7Yh^^hlMm%pOMH~;!)UzumO z`eL6q2nkj$Z+3R%pO~PfO}V{3b&biD&%=!=?sILcc`GGBCB7`(1<^**6@8ITqgY5p z`hvw&nb#E_&1v3dyEo%eQrT4VBWe1S$J7TaY3f#%-87Un=GyG|NS<`8T~n3HP4#>? zrX#b9DSKKKBE)QmDb9w4hg_E?IA@0&W#&dDN0dy-iU}AU%8UsE3D;K>M|#^pJ({!Xl^1`TwEr}zO!hfzP>)cZsDQhW{Vy;qTvfu z?R`O)a!DPkZO@v`Gq>bPUHj}fv-?IGo!*JnyY*L<=SEx8DWmw=kGJe_8oFP4vUUzo z-6Iiq{=TQ(3ugy~#hD@Myx9@)4K6Qs%+(~6dMnVbj(N+<^2VZ;7q@79a!WYgwxeZN zYyN~>%o3W8 z(%USS8B>a^!pe)iI@wj1drin>3d6RlmKEAr>odN4^9KZD<2tT&dN1?rq~(+M?)z@8 zF+ULdSl>{;W2paZck$!5ioNDexpzj`Vl|f?v(n~W)YaABUe7*!L`H^dY-Wy=kvLK& z*WxE@7iUOo!zp2rIEKPU*f!HxrsvUjjE+_W8=a*RS)wv%{j#bpQzh&?QDm~RG^K#b zd2(j3_GY6%jgHT!Pm)(NDCU7~lWr;>u1iQtCO4Wo&v!O*<(SmI)0mh)Et?S3t5Vm= zt#y>weWOxZat|fN?np*vq<;Qe{hUVo2dYu6C1=JapG)1IO`JZG7G%94WSh)N&WdjK zNK{Xqv;Q_XpLOcz#F$S$dJ?$M$Z#2#wK-Hp7++%b&ZUa|J1q1 zrSWciN`F?-7+0=dvP#2~X`#D!gQV5AGh}FbIIioyGB~C{mI@iF=t;BazgPdmhTP9- zn!D^W7chdSGDgpCH!Yl=^Yfd|<{-VWWR@Ex15MS*Dhi6TmG^p-&zxBoD8B*`eXpqKtUod^+k5!hk1P3^dr7g! zm)WA_**>SKjyY`qasB?Y5-ZUK3eD?u?d;_!x*$)SvV)b)cli1=Uap}^rQS4T8Q!Ml zwtRX?oVGFDnDKZRs&sty2Q_7rcBRa>7a9H4PP|+P5dY2LOTfARPUvpcO7-mN)2|u< zkJ`KKloS=;TH8Givu?M$mT;#rG3=VvvM7UpX=YrdcKAS0)#LXwB~i!KCu`%BL{{g| zMmU?g=!sO%$;*}shS!g;{JgX1(ws^zQAENsHOBcKW>7sP``}4V~?1d43t+9pn>H zpZkn^LJ)^4$P^ zR^Krsz@_QxO1kEac8(4TQiOgRdRoloORxLIPo)Y-bJ1aJSgT$%5t?<mSd(r$@I#3e4Rb|^fSd;g6z+TMN`v%+6Um%n9@J_ zgZt~@s!G{A?8DZJ& z!;Ll$#*>dE=Cv=9M!&=hIL(b3)RhU}ta~4q-QJM=I!-m7gTx;B@ReInb&!j6MO3Q< z#k8$ieZXixpYozBDsW$!>!b6}UX2*p5^LpiVXKbGzVV`ayZ$lJ`^OkQq8OA9bWs#EW-CZcN zHuFDqfWf+c#-4vxyddS9^(JUfoW8`J zqT&1a(N`<=L8+P2&nORW7wOrN<`Qf=W7ciMNtdb(FAY;EJs~bi@0j-c>)Z-bjS=0d zCC2S9SuTYM5$Ma!Zb)ZL(4uYc)8o#SgSEGQx4Z4@>}1(RX$d~{p}Wg%V}D;?Q|z;f zwBFj-eW=D!&WlG!N2B-F?a*&m7O)#tyZZijdADC$x$^3e?Zoz$fS8_1@nVljN{VIb z*je+09VBICWzUgG#;?lpS7awEe+vb-W>(Kj4Xp2KcM0?I${`-1eE7G|X+}myQh$yM#Ztl#1`>0=I*l#6Ff5s@zIL*IPSXLBGHdIgv2S&@c?(^smP=}+m~BN{)zHw; zz1Ubz)Rv}~mBL!9lJst=#Fk@=x?u0<_|c->_1*Okx~pqMTn4Y^%(;kq(y#i>+wByv z{8_!QQWV0LlOy$fil>CWef4*el+|+mQa9V`w>c4-<%2G%Q697!Bb3f=rH9QHxsTtx z8DsfOS)s5EC(;gyobH+2G$O2Yqlwis5xnv6)$y+d1@~5YRewZEIxUQ5ZjlR_{OA%U zz0y$JZ5E|HGbl9Nlp3~!TPhZ?YW7azq^1hb&YXE&p|iewv-P7^R$S*77ABX{ADXu3 z+`Gn|t38;(^@KKiT56eE-5aAWR^}}h5@4!lH8nfV{ zsHTfhpqT9%=3~E&A8cWvJCW_Usy}R_XMd+mgpO6>+~vzMx_t9$zLT20A;-8v{VRPq z4jc%s*JUXv&`svIsk`OFDir9+=J?!kX7&5;U+e?*!c{NZd(QLmJ5Hy7T?7r*#vjGE z9kW=OTXL3_)l%2c2;p}nQ|4ArgL>QB79WfJ{c|IUp5Bj}71evW(#`Qo%xz<0Sx`@i zCp^p2bkwrL-FZx$4^N~QBvnG#eE4AX36K2(AKA>!&3)Wl$!^O5CxI~>mLE5)(U{Mf zU;Ztf2rQYTg=+PsGWZ4D!C>%=reW&NWyiYtFoB7gyi|x;MQk z9Ups+cK|{e2HS_Y1Q-~&#Dr&JxgL3WO)35#P%;0#K6-GIO%fxg@3Ut%e^tjS=%x1U z?E9&B4$#^P`{(w6z;oV_D>c1d=Z+eR2HG}U-$l(LxhRbo(5ooycD8GI`HCiw7kcTwwUeuE1E(drqSJd^@jwtCVTJh7R)f9i~^ zPx@%J&ofcZL!DhQmR6@CBiqu`)2+J-AHL!}E$jVqh%UIB)0bO4JlH5>Q%?`H+c)DH zc6s4aF1v-(o_Z)fZm~2sAH|37-j;6l*Zuv4y4a)~8r61rA?pHFo}H}|oa8gVuk-zP zs=t4`Z-=hb(6syrJfc>ttmRS!1!dDGjfdL~-mHDMLq|ua*n|=2d{Z#_qr;S;rprw2 zt+ti^D7P5LnZcTO*Wxb^ZDZi#!I!PaJ5G`!-Buh<$;i-t8Udkw=<90;i3WmohOy|S zJlWHyH9ngyP7gTD+Tc;#NHw`VShG<gP>N-noeKU3+)66MR*7b!FLk@;hhN>I!A^F8+O$QvLYKckLPc5G#Jj-JL|rS?Js2 z*_-wJh*}^%T(f2k@S)cEOP8|W_<4G+uYGqdg)cKBgE@|30$N6rd9eBA$$RUjhZ~>K z(C$pK>MoX`_pZd`H+H&2+UkXrC$tu+IX@SMPDwh=z5!Zs zF#mItzqk*yX3p(s=36>#maMW%%6WbVMcuT}i$U2%Be){ULtSJhASf$l;r2Rqvanz* zZE)Au(o$OY-@k9Zdi^@l*vESZ_fG3;Q2)gTviNyChqY;ETMRi z*uq2+OuQ9o(4KS5r0%Vn{f_Tj(#$A3ot+Oe*)o$A%YHlj(^gC25jOsz`a~nB7<;8% zv)*1rp}QX5m-3C*bvPNahLn`lC)38K-@ctQsd;O4se5*?_E7J@UM=@Z*irJ%+Jq*+{>Go9JaEuk{HjUc3vEatv}W_*;}fbq)i3w>G1T8 z)3W9U@=W~rZT)HOuIxfW0c@`GcXuASVcAu|`1&O?0Rqguyf;Xzsh*RQlX2(HVpI_kFo}eOgae$Mf{xQS zA%%x0CX3%0-jMg}_1T3^PqyJ9f<5J}Syd01bdx6TyDgH_3MBdR0}`w{PFvZHx{q>|kZB_+(tIlIy@fDZBi~%z_U%E`@ds4mxfbyYKa_{I$y3veDK| zs_~hb)WnMyFX{n>9^l~kno+Vjh+8=!PtR_+!QZ$#W&#fmi!`PW#(69?f7b3|WN5gi zV`RikOF74Rf!p^8xr-;<)tiT#yVRBA=euj%ltora$0xzT=L#NdQO$Lg92gjom6hFY zzl3r*SQAIxZ*IJTqu#NpT92kNEhvadee08O+6a2-B^WI$>3ON%UM+IrV%m2`Th9Bj zN{T>}XJuub9;hy93k(n6d;;5Z!{*IB9r^d1r+=NT{}eT4v|TAit`py}cHO#dyLQ<( zt}L|Ll?EQ6nxC##XhgNV9v={->G&|mg(6_pCF_*SENJ*MK|`E!tQp+xW_wO{!KB9s ziYYY?Kd$*otUL>#^@Yoqx8ABxh`v2g1^(0QdXn{p>+&Kg3k9&nwqB#frcx5!bTM?+ zVa2qUFd9mOaC@-i-3kf{bSz?pE_1CVt#<9@f6>sAc1hSLWw&!DW}VX2C39bYpTw7_ zmD{GX@D&F$>~1wp88%{LngyGvs3@`j+p?XeYL&Gne!un;n+_AVd!mbJ1tG(A{b+Qug# z(Xt{eu%HUxky*vpfaP=V>vn^Y=Abj>yKQL`UxoPql7P&AGO6{(AFKLgtRw}O*(@bZiXpmKS0L|7oB3tMM8R7)Z%_C3wo`qAvv8 zBsxM4B_UfDdfNTQcS;l&Nk%X#ta(L!kZ& zk~3GY1le7K$+&j?dK=s^0zvgWu=I9s%ypBFzy6^MJ26SxFde5BTn0@kf($F%TuA=t z>Fciw8~4gxx@4=uhNFl5v$yVpMrNSXST++I8(Y(7vr-U;y-h}yk(W>o#wR9To_@6R zy?RDf+h_X;UC;H8mdD&yUpp^M9u@n__b*w1!s6nl`tsnT_n=1ab)OlkXWYL1eqtiu zNOPJIOkIb%s3%WOSX%OvP#y_j(mqpMQd0f)3cIt5i*ZZ((TRx(8vA|}C10hrJ~&dX zUu<71#mZ-4LqM-mQ29_NL8%B4^b~G)es(SXIyirU7X$mSS#ol6779*bVPTR^!MerS zk&D1n#Gxg9xRFZSgng2dEEP0f@$vE5EZX?3pUhiB3H=GB96(D3d)d|1bu*ikL}e(e z>%5NC;%{~m942slrO9g+>gszLIpnlk(yb00Ja`mG4<)D&{lK<$EDolT{FLlPsM}pd zk3yu~q{5Dyy;6+600ZsG$}$D&?Qp$F4rNpv5UWFd7lEK^YOY$_*lgUeK^uR2R&c93 zaj4(CIUuz%uSWtZ9B5ACQ;=FXaOKLC7ON7LvM^yk7V$ez!on^B;;5#Xv!IUD#4Gz@ zdn+dE!T_)as(Q|=Ay&D_m$S|$)$zl1ZZx#4g}$)+4<0m?sAgCn>@M*$LLu{*Z5w*0>-8yHX}*^OzU z6v#f~xU{#}Wjud9PKK{bhV4+@d$lxQ&M4=n_-C?Z=c&5)ss$*4C*61Z!_{QXbXCuoc)-4A!VpHhBDW0hkoL&pAa4sG6^?(PCK z`wbg5>?4!E?$_qodGT&Zre#>&2Q^5?!iq{tFqqfk3JJ`Bzv~|n0nf~A*oBE#{TrHm z>5l;Jf!cT`C}137VvC`35kWAfFQaF#F=Gc@we-HlkFv@xA`&cUR3Y*{?ZyW@XAUhr z@Ow0Bhwn92K;?1DiIFa%hYoFkH1=LK#lGY2dJ^$}D!H!N%Zs!p?%X-9mS!HUnqnw> z_Uu&g9t-t}HO?nx^6Tq^06?BaM#`s})DCNrptT?VsX`{7&gWVagEO>O#L^v|WgO@D zqh1M})O-i^I=a2*a6G1j9)RQnYU}iT^M8LM)w?y*E(Q10up<2Y)vM35qaHn?h2X27 z{}&Cee49Inz_al1GG7+)n{8R5BrYy4qUaIlA~f^|9QMeePq=h(mh?x#=3a7WMfS46PHOrt7XM^(53#FeC5w24D5_yiU%g8Pg;2UdFp zZHcqJd-LvN8{ik6dAz#_o14JTsEzmU-xry_RUNYhTPQUuKRq+EI^9ao^my2^PaH@C zZV%&*9YuGk*QbMzB-+~r;bh}f8;p14V}Anq;wZ5Fx9$885|UYfUl>FMj+ zX)8)5EB9_^yW}s<2}MvZ_YCwzV=QQwGlfr^G(A1y!~z=6QXwFt9R@>8Wvo5Z+!Z; z(oe6)+iw28nY;2@+xp(g#OQ6iDQ&0kdLAEM$*Kq$JQP4QFmj}ErCT%^Q8Xo-!j?LiKXbx^uZ>J!Qd#e=AV z{SkJV1u``Ip#Gw2&cA4Z+k zpXe&8SI-4zf1$G02hMg|mcwQivFCl|Vbw`GGR1yu3b5W2jV0{t>~!_?2HJC_u@+E( z-9W8G?Qf>Yo;jl!Bgd?(t4nAHIXO8HMjpO>`*zI;yzG-u=Z*px!EIAO*Y|q#i2cBU zo=_7el#u@wCz3NdKby7x<)_g5idRO~J4DxN3!;POQvZBvuq$vwF!;>xlx+Nbk{Vfi zG`*V+60Js!0oaeC`9pUqD6-sx+wf&Bc?N!hq6mU;KccO6u3rkA&h`KT`7+vLw zTu*H|*>k?HBBB&WhwIwA?SKzHdqtn3-Ls zUyi?igmMcQdPA|fK~6u66gaHMaKGzDxsxZ+9+JafF+Rx7@d%@j={gHjEi?N=!n`*cc{CRFMyp|)ha-C z&$*R-E2URkbe6G?1ICsY78ezBoE@sFtK+VJ2wkS_sEJdmzZ&Fq&Z>Jm)xSFs*noQQ z>Hi#vVryGl18g%Gb${V^g`+u7tx(3qTQ*y!E@yoCBH%o4xsIMy?$oI@#>U13EUJhQ z$G#6gC2EK#)W2Oxf9E3)hpE1!w|`#_6}FJad1RJ$mB8=GjhT2r$8rH$;x19^18&PR zOep$>O`nW!kG6=mQy%&Fyg|y1K(|n`0F?)7;u!ICJ?^xS$rWYRJVWEQ8Ubx-e8?3I z?$kVe8l5iW$&;;gdqpnSM7LNrf40akiM75Gw4Yq$qa^455bE-kzp2Z?HfyMbk6tsIO(S459@ae&4_G*Q@u z5G23~qhwb9Lto>Nl4{f8adUG+ACo&G1yj-}5|M_Pe6Lo49jTC)ET%8xJ19?=xzB&IaL9EZ?f2IM$X3%yz%Z1zZ0f>;6 zL#AkhlbXK%0l+Sv8=t%i3uPrFBzB42{(Y@vJA>6a`H8&bcwnv#V8Rj;g^a{W2KLoS ziEt@<42lY^L{Jgj$pA1N;@9rM1O8UeJmfwVV)#3kWdKx?^W&)cYdYWp~ZEvVVE z)+AcSlMY1U7f{`)Q>QHL?9!t0y}U%kv15Q#*AV&&NpbNoVE3x`s)8_S z&p>LOuXJ0HxqbT>O8#>`t;p%=+gPYUdmqkW4~}k7Ykxp-S!wOpLEX$dBV9mO><14P zN$r?zG>X!w4~8Pb7@Pi0>)#sPzn$yGw#cVXPk}0{Kx2Y*#iRDw2Z{g{6s8|wLd+8O z{2MoJd=nj=Y~Cs+W;a?EE^5P@S;_r4Eb^rzr=052+U+Mo#&x zgriU(IZ*ficKD$xoSNz@4?*PwCBsv_`SXuL`|8zA@LzGe(c9@VJOTnwA)_!dG8O=Q zRbm+%>FIO3B2<<4OzCQBYRW~31;9cUwC?#9&-x5%J#e?d_ooM2+*X$XwzaH-Zk)s( z%m^XcUInG@t#i}A)&}c>|EPjkK`bU$oc(Wz$%m7*pFVpwF+H87AMu|({VN|Sl<@-k zIE~EXNFe0!9yziFnv>`Hh;p?2bz63Kba%_(@vGp;<=n#ND@MCSKV#Us^#l_ALfOK2 zwA|Q2@uH5?hoI!YREUy-`q$Op-#=~|fZhfklb3GQeeS{qU04Tlp~nV3R@!Z(rDccy zf}Yw?fAGM8%ek&Dke#Vcn40n=X3y?Edi1DiL(*NSY*m?d7IleQQDa|H{sXwJpJ7F7 zHx2Ld|E_Fr`MAZR(k>kjb#{j8}+qOMT z{9<-|4~SDydwcHBHd+X7r;|nQ#i?fqz=o+av9}Hd2B;=~!N&9MUyQ0BV~yeTqAg%B?Q@ zCjIbEBYqMs6K@X;b^}xch;Wb4*ce$@%q+B047WhOvTi8WO;*2?1!oL9Kt@q<+a6)_ z17O#XoitK?xgT?pt+}nd1^?xw8*ABh7R?S1n-Upb;0G^X-@eDfZAn^%bAUCVFmGaG zl|I}MqA=wl(88Ok0LBSobrv@ZXAzk1ds|VzY&xz2ExVc40QLu1KW>aQg_DM%D;NhhKSm5pc5^;Q^mcq@#YeERP;5= zVG4cVP(BB(e+|LcE#>;~cvktMi#bvqtfab=|+uf~@or#W*HwhdwUwY#lK zKHe=v$Y&5Vr@nJWHKbK4M3p}D^NYRm`V658Kv-AY|DT~0RqZuMHZf6%PoW-rfAbW2Q?2?FDV!1jxTtij04 z{2g%x+M0gde@J$h9RzXUU}Uv)4g_LH0^?i(zjuC|pAl=#tCbUe@M0jpan*sZU%!6) z@#Bkr3-ZEB0PUxojZVv!S%&uK?-jqZIjr2!ZCn|LrL(gWh}{z_|Lfkp1@K&WFR3nJ zIP@v#IXF~-iBe1{H$DKjPaCvnyd4lnhZlsxCf@1@K z_pN?c|E=aM2SG61St-J7QqQmkf+YO}+igm-sC1{I-ZYb4JEbjKxHfj-m;s(S(a5nL zv`}5NC}13sY2&*0AqCdw&TW9gN;7KH_HR{%mpzGfoJlD+CJfKY#_CkoRA<7v(0w`i97kznT0m zc*2&+y!xZTMfoVHOIRg5WkH;m@DuPFsA3!G=wh&klv~co_84|< zr%C~QAtYEuMaALVbZN?P%Ed)++ex&Z<{%hm<ou}7Rg#7HCktY8qPxA0b2imeJJ1Bs~a^YR%Ty%D*v^<(w z!I0T!(C*2-U#IGf!7s#Uq^W&Y~5(kK5BLJ>Y|KDaC9?=NoRxVARsm60;qYh2$uci!y3O8A($@kEA@_K*Pe$ zhkg|eT>=MGOCSMkzRY-(ocVOhPKO29_se37&%ah4@o?rH9IdB0$Q&X?%w-=;KmvGh zI>3pr3Bz9To|S!bVmrTZGK6I!q}`HX!-Xrl62wkc+*bspFTpS78?ignAN}Vl!xy!QS+**%Yqe#9 z&6qX*m3Gz@rKiF4IOSdjs>fM0Z4#ufPXDv4kf-kA_N_@WZ4?l@Gpur;2tC2xrVYl4OQf~~vg@f8f=qw$?hyC{E=) zfC^YwLqCDqq+xyj2tKN3{>|#4*LEZPRuc7kx_V&0ZQ`=~RIb0=;pQoDpK3;pnq`drj> zWCy?6XH%{}G7+=<)Rm)Ta+mslnv(z5CSYY>N(eYK-;wlIk(J%M<3e7|`zvYu5B$lm z-1d2SZA7Bw|NLC-zfYw7^V-{g+j#H)UB>@6W7PlmKL7vvKIf@bCX-04b;NrC{ww45 z3#+rE(ud!Pt#;4b%)eX{D7x<(DgNo*UlZvuT;!EJt+3RX_>j<8#p+|izkV+HGygDr z7$0~uI{Nt=L)Nqulaj(`7oKc1sB7Xi8N9IVubZI{{yHSsE`7bP^w8lA%DbE;D?)7g z+9(-Ol*omGps331va_+N~ zc_R~3eJI?A!54?u`@lb9;@f%c&zG`P?q@n>|Ld1xjbtj8UB5WK^KTw)8H+{xdp{r` z`-bkFb>6X?9d{un)+9RAD*3k@=Tzuhg9|C#8q-c&(eUo|Yn%QG=!0K1wv4@WU0w%= zMEPu*VmUZUVbP=0;gsdg+T976yK8TsCo7)4rj|$AzC+_h()gO9q9T2Q*K zu>w|BO(6|muNs}&bp1&Sq=rEU8CzNhJG)-xUoq29y^(P{BUmtYD!J)>i_4s(kj7K5 znk%*2_>C$f@>5RA>=rgxl)U!c%xdwr)M+NZL;AQ;*H{hJdA_)ZJ<9xAv@xVShlnC~ ze)R}NkcN0HWec?ZJ9y>GTGBV3K8?*0=X#AU7;;oJ^k>;zYI0hEnwzg{IUvwy>?RFkXZMHGvTwv{zPsaf1DVL@8;oHNgy#G?h^CRef&f*~V z7rU|1pD{09xMLYjX<*YAARdSy`3dcpuny;3Y!65DeQ8s&Mv_Snh6q7d-o(U+`P@DR zww0=iD^R4DoZbqehf!B1iRqs*_6`n>eg*~x$#6L+v*5Avva)N5gcvNW{$FR=4B%?q z_wbnb#_lJQl_($m`pHMX8$s6`wQeE}fvDDt7Gk~Z2o^$!X&tw3bbEV=gAvMFj!szo zr4WJMn6Y@JfkSVGYm^;+g!NT#I3sI9WRSmnEh$;=4kZ?4$UKf-S~}Mx;eza&#Y5UA z=Z5M&guuCV#fTVhf>2d7h@1>p<~ttddBq;p@7+J zOjI9EWnhSlhq~=J{aeQ^%HLndEf?8WZ*OnXxr-NVMEb)la;RQFe^~0IcS|=z?DN|y zcogAPCu&NP;4zL+N*`P>G~~!#S>z@$@o9eIJE?v=TvoPc)(UiKdisEb#NLG6`RbA; zjo@h{>7{XM6kyA1c|EK9-cQD@4ja z;~F1s800o;i49T>Q%DE`jwDufU@HH1bW?y44z%$5+}qD5i9rvXt|n?j=*9s{9I~<| z(y^O@s~FBZI*Or`MpSqH+_4H#IekKiI9*8Pj(1yK zA@QhwypM9CnYMxg>vRcXfFXpA7chR~UWXsnMi7@jL~i@eoz@GJ1`vPlV_;96`MYH= zhgh#fr23a^#42GYlayJ_M(aN8LFa$-=FQc28gYc5jw)w`SK8R1U!z~ZjI3YY9R2#w zr|~JMpc`muGtDV!ZH|wiu0D&3vS??8vs-Ydu^YS6Ly5)*Y8m{FWQ(APHMCo{9OUQ! znd4%cCl@8ff`|a|xKON)-1xK)8Vj4-5(AV2%67HW%>l6Fiy$KhX}L1H6Ja?#{vp=~ zRlk0~H`x0*u^$mtag-NiW{PqmLPH0WG-lJ$B|5KC65s~Ssy7RgykDoJi~XG*`=b11tNq}5OC#Eqm!rs&AN3>t1+IN)|O!x zB&qNq)t-H-nYf&RxxWPKqblRz<(Q7%YW%Wz_+0@eJ8|ycKx!n^du#%{Nhl?h_mPaJ zTVcEO+ZYToi4_l=;jb7DF^b#|v0)|c7#}7JF9jVS>+Yf{Gt*6JBm(3?d|E_=5EfSz z!k?kM7iA0i<)=IYD=PE_M3-cJyv}LFG7#^?`sdIE0?9Z&Yfq_C?Ozsy!Mm& z$W~caR%m*>{^sL=PSY80ud9L8OIOR##o!riM(trm2$RsR{}|hi_87mo^(8CpM_Jhc z0fET}7ZDPuIf#Pm;NW1|{P}T|>*7Xa{$@+ zae4AYyL}Fx{se3fswbhL7jS^_e28KJd}KY;o^HkN@9$5-NFM}rtxiY0Cg68NGCSa$zO8#&+fkK{f~R1_k7)_K7l?+|M8qsGbk31bl^S_vXx%m}q% zi>_U}7Sq-}*0&td%NI~{sW3$)4H-WEa`wZA4~YmAlBQUAKI(2TgiLr9t^v793=FSD z%e@03L%~w{h+6DA-?={YxY-X{zO1~dN@>6E`XAf78?v2*0ktd-ZU$~Ti8l-#Ja`a> z;m4c5$dnChJ7B);LqT?1nToPBi0eJ7S3KVHOaXCm82}H$LBqV|%QtWCL)?7w^yy!S zZ{oD-Kp;b4_R7_(_sb38mA!6ROw3ttlR~7AVUG~w1$3p-#OTVNJr^Av9aCM>Zv0Y| z_379?r=9*W@{hX?%#@LlLAb3rb8y|55p^}TVA{4#*KG``k&`E>NC2alP6&kzFFM_v zVx$nrr)Ay_KTQ}7PXfVy+|4A%8IwE14f$}&E?&99fRF&>-A(Q=Z~<#iW0?c>iEJoY z0W0dl?}VkLqj1g}V>e`c9R65-J$jW9UhYm{QG*2vMNsGKT7;E>W#7x>1mKG+BU-k%E!ouQE;(2*_LnL%`^#*oKEdUEw_*Z`Q4u1@+>9+BB+kMo5A%xrnohtlBu7HE7Iy{Dx)0n`RJl{XxVy5sSo@?#7$q-Xl;54{IwUqaN{o zol}?vnTJ<0@ay$@5>SY~p&_CN42a#Vfs?tO;2iit!cvDf&`AA4;!^0be0>38s-hxN zQthQ9r$VG0(i?;;jA#e$9Nuly#UIT{R#X!$+OCRC*6`7QHpQsY5UE1-bj!OP9op!_ z#V9n~EtQDuATMHsI23`0wrx8FeH|mgwm0iz71)lOHfXcu*TAI5=|$w&rLYF<0ALeI z;!a#O?99#w3U&+g^GVwIYyRfH5>Wu*4|a(215IyZW2=N946g~vw}$;&fpWQH9lYgy zUdO_G*dTuti2CmViGP}{sUH*+WK3yPuQpKchI@nXIO_`-GS8nsuepuLv2gEp={pXw z;z0Jq;19mz1+EK4q7HnVEFA4_wFVjNuZAhVpk^OA&Ow$h;EMSsASg(5C*Z43x9aKO zbT7`0DagzFF3;Ci-@vRQa#AAUs}m(`jC=RW;kgjgIGC$AcB{?@?;e;MNoyAiUnN4l zh~l77T)=k3p8FD$06iamf*0Oy1`kdrKe_5wf@(@}&Sc*V5sHDA-ZeI+fTZm?dHK(5 z7v<#MKwKc9r#5W0^nT$$}pDFgBWkTTAB)Xy<*fz>-MHCx| z$U}uoyG0TqpBxt_!n*XF<;$5T6Y-07=cz5o^+*sC3t0Ya_dhCs2?e429v&XVFdIA- zK@eB#p$q5E5w-x_3?fem<$o621c;wf-lf`B5^ z^9)wQ)xjkURBhe5H4jGsl|_LF17lEyNLnF-S@v=nfsQ{Qmf(7L>)Sp!F&LcEPQ5|Q zePG(`0N|cG?0{|CwjutTnnEpJY+JXIFp@uGX=Rn1D33&~3yKd*)0s18 z#7ylFlSE{WgcQoR%1R@+80i_ytI9VCZ+36JMW$x@^I2jt7qG4;3DhNWcbu13waq*C z3=HHZ(s@s^ZfQ%_TaQS&WrMPY(4b)sk;}?hZ^I5sexKWKDo_m7FJMs)Y^R|Op2i2Y zRSV;rkBa^RY{Luwpb9jstU1KXn=mefh$w$pIh-i*;dVrH(I(;)K|O@Z>%bI;Hape5fhG41j@sEIRJT}ZJdQQj{S+G>P#S##&JjFa+$)Duf1rs?frkCu5uCS>k+w1{WHVx zPl}9IXV;b?$UoDpi9zm076!cDL`WBfKnN3U-&lHmH|!$W+0BLWo|NtJ?b=TDEF|P% zqiK#|l%Jp9vJ37!m`W@v3<5z!q96Mu!B}k&1p&48I9mBczw~MdOnT21^V`{qh)5EV zq(?=kU_Ro52hM+j#+-HcsM75x$OQT$?iTtR?hC)|;8g^1Z7wwvqgfDT{=~EZCh@W< zgaQM;XrgEnryFqzcwr9^&qXcH!0*9Uh$~j$Aa{ii%H^RlZe?OROQiOR#5kmf`cIk8 z3j##IZJ;VzVrjg9M9}OGgf^B&EZpLMrUF_|^;Z%(Ma<3T2V4_EQVNIf8uG0*(e6|m zHf~JLC1OP{UUY;W$8IIuxO$0eJDHhPJBNtKKvYyEgdIy8%4*_IlT_W5YsSkE&%|EK z)A)SXe`nbofA0k_Mpb?D-_A&SFJ9U?C=i?ey&b7_l6<6ual0KHcC|t7efx-!oD{S@ z&t)ytG>=51WR>yR**>fmc6qZF3A8?qh#6}jX8dobp&Kv|6vgAuX;>s;#$WGmBmxt_ z_}0S>M?pLK$NBTh6Z+Aq|8^pX6aq4<#4D~a#jS!YbE@;dq>MS9Jw#HJ2%r$bSag+h z2)1EXu;$2&Fg^(sOiVx!^-Dq`9Oao9z}ci_@ekTzF#cyk`4ck!BgnJ{RFs$ZXH2E52&>#kiJFvvD*OUb$cjx{ke zLz7ooS=reDlCfdS78>oovJm9mzq;}qJ<5O)M=Weh9t4{bkY4kqSj4U0GXB}fm|jD$ z?G=;;B7;n*9RIN!m89PIP`~z!aeB-9${+vkOy=cipqC;3g{)!+-j-pAUxdrPwzwN5 z@=65Y1g0aVFbqKqx}o|r3+QhEww>+9&^y+!j;8Sv?9^5NtsG(s;GPe@*6ay&cB{o zV&d4f0xwb1@_zIv(W!jTjA~??MlkKXKd-mN$JlqNY~8bI@~Y4Li4Q^w6(~ ziI?HJ=!#rsIJmhho>A@Z7K<$< z_bfZ!s?7V2`JumS!?NCZK~Z|)xr{4&gr#&VLA|FV2Xj3F0Wf);^(6Lpz6}Hd;_A%k z@b_Ly&fd79zE4}yi3NPd7r_O8h9i+z^~IaCC%a~Q3BCOr7z#ipJBU7`{B1Zu-Q&Y- zB)e&&3=M=aa6ChFC6!fG%hhWCfn&G8{$>6MYYUSMtdZ7@P#u$=u|6y{LOjRXOiYzG8W&$H4x{u}$6EceLmGy^P8f4NaHh}}W!tAOaek_}}$9H`U6 zJphvSsqq{arh;T2FapQ}Sndd6%uExtPWNQ!IfU`h-Rf&r6zDf1$t)rm8y9?MCqKtx zIg;=d6Bcdl_m`xOqRoUQipCo#BXs#uwGDc30oP>ygEwUXQlxiLWr>EM0@nB5@lvnqm!i^d;UG%sOo5Dx@_v7NpJ+2T7~ zWcY4om)QAr#mzFKF=W;NjTzgL*?`MjtL>jtyUUr})(>aef<4XG8H2B=EUPv?Dz%>f E17lnVcmMzZ literal 27611 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 Y!gG~smGfU)lJG}=myvdkmh~Th1B&b-y8r+H From b8ca16d871c19a62e51c614b3fc859e309a1e21d Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 21:20:24 +0000 Subject: [PATCH 39/43] Update UI snapshots for `chromium` (1) --- .../exporter-exporter--dashboard--light.png | Bin 24372 -> 27611 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/exporter-exporter--dashboard--light.png b/frontend/__snapshots__/exporter-exporter--dashboard--light.png index e682dc216ddd3e400d98e145f68dbb877393f521..5f5193940aa4455a79650929971c87ff0156cf53 100644 GIT binary patch literal 27611 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 Y!gG~smGfU)lJG}=myvdkmh~Th1B&b-y8r+H literal 24372 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 E17lnVcmMzZ From 703af1b0f8cb9a05aa8cbfc6af8ab3f432d328be Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 14:15:27 +0000 Subject: [PATCH 40/43] Update query snapshots --- .../test/__snapshots__/test_funnel_correlation.ambr | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index 31b7269decbf6..5019f0f57f7b7 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -401,6 +401,7 @@ FROM events AS e INNER JOIN (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) @@ -415,7 +416,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -543,6 +544,7 @@ FROM events AS e INNER JOIN (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) @@ -557,7 +559,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -685,6 +687,7 @@ FROM events AS e INNER JOIN (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) @@ -699,7 +702,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -827,6 +830,7 @@ FROM events AS e INNER JOIN (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) @@ -841,7 +845,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, From 90d32e11272cbc75688e516ac5e399b349340191 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 14:25:05 +0000 Subject: [PATCH 41/43] Update UI snapshots for `chromium` (2) --- ...d-query-execution-time-too-long--light.png | Bin 92823 -> 81696 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights-error-empty-states--estimated-query-execution-time-too-long--light.png b/frontend/__snapshots__/scenes-app-insights-error-empty-states--estimated-query-execution-time-too-long--light.png index e89baf38d60b1397cd0bb04085852c4ec5f93aa6..85e97d00c266202f6c09a8b996343cfc87c6fe49 100644 GIT binary patch delta 48168 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≦iDdiwQmEl{b?Vk3L|MS$zAh3z-GzM?8=upa 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 FzW^0zUXcI* From 40634e9aeb0502f765dbb59311d2d7bd1d20e8e9 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 14:25:44 +0000 Subject: [PATCH 42/43] Update query snapshots --- .../__snapshots__/test_funnel_correlations_persons.ambr | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr index c9df955f5a685..fe7404ea9b7a1 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr @@ -440,6 +440,7 @@ FROM events AS e INNER JOIN (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) @@ -454,7 +455,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -582,6 +583,7 @@ FROM events AS e INNER JOIN (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) @@ -596,7 +598,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -724,6 +726,7 @@ FROM events AS e INNER JOIN (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) @@ -738,7 +741,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.person_id, e__pdi__person.id) + HAVING ifNull(equals(argMax(person.is_deleted, person.version), 0), 0))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, From ad20a91a418c03b7fa43abaaa1c1d906531ee822 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 14:34:36 +0000 Subject: [PATCH 43/43] Update UI snapshots for `chromium` (2) --- ...d-query-execution-time-too-long--light.png | Bin 81696 -> 92823 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights-error-empty-states--estimated-query-execution-time-too-long--light.png b/frontend/__snapshots__/scenes-app-insights-error-empty-states--estimated-query-execution-time-too-long--light.png index 85e97d00c266202f6c09a8b996343cfc87c6fe49..e89baf38d60b1397cd0bb04085852c4ec5f93aa6 100644 GIT binary patch delta 59382 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 FzW^0zUXcI* delta 48168 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≦iDdiwQmEl{b?Vk3L|MS$zAh3z-GzM?8=upa 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