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

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

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

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

подсказка

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

Параметры

 Объяснение type_params::measure

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

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

models/marts/sem_semantic_model_name.yml

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

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

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

models/marts/sem_semantic_model_name.yml

Опции окна

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

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

Зерно до даты

Вы можете выбрать указание зерна до даты в конфигурации вашей кумулятивной метрики, чтобы накапливать метрику с начала зерна (например, неделя, месяц или год). При использовании окна, например, месяц, 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