# 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_total` or `"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
`filter`

parameter to apply a filter to the metric it's attached to. - The
`alias`

parameter 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
`alias`

parameter can be left out.