База Sina

Меры Superset — Sina Gear

Срез 29.09.2026. Выражения ниже — это поле SQL expression меры датасета, не отдельный запрос. Датасет указан в заголовке раздела. Формат D3 ставится в настройке меры.

Живые витрины уже собраны в clickhouse-sina. Описание колонок: clickhouse-schema.md. Текст сборки: sql/007_dds.sql, sql/008_mart_fct_sales.sql, sql/009_smm_mart.sql, sql/010_mart_cohort.sql.

Как устроены слои

Сделка меняет стадию. Поэтому витрины — обновляемые целиком представления (REFRESH), а не дописка строк. Иначе вчерашняя стадия оставалась бы рядом с сегодняшней.

Порядок ключа: сначала воронка или сеть (мало значений), потом дата, потом id. Партиций нет: объём — тысячи и десятки тысяч строк, старые куски по месяцам не удаляются.

Доли (выкуп, ER, churn) в витрине не хранятся. В таблице лежат слагаемые, долю считает Superset. Иначе среднее по уже посчитанным процентам врёт.

Деньги и счётчики LiveDune — Float64, как в уже открытых витринах.

close_month пустой, пока сделка не закрыта. Так же устроена close_date. Пустая дата здесь значит «события ещё не было».

Две гранулы продаж

sina_mart.fct_sales — товар в сделке. Выручку строк складывают по line_amount. Поле amount на каждой строке повторяет сумму всей сделки.

sina_mart.fct_deal — одна строка на сделку, включая сделки без товаров (lines = 0). Средний чек, когорту и конверсию «дошёл до стадии» считают здесь.

sina_mart.fct_client — один контакт. Сделки с contact_id = 0 сюда не входят. is_new_client — галочка Calltouch на первой сделке контакта. Ноль значит «галочки нет».

sina_mart.fct_stage_path — каждый заход сделки в стадию. hours_in_stage у текущего шага равен 0. is_current = 1 — стадия, на которой сделка стоит сейчас.

Флаги сделки

Один список на все витрины, представление sina_dds.stage_flag.

ФлагКогда 1
stage_group10 макро-этапов по имени стадии. Незнакомое имя — «Нераспределенное». На 29.09 таких сделок нет, в справочнике 79 стадий
is_preorderC1:42 или имя «Предзаказ». Резерв и ожидание поставки в этот флаг не входят, они в группе 4
is_in_transitвся группа «6. Логистика (В пути)»: доставка, ПВЗ, курьер, проблема доставки. Раньше флаг смотрел только на C1:40, на этой стадии сделок не было
is_refusal«Отказ при вручении» и «Возврат товара». Остальной провал (спам, цена, нет в наличии) в группу 10 входит, в этот флаг нет
is_paid_fullC1:32 «Доставлен полностью»
is_paid_partialC1:38 «Клиент забрал часть заказа»
is_paidполный или частичный выкуп
is_confirmedC1:WON «Подтвержден»
is_new_clientгалочка Calltouch calltouch_first_order
reached_*сделка когда-либо была в этой стадии, либо стоит в ней сейчас. Поле есть на fct_deal

Выкуп в этих флагах — только B2C. «Оплачено» B2B и «Доставлено» Озон лежат в группе «7. Успех и Выкуп» и в is_paid не входят.

close_date у открытой сделки — плановая дата Битрикса. Срок до закрытия (days_to_close) заполнен при closed = 1. У открытой сделки там 0.

На 29.09.2026 по строкам товаров: выкуп 646 сделок и 17 348 633 ₽, в пути 18 сделок и 452 363 ₽, предзаказ 990 250 ₽.

Когорта и путь

Когорта сделки — месяц created_date (cohort_month на fct_deal). Когорта клиента — месяц первой сделки (cohort_month на fct_client).

Путь до закрытия: строки fct_deal с closed = 1, столбцы cohort_month и close_month, мера deals. UTM на той же витрине уже в нижнем регистре. Покрытие метки у выкупа — мера utm_coverage.

