Оформление
Датасеты
Датасет — набор данных для анализа, собранный поверх одного или нескольких источников. В нём вы выбираете нужные таблицы, описываете связи между ними и настраиваете поля. Виджеты строятся не на источнике напрямую, а на датасете.
Как создать датасет
- Откройте раздел Датасеты и нажмите Создать датасет.
- В левой панели нажмите Добавить источник. Откроется окно со всеми источниками проекта: слева фильтр по категориям («База данных», «Файлы») со счётчиками, сверху поиск по имени, хосту и базе, справа — флажки и кнопка Выбрать всё. Отметьте один или несколько источников и нажмите Добавить — их таблицы появятся в панели.
- Перетащите нужные таблицы на холст.
- Свяжите таблицы между собой, если их несколько.
- Задайте Название в правой панели и нажмите Сохранить.

Счётчики в правой панели показывают, из чего собран датасет: сколько блоков (таблиц), связей и SQL-блоков в нём сейчас.
Кнопка История в верхней панели — это отмена и повтор действий текущего сеанса редактирования (Ctrl+Z и Ctrl+Shift+Z), а не журнал версий датасета.
Таблицы на холсте
Каждая таблица на холсте — это блок с перечнем колонок и их типов. Одна из таблиц отмечена звёздочкой: это главная таблица датасета, от неё строится соединение остальных.
Выделите блок, чтобы в правой панели открылись его свойства: Псевдоним (под каким именем таблица участвует в датасете), исходная таблица и список колонок.
SQL-блок
Кроме таблиц в датасет можно добавить SQL-блок — произвольный запрос, результат которого участвует в датасете наравне с таблицей. Так берут данные, которых нет в источнике готовыми: предагрегат, объединение через UNION, хитрый расчёт.
- Нажмите Создать SQL-блок внизу левой панели.
- Задайте Название — под ним блок будет виден на холсте и в списке таблиц.
- Напишите запрос в поле SQL-запрос. Редактор подсвечивает синтаксис, нумерует строки и подсказывает ключевые слова и объекты базы, а слева стоит дерево таблиц источника, чтобы свериться с именами.
- Нажмите Превью и проверьте результат: колонки с типами и первые строки. Чтобы выполнить только часть запроса, выделите её перед нажатием.
- Нажмите Создать — блок появится на холсте, а колонки результата станут его полями.

Диалект — тот же, что у источника: запрос уходит в базу как есть.
Проверяйте запрос до создания
Кнопка Создать не проверяет запрос — она сохраняет его как есть. Нажмите Превью: если запрос ошибочный, вы увидите это сразу, а не при построении первого виджета.
Рядом с редактором есть AI-помощник — он пишет запрос по описанию задачи, см. AI-помощник.
На холсте SQL-блок отличается от таблицы значком <>, а в левой панели такие блоки собраны в отдельную группу SQL над списком таблиц источника. У блока три кнопки: звёздочка — сделать главным, карандаш — вернуться к редактированию запроса, крестик — убрать с холста.

