def _event_types_lookml()

in generator/views/funnel_analysis_view.py [0:0]


    def _event_types_lookml(self) -> List[Dict[str, Any]]:
        events = (
            [
                {
                    "name": "event_types",
                    "derived_table": {
                        "sql": dedent(
                            f"""
                            SELECT
                              mozfun.event_analysis.aggregate_match_strings(
                                ARRAY_AGG(
                                  DISTINCT
                                  {{% if _filters['property_value'] -%}}
                                    mozfun.event_analysis.event_property_value_to_match_string(
                                      et.index,
                                      properties.index,
                                      property_value.value
                                    )
                                  {{% elsif _filters['property_name'] -%}}
                                    mozfun.event_analysis.event_property_index_to_match_string(
                                      et.index,
                                      properties.index
                                    )
                                  {{% else -%}}
                                    mozfun.event_analysis.event_index_to_match_string(et.index)
                                  {{% endif -%}}
                                  IGNORE NULLS
                                )
                              ) AS match_string
                            FROM
                              {self.tables[0]['event_types']} AS et
                            LEFT JOIN
                              UNNEST(COALESCE(event_properties, [])) AS properties
                            LEFT JOIN
                              UNNEST(properties.value) AS property_value
                            WHERE
                              {{% condition category %}} category {{% endcondition %}}
                              AND {{% condition event %}} event {{% endcondition %}}
                              AND {{% condition property_name %}} properties.key {{% endcondition %}}
                              AND {{% condition property_value %}} property_value.key {{% endcondition %}}
                            """
                        ),
                    },
                    "filters": [
                        {
                            "name": "category",
                            "description": "The event category, as defined in metrics.yaml.",
                            "type": "string",
                            "suggest_explore": "event_names",
                            "suggest_dimension": "event_names.category",
                            "suggest_persist_for": DEFAULT_MAX_SUGGEST_PERSIST_FOR,
                        },
                        {
                            "name": "event",
                            "description": "The event name.",
                            "type": "string",
                            "suggest_explore": "event_names",
                            "suggest_dimension": "event_names.event",
                            "suggest_persist_for": DEFAULT_MAX_SUGGEST_PERSIST_FOR,
                        },
                        {
                            "name": "property_name",
                            "description": "The event property name.",
                            "type": "string",
                            "suggest_explore": "event_names",
                            "suggest_dimension": "event_names.property_name",
                            "suggest_persist_for": DEFAULT_MAX_SUGGEST_PERSIST_FOR,
                        },
                        {
                            "name": "property_value",
                            "description": "The event property value.",
                            "type": "string",
                            "suggest_explore": "event_names",
                            "suggest_dimension": "event_names.property_value",
                            "suggest_persist_for": DEFAULT_MAX_SUGGEST_PERSIST_FOR,
                        },
                    ],
                    "dimensions": [
                        {
                            "name": "match_string",
                            "hidden": "yes",
                            "sql": "${TABLE}.match_string",
                        }
                    ],
                }
            ]
            + [
                {
                    "name": f"step_{n}",
                    "extends": ["event_types"],
                }
                for n in range(1, self.n_events() + 1)
            ]
            + [
                {
                    "name": "event_names",
                    "derived_table": {
                        "sql": (
                            "SELECT category, "
                            "  event, "
                            "  property.key AS property_name, "
                            "  property_value.key AS property_value, "
                            "  property_value.index as property_index "
                            f"FROM {self.tables[0]['event_types']} "
                            "LEFT JOIN UNNEST(event_properties) AS property "
                            "LEFT JOIN UNNEST(property.value) AS property_value "
                        )
                    },
                    "dimensions": [
                        {
                            "name": "category",
                            "type": "string",
                            "sql": "${TABLE}.category",
                        },
                        {
                            "name": "event",
                            "type": "string",
                            "sql": "${TABLE}.event",
                        },
                        {
                            "name": "property_name",
                            "type": "string",
                            "sql": "${TABLE}.property_name",
                        },
                        {
                            "name": "property_value",
                            "type": "string",
                            "sql": "${TABLE}.property_value",
                        },
                    ],
                }
            ]
        )

        return events