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

Заполнение null-значений для метрик

Понимание и реализация стратегий заполнения null-значений в метриках является ключевым для точной аналитики. В этом руководстве объясняются fill_nulls_with и join_to_timespine, чтобы обеспечить полноту данных, помогая конечным пользователям принимать более обоснованные решения и улучшая ваши рабочие процессы dbt.

О null-значениях

Вы можете использовать fill_nulls_with, чтобы заменить null-значения в метриках на значение, например, ноль (или выбранное вами целое число). Это гарантирует, что каждая строка данных показывает числовое значение.

Это руководство объясняет, как гарантировать отсутствие null-значений в ваших метриках:

  • Используйте fill_nulls_with для simple, cumulative и conversion метрик
  • Используйте join_to_timespine и fill_nulls_with вместе для производных и долевых метрик, чтобы избежать появления null-значений.

Заполнение null-значений для простых метрик

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

Предположим, у вас есть три метрики:

  • website_visits и leads
  • и производная метрика под названием leads_to_website_visit, которая вычисляет отношение лидов к посещениям сайта.

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

models/metrics/website_vists.yml
metrics:
- name: website_visits
type: simple
type_params:
measure:
name: bookings
- name: leads
type: simple
type_params:
measure:
name: bookings
fill_nulls_with: 0 # Это заполняет null-значения нулем
- name: leads_to_website_visit
type: derived
type_params:
expr: leads/website_visits
metrics:
- name: leads
- name: website_visits

Метрики website_visits и leads имеют следующие данные:

metric_timewebsite_visits
2024-01-0150
2024-01-0237
2024-01-0379
metric_timeleads
2024-01-015
2024-01-038
  • Обратите внимание, что в метрике leads нет данных за 2024-01-02.

Хотя нет дней без посещений, есть дни без лидов. После применения fill_nulls_with: 0 к метрике leads, запрос этих метрик вместе показывает ноль для лидов в дни без конверсий:

metric_timewebsite_visitsleads
2024-01-01505
2024-01-02370
2024-01-03798

Использование join_to_timespine для производных и долевых метрик

Чтобы обеспечить полный набор данных для каждого дня и ежедневное покрытие для метрик, рассчитанных на основе других метрик, вы можете использовать join_to_timespine для заполнения null-значений для derived и ratio метрик. Эти метрики строятся на основе других метрик (других расчетов), а не прямых мер (сырых данных), требуя от MetricFlow дополнительного уровня подзапроса для отображения метрики. Вложенность подзапросов следующая:

  • Для derived и ratio метрик существует три уровня вложенности подзапросов — производная или долевая метрика → входные метрики → входные меры.
  • Для simple и cumulative метрик существует только два уровня вложенности подзапросов — простая или кумулятивная метрика → входная мера.

Поскольку coalesce не применяется к третьему, внешнему уровню подзапроса для derived или ratio метрик, это означает, что в конечном наборе результатов все еще могут быть null-значения.

  • Обратите внимание, что вы можете использовать join_to_timespine с метриками, которые принимают входные меры, если вы хотите включить строку для каждой даты, даже если данных нет.

Заполнение null-значений для производных и долевых метрик

Чтобы заполнить null-значения для производных и долевых метрик, вы можете связать их с временной шкалой, чтобы обеспечить ежедневное покрытие данных. Как упоминалось в предыдущем разделе, это связано с тем, что derived и ratio метрики принимают метрики в качестве входных данных вместо мер.

Например, следующая структура оставляет null-значения в конечных результатах (столбец leads_to_website_visit), потому что COALESCE не применяется на третьем внешнем уровне рендеринга для окончательного расчета метрики в derived метриках:

metric_timebookingsleadsleads_to_website_visit
2024-01-01505.1
2024-01-02370null
2024-01-03798.1

Чтобы отобразить нулевое значение для leads_to_website_visit за 2024-01-02, вы бы присоединили метрику leads к модели временной шкалы, чтобы обеспечить значение для каждого дня. Это можно сделать, добавив join_to_timespine к параметру measure в конфигурации метрики leads:

models/metrics/leads.yml
- name: leads
type: simple
type_params:
measure:
name: bookings
fill_nulls_with: 0
join_to_timespine: true

После этого, если вы запросите метрику leads после присоединения временной шкалы, будет запись для каждого дня, и любые null-значения будут заполнены нулем.

metric_timeleadsleads_to_website_visit
2024-01-015.1
2024-01-0200
2024-01-038.1

Теперь, если вы объедините метрики в derived метрике, будет нулевое значение для leads_to_website_visit на 2024-01-02, и в конечном наборе результатов не будет никаких null-значений.

Часто задаваемые вопросы

 Как обрабатывать null-значения в производных метриках, определенных на основе нескольких таблиц
0