No-Code конструктор запросов
Помимо слоя Датасет/Чарт, виджет можно собрать напрямую — визуально, без написания SQL, через No-Code конструктор запросов.
Эндпоинты
| Маршрут | Назначение |
|---|---|
POST /api/dashboards/builder/schema |
вернуть схему БД для конструктора (таблицы, колонки, подсказанные связи) |
POST /api/dashboards/builder/suggest_joins |
эвристическая подсказка JOIN'ов по именам колонок |
POST /api/dashboards/builder/compile |
скомпилировать визуальную спецификацию (QuerySpec) в SQL |
POST /api/dashboards/builder/preview |
скомпилировать и сразу выполнить (read-only), вернуть превью строк |
Сохранённые связи между таблицами
Угадывать JOIN по именам колонок каждый раз, когда уже известно, что orders.customer_id — это внешний ключ на customers.id, избыточно. POST /api/dashboards/relations сохраняет такую связь один раз (в table_relations.json, привязана к конкретной БД); сохранённая связь предлагается в ответе /builder/schema раньше эвристики по именам. POST /api/dashboards/relations/test даёт проверить связь перед сохранением — компилирует и выполняет предложенный JOIN как агрегатный COUNT через тот же read-only исполнитель, что и весь остальной модуль, и возвращает либо число совпадений, либо внятную причину, почему запрос не собрался или не выполнился.
Единственный источник, который умеет глобальные фильтры
Виджет, построенный через No-Code спецификацию — единственный тип, на который дашборд может безопасно домонтировать глобальный фильтр: для этого достаточно добавить условие в копию спецификации, не трогая текст запроса. У виджетов на сыром SQL (ручном или от AI-ассистента) глобальные фильтры не применяются — переписывать произвольный SQL-текст, чтобы безопасно вставить в него WHERE, на порядок более хрупкая задача, чем расширение уже структурированной спецификации; это осознанное ограничение, а не пробел.