Производные метрики
В MetricFlow производные метрики создаются путем определения выражения с использованием других метрик. Они позволяют выполнять вычисления с существующими метриками. Это полезно для комбинирования метрик и выполнения математических функций на агрегированных столбцах, например, для создания метрики прибыли.
Параметры, описание и тип для производных метрик:
| Loading table... |
Ниже представлена полная спецификация для производных метрик вместе с примером.
metrics:
- name: the metric name # Обязательный
description: the metric description # Необязательный
type: derived # Обязательный
label: The value that will be displayed in downstream tools #Обязательный
type_params: # Обязательный
expr: the derived expression # Обязательный
metrics: # Список метрик, используемых в производных метриках # Обязательный
- name: the name of the metrics. must reference a metric you have already defined # Обязательный
alias: optional alias for the metric that you can use in the expr # Необязательный
filter: optional filter to apply to the metric # Необязательный
offset_window: set the period for the offset window, such as 1 month. This will return the value of the metric one month from the metric time. # Необязательный
Для продвинутого моделирования данных вы можете использовать fill_nulls_with и join_to_timespine, чтобы установить нулевые значения метрик в ноль, обеспечивая числовые значения для каждой строки данных.
Пример производных метрик
metrics:
- name: order_gross_profit
description: Валовая прибыль с каждого заказа.
type: derived
label: Order gross profit
type_params:
expr: revenue - cost
metrics:
- name: order_total
alias: revenue
- name: order_cost
alias: cost
- name: food_order_gross_profit
label: Food order gross profit
description: "Валовая прибыль для каждого заказа на еду."
type: derived
type_params:
expr: revenue - cost
metrics:
- name: order_total
alias: revenue
filter: |
{{ Dimension('order__is_food_order') }} = True
- name: order_cost
alias: cost
filter: |
{{ Dimension('order__is_food_order') }} = True
- name: order_total_growth_mom
description: "Процентный рост общего количества заказов по сравнению с 1 месяцем назад"
type: derived
label: Order total growth % M/M
type_params:
expr: (order_total - order_total_prev_month)*100/order_total_prev_month
metrics:
- name: order_total
- name: order_total
offset_window: 1 month
alias: order_total_prev_month
Смещение производной метрики
Чтобы выполнять вычисления, используя значение метрики из предыдущего периода времени, вы можете добавить параметр смещения к производной метрике. Например, если вы хотите рассчитать рост за период или отслеживать удержание пользователей, вы можете использовать это смещение метрики.
Примечание: Вы должны включить измерение metric_time при запросе производной метрики с окном смещения.
Следующий пример показывает, как можно рассчитать ежемесячный рост выручки, используя окно смещения в 1 месяц:
- name: customer_retention
description: Процент клиентов, которые активны сейчас и были активны 1 месяц назад
label: customer_retention
type_params:
expr: (active_customers/ active_customers_prev_month)
metrics:
- name: active_customers
alias: current_active_customers
- name: active_customers
offset_window: 1 month
alias: active_customers_prev_month
Окна смещения и гранулярность
Вы можете запрашивать любую комбинацию гранулярности и окна смещения. Следующий пример запрашивает метрику с 7-дневным смещением и месячной гранулярностью:
- name: d7_booking_change
description: Разница между бронированиями сейчас и 7 дней назад
type: derived
label: d7 bookings change
type_params:
expr: bookings - bookings_7_days_ago
metrics:
- name: bookings
alias: current_bookings
- name: bookings
offset_window: 7 days
alias: bookings_7_days_ago
Когда вы выполняете запрос dbt sl query --metrics d7_booking_change --group-by metric_time__month для метрики, вот как он рассчитывается. Для dbt Core вы можете использовать префикс mf query.
- Получите необработанный, неагрегированный набор данных с указанными мерами и измерениями на самом низком уровне детализации, который в настоящее время является 'днем'.
- Затем выполните смещенное соединение на ежедневном наборе данных, после чего выполните усечение даты и агрегацию до запрашиваемой гранулярности.
Например, чтобы рассчитать
d7_booking_changeза июль 2017 года:- Сначала сложите все значения бронирования за каждый день июля, чтобы рассчитать метрику бронирования.
- Следующая таблица показывает диапазон дней, составляющих эту месячную агрегацию.
| Loading table... |
- Рассчитайте бронирования за июль с 7-дневным смещением. Следующая таблица показывает диапазон дней, составляющих эту месячную агрегацию. Обратите внимание, что месяц начинается на 7 дней позже (смещен на 7 дней) 2017-07-24.
| Loading table... |
- Наконец, рассчитайте производную метрику и верните окончательный набор результатов:
bookings - bookings_7_days_ago будет вычислено как 7438 - 7252 = 186.
| Loading table... |