Налаштування експорту даних у Yandex DataLens з 1С-Бітрікс
DataLens — це BI-інструмент від Yandex з можливістю побудови дашбордів на основі даних з різних джерел: PostgreSQL, ClickHouse, Google Sheets, Yandex.Метрика. Для інтернет-магазину на Бітриксі DataLens дозволяє об'єднати дані з бази Бітрикса (замовлення, товари, користувачі) з даними Метрики (поведінка, джерела трафіку) і побудувати звіти, які неможливо отримати ні з однієї системи окремо.
Прямий зв'язок PostgreSQL до DataLens
Найбільш чистий варіант: DataLens підключається прямо до бази даних Бітрикса через коннектор PostgreSQL. Не потрібна ніяка додаткова розробка — DataLens запитує дані безпосередньо з таблиць b_sale_order, b_catalog_price, b_iblock_element та інших.
Вимоги: база даних повинна бути доступна з хмари Yandex (білий 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;
}
Підключення Yandex.Метрики як другого джерела
DataLens вміє підключатися до Yandex.Метрики безпосередньо — це ключова перевага для об'єднання даних. В DataLens: "Створити з'єднання → Yandex.Метрика" → ввести номер лічильника та OAuth-токен.
Після створення двох з'єднань (PostgreSQL + Метрика) в DataLens можна створити набір даних із JOIN-запитом: наприклад, пов'язати order_date з вітрини замовлень з датою з Метрики та бачити на одному графіку виручку та трафік — одразу зрозуміло, які рекламні кампанії дають реальну виручку, а не просто клацання.
Експорт подій у ClickHouse через Бітрікс
Для більш серйозної аналітики — події з Бітрикса (додавання в кошик, початок оформлення, збовтані замовлення) відправляються до ClickHouse через Kafka або безпосередньо через HTTP API ClickHouse. DataLens підключається до ClickHouse і будує воронки продажу в реальному часі. Це вже рівень EnterprisAnalytics, але архітектурно Бітрікс готовий до цього — потрібні обробники подій модуля sale та фонова відправка через чергу.







