Витрина данных: что это такое, в чем разница с хранилищем и дашбордом и как собрать ее для бизнеса

· 18 мин · Автор: Антон Гущин

Два отчета по одной и той же выручке показывают разные цифры, потому что каждый собирает ее сам из сырых выгрузок. Один берет сумму сделок из CRM, другой сумму оплат из учета, и на планерке полчаса уходит на спор о том, какая цифра верная. Витрина данных снимает этот спор: выручка считается один раз, по одному определению, а все отчеты берут готовый результат.

Витрина данных: что это и зачем нужна бизнесу

Витрина данных нужна, чтобы руководитель получал одинаковые цифры из любого отчета, а аналитик собирал дашборд из готовых таблиц. Термин используют и в других значениях, например в налоговом мониторинге или в интернет-торговле, а здесь он описывает слой данных для аналитики и BI.

Витрина данных — это готовая таблица под один вопрос бизнеса

Витрина данных (data mart) хранит подмножество данных, подготовленное под одно направление: продажи, маркетинг, финансы или склад. Хранилище охватывает всю компанию, а витрина обслуживает один отдел и берет данные из меньшего числа источников. Разницу легко представить на примере склада и торгового зала, ведь на складе лежит все, что есть у компании, а на полке в зале выложено то, что нужно покупателю этого отдела, уже расфасованное и подписанное.

У любой компании данные живут в разных системах, например заказы в CRM, оплаты в учетной системе, расходы на рекламу в кабинетах рекламных площадок, планы в таблицах. Названия полей у них разные, периоды разные, а сущность вроде клиента записана по-разному. В витрине эти данные приведены к одному виду: одинаковые названия, единые определения показателей и уже посчитанные итоги.

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

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

Дашборд подключают к готовой витрине, и графики обычно обновляются быстрее, потому что итоги посчитаны заранее. Верхний слой дашборда с диаграммами тоже иногда называют витриной, как в статье про дашборд в Excel, но в этой статье витрина означает слой данных под дашбордом. Именно этот слой решает, какие цифры вообще попадут на экран.

Какие четыре задачи решает витрина данных для BI

Витрина закрывает четыре типичные проблемы с отчетами.

Руководитель на планерке больше не сверяет, чья цифра правильная, и время уходит на решение. Аналитик собирает новый отчет из готовых таблиц и не разбирается заново в выгрузках. Дашборд начинается с пяти цифр, которые вы смотрите каждое утро, и только потом идут графики вокруг них, как показано в материале про дашборд для бизнеса. Витрина как раз готовит эти цифры.

Витрина данных и хранилище данных в сравнении с озером, кубом и дашбордом

Где проходит граница между всеми этими терминами? Они описывают соседние слои одной цепочки, и путаница возникает на стыках. Хранилище данных собирает подготовленные структурированные данные всей компании и служит для аналитики центральной версией правды. Озеро хранит сырые данные любого вида, в том числе неструктурированные, действует по правилу сначала сохранить, потом обработать и определяет схему данных в момент анализа.

Витрина обслуживает одну область и часто строится как срез хранилища. Оперативное хранилище, или ODS, обычно держит оперативные данные из источников с ограниченной историей. OLAP-куб описывает данные по нескольким осям, например по продукту, времени и городу, и обобщает электронную таблицу на три и больше измерений. Представление, или view, хранит только сохраненный запрос и получает данные из базовых таблиц при каждом обращении.

Материализованное представление в PostgreSQL хранит результат запроса и обновляется отдельной командой. Оно часто отвечает заметно быстрее обычного представления, но данные в нем не всегда свежие. Дашборд стоит выше всего этого и выводит на экран цифры из витрины, а таблица ниже собирает отличия в одном месте.

