Перейти к основному содержимому

Кумулятивные метрики

Кумулятивные метрики агрегируют измерение за заданный период накопления. Если окно не указано, оно считается бесконечным и накапливает значения за все время. Вам нужно будет создать модель временной оси перед добавлением кумулятивных метрик.

Кумулятивные метрики полезны для расчета таких показателей, как еженедельные активные пользователи или доход с начала месяца. Параметры, описание и типы для кумулятивных метрик следующие:

подсказка

Обратите внимание, что мы используем точечную нотацию (.), чтобы показать, что один параметр вложен в другой. Например, measure.name означает, что параметр name вложен в параметр measure.

Параметры

 Explanation of type_params.measure

Конфигурация type_params.measure может быть записана несколькими способами:

  • Сокращённый синтаксис — чтобы указать только имя меры, используйте простое строковое значение. Это сокращённый вариант, применяемый, когда не требуются дополнительные атрибуты.

    type_params:
    measure: revenue
  • Объектный синтаксис — Чтобы добавить больше деталей или атрибутов к измерению (например, добавление фильтра, обработка значений null или указание, следует ли присоединять к временной оси), необходимо использовать объектный синтаксис. Это позволяет дополнительную конфигурацию помимо имени измерения.

    type_params:
    measure:
    name: order_total
    fill_nulls_with: 0
    join_to_timespine: true

Полная спецификация

Ниже представлена полная спецификация для кумулятивных метрик с примером:

models/marts/sem_semantic_model_name.yml

Пример кумулятивных метрик

Кумулятивные метрики измеряют данные за заданный период и считают период бесконечным, если параметр окна не передан, накапливая данные за все время.

Следующий пример показывает, как определить кумулятивные метрики в YAML-файле:

models/marts/sem_semantic_model_name.yml

Опции окна

Этот раздел содержит примеры, когда следует указывать и не указывать опции окна.

  • Когда окно указано, MetricFlow применяет скользящее окно к базовому измерению, например, отслеживание еженедельных активных пользователей с 7-дневным окном.
  • Без указания окна кумулятивные метрики накапливают значения за все время, что полезно для текущих итогов, таких как текущий доход и активные подписки.
 Пример с указанным окном

Если указана опция окна, MetricFlow применяет скользящее окно к базовому измерению.

Предположим, базовое измерение customers настроено для подсчета уникальных клиентов, совершающих заказы в магазине Jaffle.

models/marts/sem_semantic_model_name.yml
measures:
- name: customers
expr: customer_id
agg: count_distinct

Мы можем написать кумулятивную метрику weekly_customers следующим образом:

Из примера YAML-файла обратите внимание на следующее:

  • type: Укажите cumulative, чтобы указать тип метрики.
  • type_params: Настройте кумулятивную метрику, предоставив measure и необязательно добавьте конфигурацию window или grain_to_date.

Например, в кумулятивной метрике weekly_customers MetricFlow берет скользящее 7-дневное окно соответствующих клиентов и применяет функцию count distinct.

Если вы удалите window, измерение будет накапливаться за все время.

 Пример без указанного окна

Предположим, у вас (компания, основанная на подписке, для примера) есть таблица событийных логов со следующими столбцами:

  • date: столбец с датой
  • user_id: (целое число) идентификатор, указанный для каждого пользователя, ответственного за событие
  • subscription_plan: (целое число) столбец, указывающий конкретный план подписки, связанный с пользователем.
  • subscription_revenue: (целое число) столбец, указывающий значение, связанное с планом подписки.
  • event_type: (целое число) столбец, заполняющийся значением +1 для указания добавленной подписки или -1 для указания удаленной подписки.
  • revenue: (целое число) столбец, умножающий event_type и subscription_revenue, чтобы показать сумму дохода, добавленного или потерянного за конкретную дату.

Используя кумулятивные метрики без указания окна, вы можете рассчитать текущие итоги для таких метрик, как количество активных подписок и доход в любой момент времени. Следующий YAML-файл показывает создание кумулятивных метрик для получения текущего дохода и общего количества активных подписок в виде кумулятивной суммы:

models/marts/sem_semantic_model_name.yml
measures:
- name: revenue
description: Total revenue
agg: sum
expr: revenue
- name: subscription_count
description: Count of active subscriptions
agg: sum
expr: event_type
metrics:
- name: current_revenue
description: Current revenue
label: Current Revenue
type: cumulative
type_params:
measure: revenue
- name: active_subscriptions
description: Count of active subscriptions
label: Active Subscriptions
type: cumulative
type_params:
measure: subscription_count

Зерно до даты

Вы можете выбрать указание зерна до даты в конфигурации вашей кумулятивной метрики, чтобы накапливать метрику с начала зерна (например, неделя, месяц или год). При использовании окна, например, месяц, MetricFlow вернется на один полный календарный месяц назад. Однако зерно до даты всегда будет начинать накопление с начала зерна, независимо от последней даты данных.

Например, рассмотрим базовое измерение order_total.

models/marts/sem_semantic_model_name.yml
    measures:
- name: order_total
agg: sum

Мы можем сравнить разницу между 1-месячным окном и месячным зерном до даты.

  • Кумулятивная метрика в подходе окна применяет скользящее окно в 1 месяц
  • Зерно до даты по месяцам сбрасывается в начале каждого месяца.
models/marts/sem_semantic_model_name.yml

Кумулятивная метрика с зерном до даты:

Пример реализации SQL

Чтобы вычислить кумулятивное значение метрики за заданный период, мы выполняем соединение по временной шкале с таблицей временной оси, используя основное временное измерение в качестве ключа соединения. Мы используем окно накопления в соединении, чтобы решить, следует ли включать запись в конкретный день. Следующий SQL-код, полученный из примера кумулятивной метрики, предоставлен для справки:

Чтобы реализовать кумулятивные метрики, обратитесь к примеру SQL-кода:

select
count(distinct distinct_users) as weekly_active_users,
metric_time
from (
select
subq_3.distinct_users as distinct_users,
subq_3.metric_time as metric_time
from (
select
subq_2.distinct_users as distinct_users,
subq_1.metric_time as metric_time
from (
select
metric_time
from transform_prod_schema.mf_time_spine subq_1356
where (
metric_time >= cast('2000-01-01' as timestamp)
) and (
metric_time <= cast('2040-12-31' as timestamp)
)
) subq_1
inner join (
select
distinct_users as distinct_users,
date_trunc('day', ds) as metric_time
from demo_schema.transactions transactions_src_426
where (
(date_trunc('day', ds)) >= cast('1999-12-26' as timestamp)
) AND (
(date_trunc('day', ds)) <= cast('2040-12-31' as timestamp)
)
) subq_2
on
(
subq_2.metric_time <= subq_1.metric_time
) and (
subq_2.metric_time > dateadd(day, -7, subq_1.metric_time)
)
) subq_3
)
group by
metric_time,
limit 100;

Ограничения

Если вы указываете window в определении вашей кумулятивной метрики, вы должны включить metric_time в качестве измерения в SQL-запросе. Это связано с тем, что окно накопления основано на времени метрики. Например,

select
count(distinct subq_3.distinct_users) as weekly_active_users,
subq_3.metric_time
from (
select
subq_2.distinct_users as distinct_users,
subq_1.metric_time as metric_time
group by
subq_3.metric_time

Нашли ошибку?

0
Loading