179 lines
7.8 KiB
Markdown
179 lines
7.8 KiB
Markdown
# Структура аналитики: SQL и Power BI
|
||
|
||
Справочник, объединяющий правила из `context/*.md` со структурой БД и PBI-модели.
|
||
|
||
---
|
||
|
||
## 1. Правила данных (01_DATA_RULES)
|
||
|
||
| Правило | Описание |
|
||
|---------|----------|
|
||
| Stock quantity | Только поле `quantity`. **Никогда** не использовать `sellable_stock` в расчётах остатков |
|
||
| MP stock | Остатки маркетплейса считаются отдельно и добавляются при необходимости |
|
||
| Входящие заказы | Статусы: `В пути`, `В производстве`, `Выгружен на складе`, `Согласован` |
|
||
| Интервалы дат | Формат `[start, end)` (полуоткрытый интервал) при агрегации |
|
||
|
||
---
|
||
|
||
## 2. Глоссарий (02_GLOSSARY)
|
||
|
||
| Термин | Значение |
|
||
|--------|----------|
|
||
| Stock (шт) | Физическое количество по полю `quantity` |
|
||
| Stock (руб) | Денежная оценка остатков |
|
||
| MP | Marketplace (маркетплейс) |
|
||
| Data mart | SQL view/table, подготовленная для аналитики |
|
||
|
||
---
|
||
|
||
## 3. SQL: Таблицы (analytics schema)
|
||
|
||
### 3.1 Дефицит и прогноз
|
||
|
||
| Таблица | Назначение | Ключевые поля |
|
||
|---------|------------|---------------|
|
||
| `analytics.forecast` | Прогноз спроса по месяцам | scenario_id, 1c_id, code, month, value |
|
||
| `analytics.deficit_proposal` | Рекомендации к заказу по дефициту | place_month, arrival_month, order_qty |
|
||
| `analytics.stock_plan_by_arrival` | План по месяцам прихода | opening, inbound_confirmed, inbound_deficit, forecast_demand, closing |
|
||
| `analytics.forecast_scenarios` | Сценарии прогноза | scenario_id, name |
|
||
| `analytics.seasonality_groups` | Сезонность по группам (для sp_build_forecast_s4_by_group) | — |
|
||
| `stg.forecast_load` | Staging загрузки прогноза из Excel | — |
|
||
|
||
### 3.2 Справочники и остатки (pbi schema)
|
||
|
||
| Таблица | Назначение |
|
||
|---------|------------|
|
||
| `pbi.nomenclature` | Номенклатура (minAvailableQty для minAvailable) |
|
||
| `pbi.groups` | Группы (path для group_path) |
|
||
| `pbi.w_ostatok_da_net` | Остаток на дату (для opening_qty) |
|
||
|
||
---
|
||
|
||
## 4. SQL: Представления (Views)
|
||
|
||
| View | Назначение | Источники |
|
||
|------|------------|-----------|
|
||
| `analytics.get_orders_by_group` | Входящие заказы по группе | Заказы со статусами 01_DATA_RULES |
|
||
| `analytics.get_quantity_by_group` | Остаток склада по группе | quantity (не sellable_stock) |
|
||
| `analytics.get_mp_quantity_by_group` | MP-остатки по группе | — |
|
||
| `analytics.get_forecast_by_group` | Прогноз по группе | analytics.forecast |
|
||
| `analytics.get_forecast_scenarios` | Сценарии прогноза | analytics.forecast_scenarios |
|
||
| `analytics.deficit_orders` | Заказы по дефициту с ценой и суммой | deficit_proposal + nomenclature (status='Дефицит') |
|
||
|
||
---
|
||
|
||
## 5. SQL: Хранимые процедуры
|
||
|
||
### 5.1 Цепочка дефицита (06_DEFICIT_FORECAST)
|
||
|
||
```
|
||
forecast → sp_build_deficit_proposal → deficit_proposal
|
||
↑ ↓
|
||
stock + inbound + │ sp_rebuild_stock_plan_by_arrival
|
||
minAvail └──────────────────── stock_plan_by_arrival
|
||
```
|
||
|
||
### 5.2 Процедуры
|
||
|
||
| Процедура | Назначение | Параметры по умолчанию |
|
||
|-----------|------------|------------------------|
|
||
| `sp_build_deficit_proposal` | Дефицит и рекомендации к заказу | @scenario_id=4, @group_path='', @lead_time_m=4, @cover_months=6 |
|
||
| `sp_rebuild_stock_plan_by_arrival` | План остатков по месяцам прихода | @scenario_id, @from_month, @to_month |
|
||
| `sp_run_deficit_all_skus` | Пересчёт дефицита по всем SKU | Вызывает sp_build_deficit_proposal с group_path='' |
|
||
| `create_forecast_loop` | Цикл по группам (lvl=2) | — |
|
||
| `sp_build_forecast_s4_by_group` | Прогноз по группе (rate×дни×seasonal_koef) | Вставляет в forecast |
|
||
| `sp_загрузка_прогноза_закупки` | Загрузка прогноза из Excel | forecast scenario_id=8 |
|
||
|
||
### 5.3 Рекомендуемый порядок выполнения
|
||
|
||
1. **Прогноз:** `create_forecast_loop` ИЛИ `sp_build_forecast_s4_by_group` ИЛИ `sp_загрузка_прогноза_закупки`
|
||
2. **Дефицит:** `sp_build_deficit_proposal` ИЛИ `sp_run_deficit_all_skus`
|
||
3. **План:** `sp_rebuild_stock_plan_by_arrival` (читает deficit_proposal; п.2 должен быть выполнен первым)
|
||
|
||
### 5.4 Формула closing (stock_plan_by_arrival)
|
||
|
||
```
|
||
closing = opening + inbound_confirmed + inbound_deficit - forecast_demand
|
||
```
|
||
|
||
---
|
||
|
||
## 6. Power BI: Модель (TMDL)
|
||
|
||
### 6.1 Таблицы модели (PBI QueryOrder)
|
||
|
||
| Таблица | Источник |
|
||
|---------|----------|
|
||
| Номенклатура | Sql.Database |
|
||
| Партнер | Sql.Database |
|
||
| Стоимость МП | Sql.Database |
|
||
| Основной отчет | Sql.Database |
|
||
| Группы | Sql.Database |
|
||
| Остатки | Sql.Database |
|
||
| Закупки | Sql.Database |
|
||
| Заявки на оплату | Sql.Database |
|
||
| План продаж менеджеров | Sql.Database |
|
||
| План продаж по группам | Sql.Database |
|
||
| Менеджеры | Sql.Database |
|
||
| mp остатки | Sql.Database |
|
||
| mp аналитика продаж | Sql.Database |
|
||
| ПРАЙСлист | Sql.Database |
|
||
| Заказы все | Sql.Database |
|
||
| ... (см. model.tmdl) | — |
|
||
|
||
### 6.2 Связи и меры
|
||
|
||
- Связи: `relationships.tmdl`
|
||
- Меры: `expressions.tmdl`, таблицы `.tmdl` в `Model/tables/`
|
||
- Культура: ru-RU
|
||
- Compatibility level: 1600
|
||
|
||
---
|
||
|
||
## 7. Workflow: Trace Measure (03_WORKFLOWS, 05_OUTPUT_FORMATS)
|
||
|
||
### Последовательность
|
||
|
||
1. Найти меру в TMDL
|
||
2. Показать DAX
|
||
3. Указать зависимые меры/таблицы
|
||
4. Извлечь SQL source из partition (Sql.Database, Schema, Item или Query)
|
||
5. Сформировать объяснение
|
||
|
||
### Формат вывода
|
||
|
||
1. Measure Name
|
||
2. DAX Formula
|
||
3. Dependencies
|
||
4. SQL Source (server, database, schema, object)
|
||
5. Business Explanation
|
||
6. Usage Recommendations
|
||
7. Validation Checks
|
||
|
||
---
|
||
|
||
## 8. Workflow: Trace Deficit / Forecast
|
||
|
||
1. Прогноз → `sp_build_deficit_proposal` → deficit_proposal
|
||
2. deficit_proposal + forecast + inbound → `sp_rebuild_stock_plan_by_arrival` → stock_plan_by_arrival
|
||
3. order_qty = прогноз окна [T .. T+cover); дефицит при net_stock < minAvailable
|
||
|
||
---
|
||
|
||
## 9. Knowledge Base Policy (04_KB_POLICY)
|
||
|
||
- Новая документация — черновик
|
||
- Только утверждённое содержание — в общую базу знаний
|
||
- Хранить в `/docs/metrics`
|
||
- Каждая статья: DAX, SQL lineage, бизнес-объяснение
|
||
|
||
---
|
||
|
||
## 10. AI Architect (00_SYSTEM)
|
||
|
||
- Трассировка мер от TMDL к SQL
|
||
- Структурированные объяснения метрик
|
||
- Соблюдение правил данных
|
||
- **Не придумывать** объекты схемы — только из файлов проекта
|
||
- Трассировка дефицита/прогноза с процедурами
|