СущностьЧто хранитДля когоРазница с витриной
Хранилище данныхПодготовленные данные всей компании с историейАналитики и разработчики данныхОхватывает все направления, витрина одно
Озеро данныхСырые данные любого форматаДата-инженеры и аналитики данныхДанные не подготовлены, схема задается при чтении
ODSОперативные данные с ограниченной историейОперационная отчетностьОриентировано на оперативные данные, витрина на подготовленные под вопрос
OLAP-кубМеры по нескольким измерениямАналитики, которым нужны срезыМногомерная структура, витрина набор таблиц
Представление (view)Сохраненный запрос, данные берутся из таблиц при каждом обращенииЛюбые пользователи таблицОдин из способов реализовать витрину
ДашбордБерет готовые цифры из витрины и выводит их на экранРуководители и командыСлой отображения над витриной

Витрина данных получается из этих сущностей по-разному, ведь она может быть физической таблицей, представлением или материализованным представлением, а питается из хранилища, ODS или прямо из источников. Всю цепочку целиком описывает разбор BI-системы, а превращение данных в графики разбирает статья про визуализацию данных.

Слои данных: озеро, хранилище, витрина и дашборд по степени подготовки
Чем выше слой, тем меньше в нем данных и тем лучше они подготовлены. Озеро хранит сырье, хранилище объединяет его по компании, витрина выбирает нужное под один вопрос, дашборд показывает итог.

Типы витрин: зависимые и независимые, физические и виртуальные

Типы витрин различают по двум признакам: откуда они берут данные и как хранят результат. Зависимая витрина питается из корпоративного хранилища, а независимая берет данные напрямую из операционных и внешних систем. Зависимая бывает логической, то есть представлением над хранилищем, или физической, то есть отдельной выгрузкой. Ее выделяют ради своей модели данных, скорости работы или безопасности.

Выбор типа зависит от того, есть ли у компании хранилище. Если его нет, начинают с независимой витрины: берут один-два источника, отвечают на один вопрос, например про эффективность рекламы, и расширяют витрину по мере роста задач. У такого пути есть цена, ведь когда независимых витрин несколько, у каждой появляются собственные определения клиента и канала, и расхождения возвращаются.

ТипОткуда данныеКогда подходитРиск
ЗависимаяКорпоративное хранилищеХранилище уже есть и нужен срез под отделТребует готового хранилища, из которого берется срез
НезависимаяИсточники напрямуюХранилища нет, задача одна, источников один-дваОпределения расходятся между витринами
Виртуальная (view)Запрос над таблицамиДанных немного, свежесть важнее скоростиЗапрос считается при каждом обращении и тормозит на больших объемах
Физическая или материализованнаяСохраненный результат расчетаНужна скорость на больших объемахДанные устаревают до очередного обновления

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

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

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

Из чего состоит витрина: зерно, факты, измерения и схема звезда

Аналитическая витрина в размерной модели состоит из зерна, фактов и измерений. Зерно описывает, что означает одна строка таблицы, и это ключевой шаг, который фиксируют до выбора измерений и фактов. Примеры зерна: один день по одному каналу, одна оплата, одна позиция заказа. Все остальное в витрине обязано соответствовать выбранному зерну, и каждому зерну отвечает отдельная таблица фактов.

Факты — это числовые замеры события: расход, число лидов, сумма оплаты. Измерения дают описательный контекст, то есть отвечают на вопросы кто, что, где и когда. Это канал, менеджер, товар, дата. Названия отчетов и подписи графиков берутся из значений измерений, по ним же фильтруют и группируют данные. Начинать советуют с самого детального зерна, то есть с минимального уровня детализации бизнес-процесса. Из подробных строк итоги по дням, каналам и месяцам собираются суммированием.

Менять зерно походя нельзя, потому что строка перестает означать прежнее. Допустим, витрина построена на зерне день и канал, а потом в нее решают добавить менеджера. Суммы по каналам начинают повторяться, и итоги расходятся с учетом. Тогда менеджера выносят в отдельную витрину с новым зерном, а старая остается как есть.

Если таблицу фактов окружить таблицами измерений, получится схема звезда, где факты лежат в центре, а измерения расходятся от них по сторонам. Когда измерения дополнительно разбивают на несколько связанных таблиц, например товар, подкатегорию и категорию, получается снежинка. Для аналитики обычно выбирают звезду, потому что плоские измерения проще для пользователя, а лишние соединения в снежинке могут замедлять запросы. Окончательный выбор зависит от объема данных и от того, насколько удобна модель для тех, кто с ней работает.

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