На 29.09: 4 231 сделка, у 476 нет контакта, у 3 243 пустой utm_source, история стадий есть у всех сделок. Повторных контактов 391 из 2 900. Среди контактов, у которых первая сделка отмечена Calltouch как первый заказ (2 268), вернулись 287.

Шаг воронки по истории — fct_stage_path. Текущая стадия на fct_sales показывает, где сделка стоит сейчас, а не где она побывала.

Продажи — sina_mart.fct_sales

Ключ мерыМеткаБизнес-смыслSQL-код для SupersetФормат D3
revenue_factВыручка (факт)Сумма строк товаров в полном и частичном выкупе B2CsumIf(line_amount, is_paid = 1),.0f
revenue_transitВыручка (в пути)Сумма строк, которые сейчас в логистике: доставка, ПВЗ, курьерsumIf(line_amount, is_in_transit = 1),.0f
revenue_preorderСумма предзаказовТолько стадия «Предзаказ», без резерва и ожидания поставкиsumIf(line_amount, is_preorder = 1),.0f
revenue_potentialВыручка (потенциал)Факт + в пути + предзаказ. Резерв и ожидание поставки сюда не входятsumIf(line_amount, is_paid = 1 OR is_in_transit = 1 OR is_preorder = 1),.0f
revenue_reserveОжидание поставки и резервГруппа 4 без предзаказа: товар ещё не в пути и не выкупленsumIf(line_amount, stage_group = '4. Наличие, Резерв и Предзаказ' AND is_preorder = 0),.0f
buyout_rate_moneyПроцент выкупа, деньгиФакт / (факт + отказ при вручении + возврат). Спам и «купил в другом месте» в знаменателе нетsumIf(line_amount, is_paid = 1) / nullIf(sumIf(line_amount, is_paid = 1 OR is_refusal = 1), 0).2%
buyout_rate_unitsПроцент выкупа, штукиТе же стадии, в штуках quantitysumIf(quantity, is_paid = 1) / nullIf(sumIf(quantity, is_paid = 1 OR is_refusal = 1), 0).2%
refusals_dealsОтказы и возвраты, сделкиЧисло сделок на отказе при вручении или возвратеuniqExactIf(deal_id, is_refusal = 1),.0f
paid_dealsСделки выкупаСделки с полным или частичным выкупомuniqExactIf(deal_id, is_paid = 1),.0f

Карточка «Отказы и возвраты» на дашборде Sales сейчас делает SUM(is_refusal) и считает строки товаров. Для числа сделок берите refusals_deals.

Сделка — sina_mart.fct_deal

Ключ мерыМеткаБизнес-смыслSQL-код для SupersetФормат D3
dealsСделкиОдна строка = одна сделкаcount(),.0f
avg_checkСредний чекВыручка строк выкупа / число сделок выкупа, у которых есть товарыsumIf(line_amount, is_paid = 1 AND lines > 0) / nullIf(countIf(is_paid = 1 AND lines > 0), 0),.0f
basket_depthГлубокий чекШтук в выкупе на одну сделку выкупаsumIf(quantity, is_paid = 1 AND lines > 0) / nullIf(countIf(is_paid = 1 AND lines > 0), 0).2f
days_to_close_avgДней до закрытияСреднее только по закрытым. Ноль у открытой сделки в среднее не входитavgIf(days_to_close, closed = 1).1f
utm_coverageПокрытие UTM у выкупаДоля выкупленных сделок с непустым utm_sourcecountIf(is_paid = 1 AND has_utm = 1) / nullIf(countIf(is_paid = 1), 0).2%
conv_to_paidКонверсия в выкупДоля сделок, которые когда-либо были в полном или частичном выкупе. В знаменателе все сделки, включая спамcountIf(reached_paid = 1) / nullIf(count(), 0).2%
conv_to_transitКонверсия в доставкуДоля сделок, которые когда-либо были в логистикеcountIf(reached_transit = 1) / nullIf(count(), 0).2%
conv_transit_to_paidИз доставки в выкупСреди дошедших до логистики — доля дошедших до выкупаcountIf(reached_transit = 1 AND reached_paid = 1) / nullIf(countIf(reached_transit = 1), 0).2%
conv_confirmed_to_paidИз «Подтвержден» в выкупСреди побывавших на C1:WON — доля побывавших в выкупеcountIf(reached_confirmed = 1 AND reached_paid = 1) / nullIf(countIf(reached_confirmed = 1), 0).2%

