File size: 4,105 Bytes
e8697a4
 
 
 
 
8871df9
e8697a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8871df9
 
e8697a4
 
 
8871df9
e8697a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8871df9
 
 
 
 
 
e8697a4
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# Бизнес-словарь для демо-базы (data/demo/sales.sqlite)
# Загружается автоматически при подключении к демо-базе.
#
# Скопируй этот файл и переименуй под свою компанию.
# Затем загрузи через боковую панель → «Применить словарь».

company: "Демо: Интернет-магазин электроники"

# ──────────────────────────────────────────────
# СХЕМА ДЕМО-БАЗЫ (справка)
# ──────────────────────────────────────────────
# customers  : id, name, city, phone, email, created_at
# managers   : id, name, department
# products   : id, name, category, price, is_active
# orders     : id, customer_id, manager_id, AMOUNT, status, order_date
# order_items: id, order_id, product_id, quantity, price
#
# orders.amount      = итоговая сумма заказа (рублей)
# order_items.price  = цена единицы товара
# order_items.quantity = количество штук
# Итог позиции = order_items.quantity * order_items.price
# В order_items НЕТ колонки amount!

terms:
  выручка: >
    SUM(orders.amount) WHERE orders.status = 'paid'.
    Колонка amount есть только в таблице orders, не в order_items.
  оборот: "SUM(orders.amount) по всем заказам включая отменённые"
  средний чек: "AVG(orders.amount) WHERE orders.status = 'paid'"
  топ клиентов: >
    GROUP BY customers.id, customers.name ORDER BY SUM(orders.amount) DESC LIMIT N.
    JOIN customers ON orders.customer_id = customers.id WHERE orders.status = 'paid'.
  топ товаров: >
    GROUP BY products.name ORDER BY SUM(order_items.quantity) DESC LIMIT N.
    JOIN order_items ON orders.id = order_items.order_id WHERE orders.status = 'paid'.
  выручка по товарам: >
    SUM(order_items.quantity * order_items.price) GROUP BY products.name.
    Итог позиции считается как quantity * price из order_items.
  количество заказов: "COUNT(*) FROM orders WHERE status = 'paid'"
  активный товар: "products.is_active = 1"
  этот год: "strftime('%Y', orders.order_date) = strftime('%Y', 'now')"
  прошлый год: "strftime('%Y', orders.order_date) = CAST(strftime('%Y', 'now') - 1 AS TEXT)"
  этот месяц: "strftime('%Y-%m', orders.order_date) = strftime('%Y-%m', 'now')"
  конверсия: >
    CAST(SUM(CASE WHEN status='paid' THEN 1 ELSE 0 END) AS REAL) / COUNT(*) * 100 FROM orders.

filters:
  только_оплаченные: "orders.status = 'paid'"
  только_активные_товары: "products.is_active = 1"

notes:
  - "КРИТИЧНО: колонка 'amount' существует ТОЛЬКО в таблице 'orders'. В 'order_items' её НЕТ."
  - "order_items содержит колонки: id, order_id, product_id, quantity, price. Никакой колонки amount."
  - "Стоимость позиции заказа = order_items.quantity * order_items.price (отдельной колонки нет)."
  - "Даты хранятся как TEXT 'YYYY-MM-DD'. Для фильтрации используй BETWEEN или strftime()."
  - "Статусы заказов: 'paid' (оплачен), 'pending' (ожидает), 'cancelled' (отменён)."
  - "Связи: orders.customer_id → customers.id, orders.manager_id → managers.id."
  - "Связи: order_items.order_id → orders.id, order_items.product_id → products.id."
  - "База данных: SQLite. Функции дат: strftime('%Y', date_col), date('now', '-N days')."
  - "База содержит данные за 2025-01-01 — 2026-04-30, 8 клиентов, 4 менеджера, 10 товаров."