Как построить витрину данных по шагам

Как не утонуть в колонках, когда источников много? Сборка витрины похожа на сборку дашборда: сначала вопрос, затем данные, а в последнюю очередь инструмент. Бывает и обратный порядок. Подключают источники, выгружают все подряд, а потом выясняется, что никто не может объяснить, зачем нужна половина колонок. Порядок ниже страхует от такого сценария.

  1. Сформулируйте вопрос и пять цифр. Решите, на какой вопрос отвечает витрина, например какой канал приносит деньги, и выпишите пять показателей, которые смотрят каждую неделю.
  2. Выберите источники и ключ связи. Для каждой цифры определите, откуда она берется, и найдите поле, которое связывает источники: идентификатор клиента, заказа или метка кампании. Такую склейку подробно объясняет материал про сквозную аналитику.
  3. Объявите зерно. Запишите одной фразой, что означает строка, например день и канал. Если фразу не удалось записать, витрину рано строить.
  4. Зафиксируйте определения показателей. Для каждой цифры достаточно одной строки с формулой, источником и ответственным. Именно здесь исчезают спорные определения выручки.
  5. Настройте загрузку. При инкрементальной загрузке витрина строится по всем данным источника только в первый запуск, а затем добавляет новые и измененные строки. Полную пересборку обычно запускают после смены логики расчета.
  6. Подключите BI к готовой таблице. Дашборд читает таблицу или представление витрины, и сырые выгрузки ему больше не нужны.
  7. Назначьте владельца и расписание. У витрины есть человек, который отвечает за определения, и график обновления, который понятен пользователям.
Семь шагов построения витрины данных от вопроса до владельца
Семь шагов идут от вопроса бизнеса к владельцу витрины. Зерно и определения показателей стоят до загрузки данных, потому что исправлять их после запуска дороже всего.

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

Пример витрины данных для маркетинга и продаж с источниками и метриками

Для примера подойдет витрина, которая отвечает на вопрос, какой рекламный канал приносит деньги. Источников три, и рекламные кабинеты отдают расход по дням и каналам, CRM отдает лиды и сделки с меткой канала, а учетная система отдает оплаты. Зерно витрины составляют день и канал, колонки фактов дают расход, лиды, сделки и оплаты, а показатели считаются поверх них.

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

КаналРасход, ₽ЛидыСделкиВыручка, ₽CPL, ₽КонверсияCAC, ₽ROMI
Контекстная реклама180 00030036540 00060012%5 000200%
Соцсети90 00015012168 0006008%7 50087%
Рассылка15 000609135 00025015%1 667800%
Итого285 00051057843 00055911,2%5 000196%

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

По CPL контекст и соцсети выглядят одинаково, по 600 рублей за лид, но по CAC они разные: 5 000 против 7 500. Причина в конверсии лида в сделку, 12% против 8%, а отчет по одному CPL скрыл бы эту разницу, а витрина с лидами и сделками рядом показывает ее сразу. Рассылка дает самый дешевый результат, но ее бюджет мал, и масштабировать канал по этой строке нельзя без проверки, выдержит ли аудитория больший объем.

Эти цифры считаются по выручке без себестоимости, поэтому для решения о бюджете нужна маржа, которую добавляют отдельным слоем, как в разборе юнит-экономики, а логику показателей объясняет статья про маркетинговую аналитику и ROMI. Единое определение выручки тоже задается в витрине, и разницу видно на примере. Допустим, что по CRM выручка составила 1 500 000 рублей, а по оплатам 1 230 000. Разрыв в 270 000 рублей, около 22% от оплат, и без витрины каждый отчет выберет свою версию. В витрине принимают одно определение, например оплаченная сумма, а сумму сделок хранят отдельной колонкой.

