Розробка конструктора звітів (Report Builder) на сайті

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка конструктора звітів (Report Builder) на сайті
Складна
~2-4 тижні
Часті питання

Наші компетенції:

Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Розробка конструктора звітів

Конструктор звітів—це UI, який дозволяє користувачам самостійно формувати запит до даних: вибирати поля, фільтри, групування, тип візуалізації—та зберігати як назване звіти. На відміну від Pivot Table, він працює на вищому рівні абстракції: користувачі оперують бізнес-поняттями (замовлення, клієнти, регіони), а не сирими полями таблиці.

Архітектура

Конструктор звітів складається з чотирьох шарів:

Metadata Layer—каталог доступних сутностей та полів із людиночитаємими назвами, типами, дозволеними агрегаціями. Серверна сторона, завантажується при ініціалізації.

Query Builder—UI для складання запиту. Клієнт збирає конфіг запиту.

Query Engine—сервер перетворює конфіг у SQL (або запит OLAP) та повертає дані.

Renderer—клієнт рендерить таблицю або графік.

Структура метаданих

interface FieldMeta {
  id: string;
  label: string;
  type: 'string' | 'number' | 'date' | 'boolean';
  entity: string;
  aggregatable: boolean;
  filterable: boolean;
  // Дозволені агрегації для числових полів
  aggregations?: ('sum' | 'avg' | 'count' | 'min' | 'max' | 'count_distinct')[];
}

interface EntityMeta {
  id: string;
  label: string;
  fields: FieldMeta[];
  // Доступні шляхи об'єднання
  relations?: { entity: string; via: string; label: string }[];
}

// Приклад метаданих для e-commerce
const metadata: EntityMeta[] = [
  {
    id: 'orders',
    label: 'Замовлення',
    fields: [
      { id: 'orders.created_at', label: 'Дата замовлення', type: 'date', entity: 'orders', aggregatable: false, filterable: true },
      { id: 'orders.total', label: 'Сума замовлення', type: 'number', entity: 'orders', aggregatable: true, filterable: true, aggregations: ['sum', 'avg', 'min', 'max'] },
      { id: 'orders.status', label: 'Статус', type: 'string', entity: 'orders', aggregatable: false, filterable: true },
      { id: 'orders.count', label: 'Кількість замовлень', type: 'number', entity: 'orders', aggregatable: true, filterable: false, aggregations: ['count'] },
    ],
    relations: [
      { entity: 'customers', via: 'customer_id', label: 'Клієнт' },
    ],
  },
];

Конфіг запиту

interface ReportQuery {
  entity: string;
  dimensions: string[];  // поля групування
  measures: { field: string; agg: string }[];
  filters: { field: string; operator: string; value: any }[];
  orderBy?: { field: string; desc: boolean }[];
  limit?: number;
}

Запит до SQL

function queryToSQL(query: ReportQuery, meta: EntityMeta[]): string {
  const entity = meta.find(e => e.id === query.entity)!;
  const cols = [...query.dimensions, ...query.measures.map(m => `${m.agg}(${m.field})`)];

  let sql = `SELECT ${cols.join(', ')} FROM ${query.entity}`;
  if (query.filters.length) {
    const where = query.filters.map(f => `${f.field} ${f.operator} '${f.value}'`).join(' AND ');
    sql += ` WHERE ${where}`;
  }
  if (query.dimensions.length) {
    sql += ` GROUP BY ${query.dimensions.join(', ')}`;
  }
  if (query.orderBy?.length) {
    const order = query.orderBy.map(o => `${o.field} ${o.desc ? 'DESC' : 'ASC'}`).join(', ');
    sql += ` ORDER BY ${order}`;
  }
  if (query.limit) sql += ` LIMIT ${query.limit}`;
  return sql;
}

Часова шкала

Базовий конструктор запитів з рендеруванням таблиці—5–7 днів. З збереженими звітами, плануванням та кількома типами графіків—10–14 днів.