Связи для SQL-блоков не создаются сами
Таблицы платформа может связать по внешним ключам, а результат SQL-блока — нет: у запроса нет ключей. Если блок нужно соединить с другой таблицей, задайте связь вручную.
Связи между таблицами
Чтобы связать таблицы, перетащите мышью кружок рядом с полем одной таблицы на поле другой. На линии связи платформа покажет её тип — например, 1 : M.
Связи нужны, чтобы платформа знала, как соединять данные при построении виджета: например, подставить название товара из справочника к строке заказа.
Щёлкните по линии связи — в правой панели откроются её параметры:
- Условие — какие поля сравниваются и каким оператором (
=,≠,<,>,≤,≥). - Способ связи —
RelationилиJOIN. - Кардинальность —
1 : 1,1 : MилиM : 1(только дляRelation).
Relation или JOIN
Разница не в том, какой SQL получится, а в том, проверяет ли платформа корректность агрегации.
Relation | JOIN | |
|---|---|---|
| Кардинальность | задаётся и учитывается | не задаётся |
| Проверка на задвоение сумм | есть | нет |
| Когда виджет не построится | если связь размножает строки | никогда, ответственность на вас |
| Тип соединения | внутреннее, левое, правое, полное | внутреннее, левое, правое, полное |
Relation — выбор по умолчанию: платформа знает, сколько строк соответствует строке, и не даст построить виджет, в котором суммы задвоятся. JOIN — «сделай как сказано»: проверки отключены целиком.
JOIN не защищает от задвоения сумм
Проверено на демо-датасете: со связью Relation и кардинальностью 1 : M платформа отказывается строить виджет, а тот же 1 : M, переключённый на JOIN, строится молча. Совпали ли при этом цифры — зависит только от данных: если справочник действительно содержит дубли по ключу, выручка вырастет на пустом месте, и никакого предупреждения не будет.
Берите JOIN, только когда точно знаете, что делаете, — например, соединяете две таблицы фактов и сами следите за уровнем детализации.
Какую кардинальность выбрать
Кардинальность описывает, сколько строк одной таблицы соответствует строке другой, — а не то, как выглядят поля в условии. Для связи таблицы фактов со справочником (заказы → товары) правильное значение — M : 1: у одного товара много заказов, а у каждого заказа ровно один товар.
Платформа проставляет обратное значение
При перетаскивании от таблицы фактов к справочнику подставляется 1 : M. С такой настройкой виджет не построится:
Измерение [products] имеет грейн мельче меры [orders]; агрегация неоднозначна
Читается это так: «поле, по которому вы разрезаете данные, лежит в таблице, которая размножает строки таблицы с мерой». Лечится сменой кардинальности на M : 1.
1 : 1 безопасна всегда — платформа считает, что строке соответствует ровно одна строка. Но ставить её «чтобы прошло» не стоит: если в справочнике окажутся дубли, суммы задвоятся, а предупреждения уже не будет.
Многие ко многим
Вариант M : M в интерфейсе не предлагается, и не случайно: одной связью такое отношение не выражается. Попытка задать его через API оканчивается отказом:
Связь many_to_many между [orders] и [products] на одном ребре не поддерживается; смоделируйте мост (две связи)
Мост — это промежуточная таблица, где каждая строка соединяет одну запись слева с одной справа. К ней ведут две обычные связи M : 1, и обе стороны остаются однозначными.
Сколько размножающих связей допускается
В одной группе мер допускается не более одной связи, размножающей строки, и только если её таблица нужна лишь для перехода — то есть служит мостом и сама не участвует ни в измерениях, ни в мерах. Две и более дадут отказ:
Обнаружено несколько связей-размножений (2) в одной группе мер (chasm trap); агрегация мер неоднозначна
Это классическая ловушка: две таблицы фактов, подвешенные к одному справочнику, при наивном соединении перемножают строки друг друга. Разносите такие меры по разным виджетам или сводите их заранее в SQL-блоке.
Данные и схема
Нижняя панель показывает содержимое выбранной таблицы:
- Превью данных — строки из источника. Нажмите Загрузить данные, чтобы выполнить запрос, либо включите Автообновление, чтобы данные подтягивались автоматически.
- Схема — состав полей.
В списке датасетов рядом с режимом материализации есть колонка Данные обновлены — время последней успешной сборки витрины. У датасета в режиме прямого запроса и у того, который ещё ни разу не собирали, там стоит прочерк.
Материализация
В правой панели выбирается, откуда виджеты берут данные:
| Режим | Как работает | Когда подходит |
|---|---|---|
| Прямой запрос | Каждый виджет обращается к источнику в момент открытия. Данные всегда актуальны, нагрузка ложится на источник | Небольшие объёмы, требуется актуальность |
| Извлечение | Данные выгружаются в хранилище платформы, виджеты читают готовый снимок. Быстро, но данные обновляются по расписанию | Большие объёмы, тяжёлые запросы к источнику |
Для режима «Извлечение» настраиваются стратегия загрузки, расписание и форма хранения витрины — кнопка Синхронизация в верхней панели. Подробнее — в разделе Синхронизация и ETL.
Что меняется при переключении
Разница видна на простом опыте. В источник добавили заказ на 5 млн:
| Режим | Что показывает виджет |
|---|---|
| Извлечение, витрина не пересобрана | старую сумму — новый заказ не виден |
| Извлечение, после пересборки | новую сумму, в журнале 1285 прочитанных строк вместо 1284 |
| Прямой запрос | новую сумму сразу, ничего запускать не нужно |
Удалили заказ из источника — прямой запрос тут же вернулся к прежней сумме, а витрина осталась бы с ним до следующей пересборки.
Отсюда правило: в режиме извлечения свежесть данных равна времени последней сборки. Если пользователи жалуются, что цифры не сходятся с учётной системой, посмотрите журнал запусков в окне Синхронизация, прежде чем искать ошибку в датасете.
У нового датасета по умолчанию выбрано «Извлечение»
Только что созданный датасет заводится в режиме извлечения, то есть рассчитывает на витрину в хранилище платформы. Если вам нужны всегда свежие данные напрямую из источника, переключите режим на Прямой запрос сразу, до сборки виджетов.
Настройка полей
Кнопка Настройка полей в верхней панели открывает работу с полями датасета: их названия, типы, агрегации по умолчанию и вычисляемые поля. Подробнее — в разделе Поля и вычисляемые поля.
Видимость строк
Кнопка Видимость строк задаёт правила, по которым разные пользователи видят разные строки одного и того же датасета — например, менеджер видит только свой регион. Подробнее — в разделе Управление доступом.
Что дальше
На готовом датасете строятся виджеты — конкретные визуализации.