TGViewer
Делаю BI Делаю BI @withdata · 508 subscribers
Post #134 677
История в трех актах (трагическая) как я в несколько подходов расчитывал неаддитивные метрики для дашборда

Предисловие/ликбез
Некоторые метрики являются неаддитивными - то есть сумма их разрезов не равна самой метрике. Например у нас есть DAU сайта (количество активных пользователей на сайте)
И есть на сайте несколько страниц - на каждой из которой свое количество активных пользователей. В итоге нельзя так просто взять и сложить DAU каждой страницы и получить DAU сайта, потому что один пользователь может посетить несколько страниц, и при этом быть единственным посетителем сайта

Акт 1 «Выглядит все просто»

В принципе расчёт несложный - считаем агрегат для сайта и делаем union all агрегат для каждой из страниц. Общему DAU присваиваем значение page= 'Any' и вуаля - мы посчитали эту метрику.
Но вообще, в SQL предусмотрен очень мощный «синтаксический сахар» для таких расчётов - функционал GROUP BY GROUPING SETS (<перечисление необходимых агрегаций>), написав
GROUP BY GROUPING SETS ((event_dt), (event_dt, page)) мы как раз получим такой union all двух группировок, в которых недостающие разрезы будут null
Есть еще два вида этих функций, которые тоже своего рода синтаксический сахар над grouping sets - ROLLUP и CUBE: один для ступенчатого перебора разрезов, а второй перебирает вообще все возможные варианты группировок.

Вроде пока звучит просто? Но уже тут можно словить подвох - если у вас есть измерение NULL до группировки, то после неё вы не сможете отличить вышестоящий уровень агрегации от отсутствия разреза (в некоторых СУБД можно уровень агрегации выводить, но далеко не во всех). Так что если вы используете этот метод - запаситесь колясками! (COALESCE в разговорной речи:)

В акте 2 расскажу что делать если оказалась что не все так просто
  • 👍 12
  • ❤ 1
  • 🔥 1
  • 🥰 1
More from @withdata
  1. Sep 3, 2026Минутка сложного визуального юмора
  2. Aug 14, 2026Нейрослоп для биайщиков --- не новые вызовы, а трансформация функции! В эпоху, когда данны…
  3. Apr 28, 2026Всем привет! Мой хороший товарищ и коллега Женя (@oblivionrrr) ищет себе в команду middle…
  4. Apr 6, 2026Новая рубрика - BI ЧГК Что изображено на этом графике? Могу сказать, что существует правил…
  5. Mar 28, 2026«Если в лесу падает дерево, и его никто не слышит - оно издаёт звук?» Когда я только пришё…
  6. Feb 20, 2026Саша к себе в команду ищет BI разработчика - делать красоту и крутоту в HR аналитике) Наст…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →