fix(superset): 5-минутные бакеты вместо часовых в графике динамики
- Зачем:
- все события стенда укладываются в ~50 минут (20:51–21:41 28.11.2022),
поэтому часовая гранулярность давала всего 2 точки и прямую диагональ,
которая читалась как ошибка расчёта и ничему не учила менти.
- Что:
- time_grain_sqla переведён с PT1H на PT5M (~10 точек, реальная форма трафика).
- чарт переименован «Events by Hour» → «Events over Time» (идемпотентно через
previous_slice_names), т.к. «by Hour» противоречит 5-минутным бакетам.
- синхронизированы README, SUPERSET_DASHBOARD.md и урок 6.
- Проверка:
- python3 -m py_compile superset/create_dashboard.py.
- make superset-dashboard (идемпотентно, чарт ID 5 переименован, 10 чартов).
- визуально через playwright-cli: кривая ~11 точек 20:50–21:40, консоль чистая.
This commit is contained in:
@@ -271,7 +271,7 @@ make superset-dashboard
|
|||||||
| Блок | Чарты | Датасет |
|
| Блок | Чарты | Датасет |
|
||||||
|------|-------|---------|
|
|------|-------|---------|
|
||||||
| **KPI** | Total Events, Unique Users, Avg Events/Visit, Conversion to /confirmation | `v_events_enriched` |
|
| **KPI** | Total Events, Unique Users, Avg Events/Visit, Conversion to /confirmation | `v_events_enriched` |
|
||||||
| **Динамика** | Events by Hour (timeline), Traffic by Device (pie) | `v_events_enriched` |
|
| **Динамика** | Events over Time (timeline), Traffic by Device (pie) | `v_events_enriched` |
|
||||||
| **География** | Geography Map по странам | `v_events_enriched` |
|
| **География** | Geography Map по странам | `v_events_enriched` |
|
||||||
| **Маркетинг** | UTM Effectiveness Table, Page Funnel | `v_utm_effectiveness`, `v_top_pages_daily` |
|
| **Маркетинг** | UTM Effectiveness Table, Page Funnel | `v_utm_effectiveness`, `v_top_pages_daily` |
|
||||||
| **Слои** | Rows by Layer (event) — прохождение строк STG→ODS→DDS→DM | `dq_summary` |
|
| **Слои** | Rows by Layer (event) — прохождение строк STG→ODS→DDS→DM | `dq_summary` |
|
||||||
|
|||||||
@@ -67,7 +67,9 @@ KPI разложены в одну строку по 12-колоночной с
|
|||||||
`user_domain_id` и `click_id` идут 1:1 и дают то же число, что `Unique Users`.
|
`user_domain_id` и `click_id` идут 1:1 и дают то же число, что `Unique Users`.
|
||||||
|
|
||||||
#### Динамика трафика
|
#### Динамика трафика
|
||||||
- **📅 Events by Hour** — линейный график событий по часам
|
- **📅 Events over Time** — линейный график событий с 5-минутными бакетами
|
||||||
|
(все события стенда укладываются в ~50 минут, поэтому часовая гранулярность
|
||||||
|
давала бы всего 2 точки и прямую линию)
|
||||||
- **📱 Traffic by Device** — pie chart распределения по устройствам
|
- **📱 Traffic by Device** — pie chart распределения по устройствам
|
||||||
|
|
||||||
#### География
|
#### География
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ http://localhost:8088/superset/dashboard/1/
|
|||||||
|
|
||||||
- KPI сверху: `Total Events`, `Unique Users`, `Avg Events/Visit`,
|
- KPI сверху: `Total Events`, `Unique Users`, `Avg Events/Visit`,
|
||||||
`Conversion to /confirmation`;
|
`Conversion to /confirmation`;
|
||||||
- динамика: `Events by Hour`, `Traffic by Device`;
|
- динамика: `Events over Time`, `Traffic by Device`;
|
||||||
- география: `Geography Map`;
|
- география: `Geography Map`;
|
||||||
- маркетинг: `UTM Effectiveness Table`, `Page Funnel`;
|
- маркетинг: `UTM Effectiveness Table`, `Page Funnel`;
|
||||||
- прохождение строк по слоям: `Rows by Layer (event)`.
|
- прохождение строк по слоям: `Rows by Layer (event)`.
|
||||||
|
|||||||
@@ -103,12 +103,17 @@ CHARTS_CONFIG = [
|
|||||||
},
|
},
|
||||||
# Динамика
|
# Динамика
|
||||||
{
|
{
|
||||||
"slice_name": "📅 Events by Hour",
|
"slice_name": "📅 Events over Time",
|
||||||
|
"previous_slice_names": ["📅 Events by Hour"],
|
||||||
|
# Все события стенда укладываются в ~50 минут (20:51–21:41 28.11.2022),
|
||||||
|
# поэтому часовая гранулярность давала всего 2 точки и прямую линию,
|
||||||
|
# читавшуюся как ошибка. 5-минутные бакеты дают ~10 точек — реальную
|
||||||
|
# форму трафика. Поэтому и название не «by Hour», а «over Time».
|
||||||
"viz_type": "echarts_timeseries_line",
|
"viz_type": "echarts_timeseries_line",
|
||||||
"dataset_name": "v_events_enriched",
|
"dataset_name": "v_events_enriched",
|
||||||
"params": {
|
"params": {
|
||||||
"granularity_sqla": "event_ts",
|
"granularity_sqla": "event_ts",
|
||||||
"time_grain_sqla": "PT1H",
|
"time_grain_sqla": "PT5M",
|
||||||
"metrics": [
|
"metrics": [
|
||||||
{
|
{
|
||||||
"expressionType": "SQL",
|
"expressionType": "SQL",
|
||||||
@@ -283,7 +288,7 @@ DASHBOARD_ROWS = [
|
|||||||
[("📊 Total Events", 3), ("👤 Unique Users", 3),
|
[("📊 Total Events", 3), ("👤 Unique Users", 3),
|
||||||
("📈 Avg Events/Visit", 3), ("🎯 Conversion to /confirmation", 3)],
|
("📈 Avg Events/Visit", 3), ("🎯 Conversion to /confirmation", 3)],
|
||||||
# Динамика во времени + разрез по устройствам
|
# Динамика во времени + разрез по устройствам
|
||||||
[("📅 Events by Hour", 8), ("📱 Traffic by Device", 4)],
|
[("📅 Events over Time", 8), ("📱 Traffic by Device", 4)],
|
||||||
# География + эффективность маркетинговых каналов
|
# География + эффективность маркетинговых каналов
|
||||||
[("🌍 Geography Map", 6), ("🔗 UTM Effectiveness Table", 6)],
|
[("🌍 Geography Map", 6), ("🔗 UTM Effectiveness Table", 6)],
|
||||||
# Популярные страницы + прохождение строк по слоям
|
# Популярные страницы + прохождение строк по слоям
|
||||||
|
|||||||
Reference in New Issue
Block a user