Когортная таблица: строки cohort_month, столбцы close_month, мера deals, фильтр closed = 1. Рядом тот же срез с разрезом utm_source.

Доля сделок, которые сейчас стоят на макро-этапе: группировка stage_group, мера deals. Это склад на сегодня, не прохождение воронки. Прохождение — меры reached_* и витрина fct_stage_path.

Клиент — sina_mart.fct_client

Ключ мерыМеткаБизнес-смыслSQL-код для SupersetФормат D3
clientsКлиентыКонтакты, у которых есть хотя бы одна сделкаcount(),.0f
new_client_return_rateВозвратность новыхСреди контактов, чья первая сделка отмечена Calltouch как первый заказ, доля тех, у кого сделок две и большеcountIf(is_new_client = 1 AND is_returned = 1) / nullIf(countIf(is_new_client = 1), 0).2%
repeat_rateПовторные контактыДоля контактов с двумя и более сделками, без оглядки на галочку CalltouchcountIf(is_returned = 1) / nullIf(count(), 0).2%

Когорта клиента: группировка cohort_month, мера new_client_return_rate или repeat_rate. UTM первой сделки — колонка utm_source.

Путь — sina_mart.fct_stage_path

Ключ мерыМеткаБизнес-смыслSQL-код для SupersetФормат D3
stage_hoursЧасов на стадииМедиана часов между входом в стадию и входом в следующую. Текущая стадия не входит: у неё часы ещё не закрытыmedianIf(hours_in_stage, is_current = 0),.0f
deals_reached_groupСделки, побывавшие на этапеУникальные сделки в выбранной stage_groupuniqExact(deal_id),.0f

Соцсети — что достали из payload

На 29.09.2026 в JSON нет поля сохранений (saves, bookmarks). В витрины вынесены поля, которые в сырье были и не лежали отдельной колонкой.

Пост (fct_smm_posts): голоса votes, пересылки Telegram forwards, просмотры Reels reels_views, views_best (просмотры поста, а если их нет — Reels), длительность, охват подписчиков / виральный / рекламный, клики по ссылке, в группу, скрытия, отписки, жалобы, флаг is_deleted. Колонка reposts уже складывает репосты и шары VK, второй раз шары не прибавляют.

День (fct_smm_daily): посты и их просмотры, сторис и просмотры сторис, ролики и video_views, Reels, охват подписчиков, клики, вступления, скрытия, отписки, жалобы, followers_open = подписчики − пришло + ушло. У части дней followers_open отрицательный: остаток и приток в API не сходятся. Churn на это поле не делит.

Сторис (fct_smm_stories): ответы, шары, баны, подписки, открытия ссылки. На 29.09 в кабинете 8 сторис.

Видео (fct_smm_videos): просмотры из impressions.views (в сырой колонке views до следующей загрузки лежит 0), лайки, комментарии, шары.

Аудитория (fct_smm_audience): пол и возраст, длинная строка на корзину. API отдал демографию только VK. is_latest = 1 — последний день аккаунта. Сумма people по всем дням умножает аудиторию на число суток.

Период (fct_smm_period): одна строка на аккаунт и окно тарифа. er и er_views — числа LiveDune уже в процентах (2,03 значит 2,03%, не 203%). Ноль значит, что API отдал ноль: у Telegram Sina Gear ER в этом окне пустой по данным LiveDune.

Пост — sina_mart.fct_smm_posts

