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

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

Так, витрина маркетинга хранит расход, лиды и стоимость привлечения по каналам, витрина продаж держит воронку и конверсию по менеджерам, а витрина финансов собирает выручку, расходы и план с фактом. У каждой свой владелец и свой набор определений, а справочники вроде клиента и канала лучше сделать общими, чтобы цифры разных витрин можно было сравнивать.
Дашборд подключают к готовой витрине, и графики обычно обновляются быстрее, потому что итоги посчитаны заранее. Верхний слой дашборда с диаграммами тоже иногда называют витриной, как в статье про дашборд в Excel, но в этой статье витрина означает слой данных под дашбордом. Именно этот слой решает, какие цифры вообще попадут на экран.
Какие четыре задачи решает витрина данных для BI
Витрина закрывает четыре типичные проблемы с отчетами.
- Единые определения показателей. Выручка, лид и активный клиент считаются в одном месте, поэтому цифры в разных отчетах совпадают.
- Быстрые отчеты. Итоги посчитаны заранее, и пользователь получает нужные данные быстрее, чем при пересчете сырых таблиц при каждом открытии дашборда.
- Меньше нагрузки на рабочие системы. Дашборды читают готовую таблицу, и рабочая база CRM или учета освобождается от тяжелых запросов, поэтому обновление отчетов реже мешает работе менеджеров.
- Контроль доступа. В витрину можно включить только нужные поля, и менеджеру открывают продажи без доступа к себестоимости и зарплатам.
Руководитель на планерке больше не сверяет, чья цифра правильная, и время уходит на решение. Аналитик собирает новый отчет из готовых таблиц и не разбирается заново в выгрузках. Дашборд начинается с пяти цифр, которые вы смотрите каждое утро, и только потом идут графики вокруг них, как показано в материале про дашборд для бизнеса. Витрина как раз готовит эти цифры.
Витрина данных и хранилище данных в сравнении с озером, кубом и дашбордом
Где проходит граница между всеми этими терминами? Они описывают соседние слои одной цепочки, и путаница возникает на стыках. Хранилище данных собирает подготовленные структурированные данные всей компании и служит для аналитики центральной версией правды. Озеро хранит сырые данные любого вида, в том числе неструктурированные, действует по правилу сначала сохранить, потом обработать и определяет схему данных в момент анализа.
Витрина обслуживает одну область и часто строится как срез хранилища. Оперативное хранилище, или ODS, обычно держит оперативные данные из источников с ограниченной историей. OLAP-куб описывает данные по нескольким осям, например по продукту, времени и городу, и обобщает электронную таблицу на три и больше измерений. Представление, или view, хранит только сохраненный запрос и получает данные из базовых таблиц при каждом обращении.
Материализованное представление в PostgreSQL хранит результат запроса и обновляется отдельной командой. Оно часто отвечает заметно быстрее обычного представления, но данные в нем не всегда свежие. Дашборд стоит выше всего этого и выводит на экран цифры из витрины, а таблица ниже собирает отличия в одном месте.
| Сущность | Что хранит | Для кого | Разница с витриной |
|---|---|---|---|
| Хранилище данных | Подготовленные данные всей компании с историей | Аналитики и разработчики данных | Охватывает все направления, витрина одно |
| Озеро данных | Сырые данные любого формата | Дата-инженеры и аналитики данных | Данные не подготовлены, схема задается при чтении |
| ODS | Оперативные данные с ограниченной историей | Операционная отчетность | Ориентировано на оперативные данные, витрина на подготовленные под вопрос |
| OLAP-куб | Меры по нескольким измерениям | Аналитики, которым нужны срезы | Многомерная структура, витрина набор таблиц |
| Представление (view) | Сохраненный запрос, данные берутся из таблиц при каждом обращении | Любые пользователи таблиц | Один из способов реализовать витрину |
| Дашборд | Берет готовые цифры из витрины и выводит их на экран | Руководители и команды | Слой отображения над витриной |
Витрина данных получается из этих сущностей по-разному, ведь она может быть физической таблицей, представлением или материализованным представлением, а питается из хранилища, ODS или прямо из источников. Всю цепочку целиком описывает разбор BI-системы, а превращение данных в графики разбирает статья про визуализацию данных.

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

