Настройка отправки данных в Яндекс.DataLens из 1С-Битрикс
DataLens — это BI-инструмент от Яндекса с возможностью строить дашборды на основе данных из разных источников: PostgreSQL, ClickHouse, Google Sheets, Яндекс.Метрики. Для интернет-магазина на Битриксе DataLens позволяет объединить данные из базы Битрикса (заказы, товары, пользователи) с данными из Метрики (поведение, источники трафика) и строить отчёты, которые невозможно получить ни в одной из систем по отдельности.
Прямое подключение PostgreSQL к DataLens
Самый чистый вариант: DataLens подключается напрямую к базе данных Битрикса через PostgreSQL-коннектор. Никакой дополнительной разработки не нужно — DataLens запрашивает данные напрямую из таблиц b_sale_order, b_catalog_price, b_iblock_element и других.
Требования: база данных должна быть доступна из облака Яндекса (белый IP или VPN). В настройках DataLens: «Создать подключение → PostgreSQL» → указать хост, порт (5433 по умолчанию для Битрикса), имя базы, пользователь и пароль.
Для безопасности — создать отдельного пользователя PostgreSQL с правами только на чтение нужных таблиц:
CREATE USER datalens_ro WITH PASSWORD 'strong_password';
GRANT CONNECT ON DATABASE bitrix TO datalens_ro;
GRANT USAGE ON SCHEMA public TO datalens_ro;
GRANT SELECT ON b_sale_order, b_sale_order_item,
b_iblock_element, b_catalog_price,
b_user TO datalens_ro;
Витрина данных: промежуточная таблица
Прямые запросы к таблицам Битрикса в DataLens неэффективны: таблица b_sale_order может содержать миллионы строк, а DataLens выполняет запросы каждый раз при открытии дашборда. Лучше создать витрину данных — агрегированную таблицу, которая обновляется по расписанию:
CREATE TABLE datalens_orders_daily AS
SELECT
DATE_TRUNC('day', DATE_INSERT)::DATE AS order_date,
CURRENCY AS currency,
COUNT(*) AS orders_count,
SUM(PRICE) AS revenue,
SUM(PRICE_DELIVERY) AS delivery_total,
AVG(PRICE) AS avg_order_value
FROM b_sale_order
WHERE CANCELED = 'N'
GROUP BY 1, 2;
CREATE INDEX idx_datalens_od_date ON datalens_orders_daily(order_date);
Обновление витрины через агент Битрикса раз в час:
// В init.php
function UpdateDataLensOrdersVitrine() {
global $DB;
$DB->Query("
INSERT INTO datalens_orders_daily
SELECT DATE_TRUNC('day', DATE_INSERT)::DATE, CURRENCY,
COUNT(*), SUM(PRICE), SUM(PRICE_DELIVERY), AVG(PRICE)
FROM b_sale_order
WHERE CANCELED = 'N'
AND DATE_INSERT >= NOW() - INTERVAL '2 days'
GROUP BY 1, 2
ON CONFLICT (order_date, currency) DO UPDATE
SET orders_count = EXCLUDED.orders_count,
revenue = EXCLUDED.revenue
", false, 'FILE', __LINE__);
return \CAgent::DEFAULT_PERIOD;
}
Подключение Яндекс.Метрики как второго источника
DataLens умеет подключаться к Яндекс.Метрике напрямую — это ключевое преимущество для объединения данных. В DataLens: «Создать подключение → Яндекс.Метрика» → ввести номер счётчика и OAuth-токен.
После создания двух подключений (PostgreSQL + Метрика) в DataLens можно создать датасет с JOIN-запросом: например, связать order_date из витрины заказов с датой из Метрики и видеть на одном графике выручку и трафик — сразу понятно, какие рекламные кампании дают реальную выручку, а не просто клики.
Экспорт событий в ClickHouse через Битрикс
Для более серьёзной аналитики — события из Битрикса (добавления в корзину, начало оформления, брошенные заказы) отправляются в ClickHouse через Kafka или напрямую через HTTP API ClickHouse. DataLens подключается к ClickHouse и строит воронки продаж в реальном времени. Это уже уровень EnterpriseAnalytics, но архитектурно Битрикс готов к этому — нужны обработчики событий модуля sale и фоновая отправка через очередь.