Поток данных витрины маркетинга: три источника, витрина и дашборд
Три источника поставляют расход, лиды со сделками и оплаты. Витрина день и канал соединяет их по метке канала, считает CPL, CAC и ROMI и отдает дашборду готовую таблицу.

Как проверять качество данных в витрине и каких ошибок избегать

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

В инструментах вроде dbt такие проверки описываются в конфигурации. Проверки на уникальность, отсутствие пустых значений, допустимые значения и ссылочную целостность там встроены из коробки, поэтому писать их с нуля не приходится. Свежесть источника там проверяется отдельно, с порогами предупреждения и ошибки в классической настройке. Сверку итогов с учетом добавляют своими запросами. Если инструмента нет, те же пять проверок выполняются обычными запросами по расписанию.

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

Ошибки при сборке повторяются из проекта в проект, и большинство из них видно по симптомам. Таблица ниже поможет узнать их раньше, чем о них расскажут пользователи.

ОшибкаКак проявляетсяЧто делать
Витрина для всех сразуСотни колонок, никто не знает, какая правильнаяОграничить витрину одним вопросом и пятью цифрами
Нет зернаСуммы удваиваются после соединения таблицЗаписать зерно и проверить дубли по нему
Два определения одного показателяВыручка в разных отчетах отличаетсяЗакрепить одно определение и хранить остальные в отдельных колонках
Нет владельца и расписанияДанные застыли, но никто не заметилНазначить ответственного и добавить проверку свежести
Пустые ключи при соединенииСделки без канала пропадают из отчетаСчитать долю записей без ключа и выводить ее в отчет
Тихий пересчет историиПрошлые месяцы меняются без предупрежденияСообщать пользователям о пересборке и хранить дату расчета

Когда витрина данных не нужна и как Analyzo берет эту работу на себя

Витрина требует владельца, расписания и проверок, поэтому ее не строят заранее. Пока источников один или два, отчет один, а смотрят его до трех человек, хватает таблицы или отчета в BI. Похожие пороги для перехода с таблиц на BI собраны в статье про дашборд в Excel. Когда сработали два признака из таблицы ниже, пора планировать витрину.

ПризнакХватает отчета в BI или таблицыПора строить витрину
ИсточникиОдин или дваТри и больше, с разными ключами
ПользователиДо трех человекНесколько отделов, разные права
Определения показателейОдно на цифруСпорные, по версии каждого отдела
Скорость и нагрузкаОтчет открывается без паузОтчеты тормозят или нагружают рабочую базу
ОбновлениеРаз в неделю вручнуюКаждый день по расписанию

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

Для типового набора источников отдельная инженерная сборка может оказаться лишней. Платформа Analyzo подключает рекламные кабинеты, CRM и учет, приводит данные к общим названиям и считает метрики маркетинга и продаж на едином дашборде, поэтому витрину с ручным SQL для такой задачи собирать не требуется. Когда нужны нестандартные расчеты или у компании уже есть хранилище, витрину строят отдельно и обычными средствами хранилища. Для управленческих отчетов определения показателей полезно закрепить заранее, так же, как это делает управленческий учет.

Частые вопросы о витрине данных

В чем разница между витриной данных и хранилищем данных?

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

В чем разница между витриной и озером данных?

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

Можно ли обойтись витринами без хранилища?

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

В чем разница между витриной данных и представлением в базе данных?

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

Что такое зерно витрины и почему его фиксируют раньше остального?

Зерно определяет, что означает одна строка таблицы, например день и канал. Все измерения и факты должны соответствовать ему, поэтому его фиксируют до остального проектирования.

Что выбрать для аналитики, звезду или снежинку?

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

Одна витрина на всю компанию или несколько?

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

Зачем витрина, если BI можно подключить прямо к базе?

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

С чего начать сборку

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

Дальше соберите первую версию на одном-двух источниках и подключите к ней дашборд. Сверьте итоги с учетом, добавьте проверку дублей и свежести и назначьте владельца. Следующие источники добавляйте по одному, и каждый раз проверяйте, что итоги не разошлись. Расширять витрину надо только тогда, когда пользователи уже доверяют первой версии.

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