Из чего состоит витрина: зерно, факты, измерения и схема звезда
Аналитическая витрина в размерной модели состоит из зерна, фактов и измерений. Зерно описывает, что означает одна строка таблицы, и это ключевой шаг, который фиксируют до выбора измерений и фактов. Примеры зерна: один день по одному каналу, одна оплата, одна позиция заказа. Все остальное в витрине обязано соответствовать выбранному зерну, и каждому зерну отвечает отдельная таблица фактов.
Факты — это числовые замеры события: расход, число лидов, сумма оплаты. Измерения дают описательный контекст, то есть отвечают на вопросы кто, что, где и когда. Это канал, менеджер, товар, дата. Названия отчетов и подписи графиков берутся из значений измерений, по ним же фильтруют и группируют данные. Начинать советуют с самого детального зерна, то есть с минимального уровня детализации бизнес-процесса. Из подробных строк итоги по дням, каналам и месяцам собираются суммированием.
Менять зерно походя нельзя, потому что строка перестает означать прежнее. Допустим, витрина построена на зерне день и канал, а потом в нее решают добавить менеджера. Суммы по каналам начинают повторяться, и итоги расходятся с учетом. Тогда менеджера выносят в отдельную витрину с новым зерном, а старая остается как есть.
Если таблицу фактов окружить таблицами измерений, получится схема звезда, где факты лежат в центре, а измерения расходятся от них по сторонам. Когда измерения дополнительно разбивают на несколько связанных таблиц, например товар, подкатегорию и категорию, получается снежинка. Для аналитики обычно выбирают звезду, потому что плоские измерения проще для пользователя, а лишние соединения в снежинке могут замедлять запросы. Окончательный выбор зависит от объема данных и от того, насколько удобна модель для тех, кто с ней работает.

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

Первую версию лучше довести до дашборда за один заход, и как только на экране появились пять цифр, пользователи начинают задавать вопросы к определениям, и витрина сразу получает обратную связь. Расширять набор колонок после этого проще, чем угадывать потребности заранее.
Пример витрины данных для маркетинга и продаж с источниками и метриками
Для примера подойдет витрина, которая отвечает на вопрос, какой рекламный канал приносит деньги. Источников три, и рекламные кабинеты отдают расход по дням и каналам, CRM отдает лиды и сделки с меткой канала, а учетная система отдает оплаты. Зерно витрины составляют день и канал, колонки фактов дают расход, лиды, сделки и оплаты, а показатели считаются поверх них.
Ниже приведены цифры за месяц по трем каналам, условные и служащие только для демонстрации расчета. CPL, цена одного лида, равен расходу, деленному на лиды, конверсия равна сделкам, деленным на лиды, а CAC, стоимость привлечения клиента, равен расходу, деленному на сделки. ROMI, окупаемость маркетинга, считается по выручке без себестоимости и равен выручке за вычетом расхода, деленной на расход.
| Канал | Расход, ₽ | Лиды | Сделки | Выручка, ₽ | CPL, ₽ | Конверсия | CAC, ₽ | ROMI |
|---|---|---|---|---|---|---|---|---|
| Контекстная реклама | 180 000 | 300 | 36 | 540 000 | 600 | 12% | 5 000 | 200% |
| Соцсети | 90 000 | 150 | 12 | 168 000 | 600 | 8% | 7 500 | 87% |
| Рассылка | 15 000 | 60 | 9 | 135 000 | 250 | 15% | 1 667 | 800% |
| Итого | 285 000 | 510 | 57 | 843 000 | 559 | 11,2% | 5 000 | 196% |
Витрина пересчитывается по расписанию, например ночью, чтобы к утру дашборд показывал вчерашний день целиком. Если расход из рекламного кабинета приходит с задержкой в сутки, ее записывают в описании витрины, и пользователи знают, что последний день может уточниться.
По CPL контекст и соцсети выглядят одинаково, по 600 рублей за лид, но по CAC они разные: 5 000 против 7 500. Причина в конверсии лида в сделку, 12% против 8%, а отчет по одному CPL скрыл бы эту разницу, а витрина с лидами и сделками рядом показывает ее сразу. Рассылка дает самый дешевый результат, но ее бюджет мал, и масштабировать канал по этой строке нельзя без проверки, выдержит ли аудитория больший объем.
Эти цифры считаются по выручке без себестоимости, поэтому для решения о бюджете нужна маржа, которую добавляют отдельным слоем, как в разборе юнит-экономики, а логику показателей объясняет статья про маркетинговую аналитику и ROMI. Единое определение выручки тоже задается в витрине, и разницу видно на примере. Допустим, что по CRM выручка составила 1 500 000 рублей, а по оплатам 1 230 000. Разрыв в 270 000 рублей, около 22% от оплат, и без витрины каждый отчет выберет свою версию. В витрине принимают одно определение, например оплаченная сумма, а сумму сделок хранят отдельной колонкой.

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