Ключ мерыМеткаБизнес-смыслSQL-код для SupersetФормат D3
post_er_viewsER поста по просмотрам(лайки + комментарии + репосты + пересылки + голоса) / просмотры. Удалённые посты не входят. Знаменатель — views_best(sumIf(likes, is_deleted = 0) + sumIf(comments, is_deleted = 0) + sumIf(reposts, is_deleted = 0) + sumIf(forwards, is_deleted = 0) + sumIf(votes, is_deleted = 0)) / nullIf(sumIf(views_best, is_deleted = 0), 0).2%
post_er_reachER поста по охватуТа же сумма реакций / охват. Охват в сырье есть в основном у VK, на остальных сетях мера пустая(sumIf(likes, is_deleted = 0) + sumIf(comments, is_deleted = 0) + sumIf(reposts, is_deleted = 0) + sumIf(forwards, is_deleted = 0) + sumIf(votes, is_deleted = 0)) / nullIf(sumIf(reach, is_deleted = 0), 0).2%
post_viewsПросмотрыПросмотры поста, для Reels без обычных просмотров — просмотры ReelssumIf(views_best, is_deleted = 0),.0f
post_reachОхват постовСумма охватаsumIf(reach, is_deleted = 0),.0f
post_forwardsПересылкиПересылки Telegram. Это не сохраненияsumIf(forwards, is_deleted = 0),.0f

День — sina_mart.fct_smm_daily

Ключ мерыМеткаБизнес-смыслSQL-код для SupersetФормат D3
follower_netПрирост подписчиковПришло минус ушло за выбранные дни. Складывается по аккаунтам и по днямsum(gained) - sum(lost),.0f
churn_rateChurn подписчиковУшедшие за период / средний дневной остаток followers. Для одного аккаунта это отток за выбранный срок. По нескольким аккаунтам каждый день каждого аккаунта входит в среднее отдельно. Отрицательный followers_open в знаменатель не берётсяsum(lost) / nullIf(avgIf(followers, followers > 0), 0).2%
reach_sumОхватСумма дневного охватаsum(reach),.0f
impressions_sumПоказыСумма дневных показовsum(impressions),.0f
video_views_dayПросмотры видео за деньДневные просмотры роликов из истории аккаунтаsum(video_views),.0f
story_views_dayПросмотры сторис за деньДневные просмотры историйsum(story_views),.0f

churn_rate на карточке без разреза по аккаунту смешивает каналы разного размера через простое среднее дней. Для сравнения каналов группируйте по account_name.

Аккаунт за окно тарифа — sina_mart.fct_smm_period

Ключ мерыМеткаБизнес-смыслSQL-код для SupersetФормат D3
account_erER аккаунтаER LiveDune к подписчикам за окно date_from–date_to. Уже в процентах. Мера для разреза по аккаунту: на общей сумме каналов её не складываютmax(er).2f
account_er_viewsER аккаунта по просмотрамER LiveDune к просмотрам, уже в процентахmax(er_views).2f

Считаемый ER по постам за произвольный период — post_er_views, не это поле.

Видео, сторис, аудитория

Ключ мерыМеткаБизнес-смыслSQL-код для SupersetФормат D3
video_viewsПросмотры видеоСумма просмотров роликов. Датасет fct_smm_videossum(views),.0f
video_erER видео(лайки + комментарии + шары) / просмотры. Датасет fct_smm_videos(sum(likes) + sum(comments) + sum(shares)) / nullIf(sum(views), 0).2%
story_viewsПросмотры сторисДатасет fct_smm_storiessum(views),.0f
story_link_rateКлики сторисОткрытия ссылки / просмотры. Датасет fct_smm_storiessum(open_links) / nullIf(sum(views), 0).2%
audience_peopleАудиторияСумма людей в корзинах пола и возраста на последнем дне. Датасет fct_smm_audience. Без is_latest сумма размножает аудиторию по днямsumIf(people, is_latest = 1),.0f
audience_women_shareДоля женщинДоля корзины «женщины» на последнем дне. Датасет fct_smm_audiencesumIf(people, is_latest = 1 AND gender = 'женщины') / nullIf(sumIf(people, is_latest = 1), 0).2%

После появления новых колонок в Superset датасет нужно обновить (Refresh columns). Старые меры дашборда Sales, которые ссылаются на is_paid_full, is_paid_partial, is_in_transit, is_preorder и is_refusal, продолжают работать: «в пути» с 29.09 включает всю логистику, не только курьера.