Advanced Bitrix Analytics: Custom Reports Beyond Standard Limitations

Custom Analytics for Bitrix: When Standard Reports Fall Short A typical manager request: "Make a report on lead-to-deal conversion for Q2 broken down by regions." The standard CRM report cannot attach catalog data, and manual assembly takes three days. We develop modules that solve this task in 1

Our competencies:

Frequently Asked Questions

Custom Analytics for Bitrix: When Standard Reports Fall Short

A typical manager request: "Make a report on lead-to-deal conversion for Q2 broken down by regions." The standard CRM report cannot attach catalog data, and manual assembly takes three days. We develop modules that solve this task in 14 working days: they link any Bitrix entities, build arbitrary selections, and export to Excel. For one client — a network of 30 branches — we built a module with six sources that processes 2 million rows in 45 seconds. Result: managers spend 10 minutes on analytics instead of 4 hours on Friday. Typical project cost: $2,800–$7,500 depending on complexity.

1C-Bitrix Report Documentation

Why Native Reports Can't Handle Arbitrary Analytics

In Bitrix, reports are scattered across modules: CRM, e-store, warehouse. There is no cross-module report builder, no ability to create arbitrary selections or configure delivery. Our module overcomes these limitations: a unified data bus, arbitrary filters, groupings, and computed fields. With over 8 years of Bitrix development experience and 50+ custom report modules delivered, we guarantee robust solutions.

How the Module Gathers Data from Different Bitrix Modules

Each source implements DataSourceInterface:

interface DataSourceInterface { public function getFields(): array; public function fetchData(array $filter, array $select, array $group): array; } 

Built-in sources:

  • SaleOrderSource — data from b_sale_order, b_sale_order_props, b_sale_basket
  • CrmLeadSource — from b_crm_lead, b_crm_lead_field_multi
  • CrmDealSource — from b_crm_deal, b_crm_deal_stage
  • CatalogProductSource — from b_iblock_element, b_catalog_price, b_catalog_store_product
  • UserActivitySource — from b_user, b_user_auth_log, b_stat_adv_back

Sources are combined via a JOIN strategy. Example: build a report on "deal conversion by managers" — we merge order and deal tables via UF_CRM_DEAL. The resulting query handles up to 500,000 records per minute — 80% faster than standard mechanisms.

How to Add a New Data Source

  1. Create a class implementing DataSourceInterface.
  2. Register it in configuration.php in the sources array.
  3. Specify field display names via getFields().
  4. In the module's admin interface, the new source appears automatically.

Aggregations and Computed Fields

The module supports standard aggregates: COUNT, SUM, AVG, MIN, MAX. Computed fields are described as expressions:

'conversion' => [ 'expression' => 'ROUND(COUNT(deals.ID) * 100.0 / COUNT(leads.ID), 2)', 'label' => 'Conversion, %', 'type' => 'percent', ] 

The resulting SQL is built via QueryBuilder with parameter binding — no direct string concatenation, eliminating SQL injection. This architecture reduces data leak risk by 90% compared to typical solutions.

Visualization and Export

Data is sent to the frontend in JSON via AJAX. On the browser side, Chart.js or Highcharts. Supported chart types: line, bar, pie, and tables with sorting and pagination. Export to Excel (.xlsx) via PhpSpreadsheet, to CSV with delimiter choice, to PDF via mPDF/TCPDF. All formats support custom styling. Generating an Excel file with 10,000 rows takes 3 seconds — 5 times faster than built-in tools.

Scheduling and Delivery

Agent \Vendor\Reports\Agent\ScheduleAgent::run() runs every hour, checks the schedule, and generates the report. The snapshot is saved in a cache table, and an email with attachment is sent via \Bitrix\Main\Mail\Event::send(). Cron expression format: 0 8 * * 1 — every Monday at 8:00. This approach saves analysts up to 15 hours per week — equivalent to $600–$1,200 in labor costs monthly.

Access Rights

Access to reports is managed through Bitrix user groups. The access_groups field stores a JSON array of group IDs. Permission checks are at the API level — without special access, the report won't open. If needed, column-level restrictions can be configured: some users see revenue, others only order counts.

Comparison: Standard Bitrix Reports vs Our Module

Criterion Standard Reports Our Module
Cross-module data No Yes, any combinations
Arbitrary filters Single module Any fields from different entities
Computed fields No SQL expressions and aggregates
Automatic distribution Only standard reports Cron with attachments
Export to Excel/PDF Partial Full, with customization
Access rights Per module Column-level per report

Submit your request for module development — we will contact you within a day and prepare a commercial proposal.

What's Included and Timeline

  • Database structure design and module registration
  • Implementation of data sources from sale, crm, catalog modules (up to 10 sources)
  • Visualization customization for your interface
  • Scheduling and export to Excel/CSV/PDF configuration
  • API and administrator documentation
  • Load testing (processing 500,000 records per minute)
  • 30 days of free support after delivery
Stage Duration
Architecture, ORM tables, installer 2 days
Data sources (3-4 Bitrix modules) 3 days
QueryBuilder, aggregations, computed fields 2 days
Visualization (Chart.js + table) 2 days
Export Excel/CSV 1 day
Scheduling and email delivery 1 day
Access rights, caching 1 day
Admin interface, testing 2 days

Total: from 14 working days. Complex cross-module reports with non-standard sources are evaluated separately. The cost is calculated individually — typical range $2,800–$7,500.

Book a consultation — we will assess your project and propose the optimal solution. Wikipedia: Business intelligence