Ошибки при сборке повторяются из проекта в проект, и большинство из них видно по симптомам. Таблица ниже поможет узнать их раньше, чем о них расскажут пользователи.
| Ошибка | Как проявляется | Что делать |
|---|---|---|
| Витрина для всех сразу | Сотни колонок, никто не знает, какая правильная | Ограничить витрину одним вопросом и пятью цифрами |
| Нет зерна | Суммы удваиваются после соединения таблиц | Записать зерно и проверить дубли по нему |
| Два определения одного показателя | Выручка в разных отчетах отличается | Закрепить одно определение и хранить остальные в отдельных колонках |
| Нет владельца и расписания | Данные застыли, но никто не заметил | Назначить ответственного и добавить проверку свежести |
| Пустые ключи при соединении | Сделки без канала пропадают из отчета | Считать долю записей без ключа и выводить ее в отчет |
| Тихий пересчет истории | Прошлые месяцы меняются без предупреждения | Сообщать пользователям о пересборке и хранить дату расчета |
Когда витрина данных не нужна и как Analyzo берет эту работу на себя
Витрина требует владельца, расписания и проверок, поэтому ее не строят заранее. Пока источников один или два, отчет один, а смотрят его до трех человек, хватает таблицы или отчета в BI. Похожие пороги для перехода с таблиц на BI собраны в статье про дашборд в Excel. Когда сработали два признака из таблицы ниже, пора планировать витрину.
| Признак | Хватает отчета в BI или таблицы | Пора строить витрину |
|---|---|---|
| Источники | Один или два | Три и больше, с разными ключами |
| Пользователи | До трех человек | Несколько отделов, разные права |
| Определения показателей | Одно на цифру | Спорные, по версии каждого отдела |
| Скорость и нагрузка | Отчет открывается без пауз | Отчеты тормозят или нагружают рабочую базу |
| Обновление | Раз в неделю вручную | Каждый день по расписанию |
Переход обычно начинают со сборки витрины под самый спорный показатель, которую несколько недель проверяют рядом со старыми отчетами, а затем переключают на нее отчеты по одному. Переключать всю отчетность за один день рискованно, потому что ошибки обнаруживаются уже на готовых отчетах.
Для типового набора источников отдельная инженерная сборка может оказаться лишней. Платформа Analyzo подключает рекламные кабинеты, CRM и учет, приводит данные к общим названиям и считает метрики маркетинга и продаж на едином дашборде, поэтому витрину с ручным SQL для такой задачи собирать не требуется. Когда нужны нестандартные расчеты или у компании уже есть хранилище, витрину строят отдельно и обычными средствами хранилища. Для управленческих отчетов определения показателей полезно закрепить заранее, так же, как это делает управленческий учет.
Частые вопросы о витрине данных
В чем разница между витриной данных и хранилищем данных?
Хранилище собирает данные всей компании из многих источников, а витрина обслуживает одно направление и берет данные из меньшего числа источников. Часто витрина строится как срез хранилища, хотя бывает и иначе.
В чем разница между витриной и озером данных?
Озеро хранит сырые данные любого формата и определяет схему при анализе. В витрине данные уже подготовлены, структурированы и посчитаны, и отчету остается их показать.
Можно ли обойтись витринами без хранилища?
Конечно, можно. Такая витрина называется независимой и берет данные прямо из источников. Это рабочий старт для одного вопроса, но при росте числа витрин определения начинают расходиться, и тогда нужны общие справочники.
В чем разница между витриной данных и представлением в базе данных?
Представление хранит только запрос и выполняет его при каждом обращении. Витрина может быть реализована как представление, как материализованное представление с сохраненным результатом или как обычная таблица, которую обновляют по расписанию.
Что такое зерно витрины и почему его фиксируют раньше остального?
Зерно определяет, что означает одна строка таблицы, например день и канал. Все измерения и факты должны соответствовать ему, поэтому его фиксируют до остального проектирования.
Что выбрать для аналитики, звезду или снежинку?
Для аналитики обычно выбирают звезду. Плоские измерения проще для пользователей, а в снежинке из-за нормализации появляются лишние соединения, которые могут замедлять запросы.
Одна витрина на всю компанию или несколько?
Несколько, по областям вроде маркетинга, продаж и финансов, а общие справочники клиента, товара и календаря ведут один раз, чтобы цифры разных витрин можно было сравнивать.
Зачем витрина, если BI можно подключить прямо к базе?
Подключение к базе работает, пока таблиц немного и определения не спорят друг с другом. Когда отчетов становится много, каждый считает показатели по-своему и нагружает рабочую систему, и тогда расчет выносят в витрину.
С чего начать сборку
Выберите один вопрос бизнеса, на который сейчас отвечают в нескольких версиях. Чаще всего это выручка или эффективность рекламных каналов, и тогда выпишите пять цифр, которые нужны для ответа, найдите источник каждой, а затем запишите зерно и определения показателей на одной странице. Если страница получилась, самая трудная часть работы сделана.
Дальше соберите первую версию на одном-двух источниках и подключите к ней дашборд. Сверьте итоги с учетом, добавьте проверку дублей и свежести и назначьте владельца. Следующие источники добавляйте по одному, и каждый раз проверяйте, что итоги не разошлись. Расширять витрину надо только тогда, когда пользователи уже доверяют первой версии.
Подключите источники и соберите единый дашборд в Analyzo, чтобы определения показателей и данные маркетинга и продаж собирались в одном месте.