Example #1
0
def format_filter_query(cohort: Cohort) -> str:
    filters = []
    for group in cohort.groups:
        if group.get("action_id"):
            action = Action.objects.get(pk=group["action_id"], team_id=cohort.team.pk)
            table_name = format_action_table_name(action)
            filters.append("(" + FILTER_EVENT_DISTINCT_ID_BY_ACTION_SQL.format(table_name=table_name) + ")")
        elif group.get("properties"):
            filter = Filter(data=group)
            prop_filter = filter.format_ch(team_id=cohort.team.pk)
            filters.append("(" + PERSON_PROPERTY_FILTER_SQL.format(filters=prop_filter) + ")")

    separator = " OR person_id IN "
    joined_filter = separator.join(filters)
    person_id_query = CALCULATE_COHORT_PEOPLE_SQL.format(query=joined_filter)
    return person_id_query
Example #2
0
def format_filter_query(cohort: Cohort) -> Tuple[str, Dict]:
    filters = []
    params: Dict[str, Any] = {}
    for group in cohort.groups:
        if group.get("action_id"):
            action = Action.objects.get(pk=group["action_id"], team_id=cohort.team.pk)
            action_filter_query, action_params = format_action_filter(action)
            extract_person = "SELECT distinct_id FROM events WHERE uuid IN ({query})".format(query=action_filter_query)
            params = {**params, **action_params}
            filters.append("(" + extract_person + ")")
        elif group.get("properties"):
            filter = Filter(data=group)
            prop_filter = filter.format_ch(team_id=cohort.team.pk)
            extract_distinct_id = "SELECT distinct_id FROM person_distinct_id WHERE person_id IN ({query})".format(
                query=PERSON_PROPERTY_FILTER_SQL.format(filters=prop_filter)
            )
            filters.append("(" + extract_distinct_id + ")")

    separator = " OR distinct_id IN "
    joined_filter = separator.join(filters)
    person_id_query = CALCULATE_COHORT_PEOPLE_SQL.format(query=joined_filter)
    return person_id_query, params