Example #1
0
    def _breakdown_person_params(self, aggregate_operation: str,
                                 entity: Entity, filter: Filter, team_id: int):
        values_arr = get_breakdown_person_prop_values(filter, entity,
                                                      aggregate_operation,
                                                      team_id)
        breakdown_filter_params = {
            "latest_person_sql": GET_LATEST_PERSON_SQL.format(query=""),
        }
        params = {
            "values": values_arr,
        }

        return (
            params,
            BREAKDOWN_PERSON_PROP_JOIN_SQL,
            breakdown_filter_params,
            "value",
        )
Example #2
0
    def test_breakdown_person_props(self):
        p1 = Person.objects.create(team_id=self.team.pk, distinct_ids=["p1"], properties={"$browser": "test"})
        _create_event(
            team=self.team,
            event="$pageview",
            distinct_id="p1",
            timestamp="2020-01-02T12:00:00Z",
            properties={"key": "val"},
        )

        self.team.test_account_filters = [
            {"key": "email", "type": "person", "value": "posthog.com", "operator": "not_icontains"},
            {
                "key": "$host",
                "type": "event",
                "value": ["127.0.0.1:3000", "127.0.0.1:5000", "localhost:5000", "localhost:8000"],
                "operator": "is_not",
            },
            {"key": "distinct_id", "type": "event", "value": "posthog.com", "operator": "not_icontains"},
        ]
        self.team.save()
        with freeze_time("2020-01-04T13:01:01Z"):
            filter = Filter(
                data={
                    "insight": "FUNNELS",
                    "properties": [],
                    "filter_test_accounts": True,
                    "events": [{"id": "$pageview", "name": "$pageview", "type": "events", "order": 0}],
                    "actions": [],
                    "funnel_viz_type": "steps",
                    "display": "FunnelViz",
                    "interval": "day",
                    "breakdown": "$browser",
                    "breakdown_type": "person",
                    "date_from": "-14d",
                    "funnel_window_days": 14,
                }
            )
            res = get_breakdown_person_prop_values(
                filter, Entity({"id": "$pageview", "type": "events"}), "count(*)", self.team.pk, 5
            )
            self.assertEqual(res, ["test"])
Example #3
0
    def _get_breakdown_conditions(self) -> str:
        if self._filter.breakdown:
            limit = 5
            first_entity = next(x for x in self._filter.entities
                                if x.order == 0)
            if not first_entity:
                ValidationError("An entity with order 0 was not provided")
            values = []
            if self._filter.breakdown_type == "person":
                values = get_breakdown_person_prop_values(
                    self._filter, first_entity, "count(*)", self._team.pk,
                    limit)
            elif self._filter.breakdown_type == "event":
                values = get_breakdown_event_prop_values(
                    self._filter, first_entity, "count(*)", self._team.pk,
                    limit)
            self.params.update({"breakdown_values": values})

            return "prop IN %(breakdown_values)s"
        else:
            return ""