Ratio metrics
Ratio allows you to create a ratio between two metrics. You simply specify a numerator and a denominator metric. Additionally, you can apply a dimensional filter to both the numerator and denominator using a constraint string when computing the metric.
The parameters, description, and type for ratio metrics are:
| Parameter | Description | Type | 
|---|---|---|
| name | The name of the metric. | Required | 
| description | The description of the metric. | Optional | 
| type | The type of the metric (cumulative, derived, ratio, or simple). | Required | 
| label | Required string that defines the display value in downstream tools. Accepts plain text, spaces, and quotes (such as orders_totalor"orders_total"). | Required | 
| type_params | The type parameters of the metric. | Required | 
| numerator | The name of the metric used for the numerator, or structure of properties. | Required | 
| denominator | The name of the metric used for the denominator, or structure of properties. | Required | 
| filter | Optional filter for the numerator or denominator. | Optional | 
| alias | Optional alias for the numerator or denominator. | Optional | 
The following displays the complete specification for ratio metrics, along with an example.
metrics:
  - name: The metric name # Required
    description: the metric description # Optional
    type: ratio # Required
    label: String that defines the display value in downstream tools. (such as orders_total or "orders_total") #Required
    type_params: # Required
      numerator: The name of the metric used for the numerator, or structure of properties # Required
        name: Name of metric used for the numerator # Required
        filter: Filter for the numerator # Optional
        alias: Alias for the numerator # Optional
      denominator: The name of the metric used for the denominator, or structure of properties # Required
        name: Name of metric used for the denominator # Required
        filter: Filter for the denominator # Optional
        alias: Alias for the denominator # Optional
For advanced data modeling, you can use fill_nulls_with and join_to_timespine to set null metric values to zero, ensuring numeric values for every data row.
Ratio metrics example
metrics:
  - name: food_order_pct
    description: "The food order count as a ratio of the total order count"
    label: Food order ratio
    type: ratio
    type_params: 
      numerator: food_orders
      denominator: orders
Ratio metrics using different semantic models
The system will simplify and turn the numerator and denominator into a ratio metric from different semantic models by computing their values in sub-queries. It will then join the result set based on common dimensions to calculate the final ratio. Here's an example of the SQL generated for such a ratio metric.
select
  subq_15577.metric_time as metric_time,
  cast(subq_15577.mql_queries_created_test as double) / cast(nullif(subq_15582.distinct_query_users, 0) as double) as mql_queries_per_active_user
from (
  select
    metric_time,
    sum(mql_queries_created_test) as mql_queries_created_test
  from (
    select
      cast(query_created_at as date) as metric_time,
      case when query_status in ('PENDING','MODE') then 1 else 0 end as mql_queries_created_test
    from prod_dbt.mql_query_base mql_queries_test_src_2552 
  ) subq_15576
  group by
    metric_time
) subq_15577
inner join (
  select
    metric_time,
    count(distinct distinct_query_users) as distinct_query_users
  from (
    select
      cast(query_created_at as date) as metric_time,
      case when query_status in ('MODE','PENDING') then email else null end as distinct_query_users
    from prod_dbt.mql_query_base mql_queries_src_2585 
  ) subq_15581
  group by
    metric_time
) subq_15582
on
  (
    (
      subq_15577.metric_time = subq_15582.metric_time
    ) or (
      (
        subq_15577.metric_time is null
      ) and (
        subq_15582.metric_time is null
      )
    )
  )
Add filter
Users can define constraints on input metrics for a ratio metric by applying a filter directly to the input metric, like so:
metrics:
  - name: frequent_purchaser_ratio
    description: Fraction of active users who qualify as frequent purchasers
    type: ratio
    type_params:
      numerator:
        name: distinct_purchasers
        filter: |
          {{Dimension('customer__is_frequent_purchaser')}}
        alias: frequent_purchasers
      denominator:
        name: distinct_purchasers
Note the filter and alias parameters for the metric referenced in the numerator.
- Use the filterparameter to apply a filter to the metric it's attached to.
- The aliasparameter is used to avoid naming conflicts in the rendered SQL queries when the same metric is used with different filters.
- If there are no naming conflicts, the aliasparameter can be left out.