def test_groups_aggregating(self): self._create_groups_and_events() filter = RetentionFilter( data={ "date_to": self._date(10, month=1, hour=0), "period": "Week", "total_intervals": 7, "aggregation_group_type_index": 0, }, team=self.team, ) result = ClickhouseRetention().run(filter, self.team) self.assertEqual( self.pluck(result, "values", "count"), [ [2, 2, 1, 2, 2, 0, 1], [2, 1, 2, 2, 0, 1], [1, 1, 1, 0, 0], [2, 2, 0, 1], [2, 0, 1], [0, 0], [1], ], ) actor_result = ClickhouseRetention().actors( filter.with_data({"selected_interval": 0}), self.team) assert [actor["id"] for actor in actor_result] == ["org:5", "org:6"] filter = RetentionFilter( data={ "date_to": self._date(10, month=1, hour=0), "period": "Week", "total_intervals": 7, "aggregation_group_type_index": 1, }, team=self.team, ) result = ClickhouseRetention().run(filter, self.team) self.assertEqual( self.pluck(result, "values", "count"), [ [1, 0, 0, 1, 0, 0, 1], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 1], [0, 0, 0], [0, 0], [1], ], )
def build_returning_event_query( filter: RetentionFilter, team: Team, aggregate_users_by_distinct_id: Optional[bool] = None): returning_event_query_templated, returning_event_params = RetentionEventsQuery( filter=filter.with_data({ "breakdowns": [] }), # Avoid pulling in breakdown values from returning event query team=team, event_query_type=RetentionQueryType.RETURNING, aggregate_users_by_distinct_id=aggregate_users_by_distinct_id, ).get_query() query = substitute_params(returning_event_query_templated, returning_event_params) return query
def test_groups_in_period(self): self._create_groups_and_events() filter = RetentionFilter( data={ "date_to": self._date(10, month=1, hour=0), "period": "Week", "total_intervals": 7, "aggregation_group_type_index": 0, }, team=self.team, ) actor_result = ClickhouseRetention().actors_in_period( filter.with_data({"selected_interval": 0}), self.team) self.assertTrue(actor_result[0]["person"]["id"] == "org:6") self.assertEqual(actor_result[0]["appearances"], [1, 1, 0, 1, 1, 0, 1]) self.assertTrue(actor_result[1]["person"]["id"] == "org:5") self.assertEqual(actor_result[1]["appearances"], [1, 1, 1, 1, 1, 0, 0])