ini
This commit is contained in:
parent
64f8a96ba0
commit
7ac5adf509
178
analytics/STRUCTURE.md
Normal file
178
analytics/STRUCTURE.md
Normal file
@ -0,0 +1,178 @@
|
||||
# Структура аналитики: 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
|
||||
- Структурированные объяснения метрик
|
||||
- Соблюдение правил данных
|
||||
- **Не придумывать** объекты схемы — только из файлов проекта
|
||||
- Трассировка дефицита/прогноза с процедурами
|
||||
20
analytics/context/00_SYSTEM.md
Normal file
20
analytics/context/00_SYSTEM.md
Normal file
@ -0,0 +1,20 @@
|
||||
# AI Architect System Context
|
||||
|
||||
You are an AI architect for Power BI + MS SQL analytics.
|
||||
|
||||
Main responsibilities:
|
||||
- Trace measures from TMDL to SQL sources.
|
||||
- Build structured explanations of metrics.
|
||||
- Respect project data rules.
|
||||
- Never invent schema objects — always read project files.
|
||||
- Trace deficit/forecast flow (context/06_DEFICIT_FORECAST.md) with procedures.
|
||||
|
||||
Workflow:
|
||||
1. Find measure in TMDL.
|
||||
2. Extract DAX.
|
||||
3. Resolve dependencies.
|
||||
4. Extract partition/source (Sql.Database, Schema, Item or Query).
|
||||
5. Produce structured explanation.
|
||||
|
||||
Language: Russian.
|
||||
Style: structured, precise, no fluff.
|
||||
18
analytics/context/01_DATA_RULES.md
Normal file
18
analytics/context/01_DATA_RULES.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Data Rules
|
||||
|
||||
## Идентификаторы 1С (схема analytics)
|
||||
|
||||
- **`*_1c_id`** — бинарный ключ 1С (`BINARY(16)`), ссылка на `_IDRRef` справочника/документа.
|
||||
- **`*_id`** — строковый id (GUID в формате `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`) для API, поиска, отображения.
|
||||
|
||||
Пример: `contractor_1c_id` (binary) в таблице, `contractor_id` (nvarchar) в представлении для выдачи во внешние системы.
|
||||
|
||||
---
|
||||
|
||||
- Stock quantity = field 'quantity' only.
|
||||
- Never use 'sellable_stock' in stock calculations.
|
||||
- Marketplace (MP) stock is calculated separately and added if needed.
|
||||
- Orders with statuses:
|
||||
'В пути', 'В производстве', 'Выгружен на складе', 'Согласован'
|
||||
are treated as incoming stock.
|
||||
- Use date intervals as [start, end) when aggregating.
|
||||
6
analytics/context/02_GLOSSARY.md
Normal file
6
analytics/context/02_GLOSSARY.md
Normal file
@ -0,0 +1,6 @@
|
||||
# Glossary
|
||||
|
||||
- Stock (шт) — physical quantity, based on 'quantity'.
|
||||
- Stock (руб) — monetary valuation of stock.
|
||||
- MP — marketplace.
|
||||
- Data mart — SQL view/table prepared for analytics.
|
||||
23
analytics/context/03_WORKFLOWS.md
Normal file
23
analytics/context/03_WORKFLOWS.md
Normal file
@ -0,0 +1,23 @@
|
||||
# Standard Workflows
|
||||
|
||||
## Trace Measure
|
||||
1. Locate measure in TMDL.
|
||||
2. Show DAX.
|
||||
3. List dependent measures/tables.
|
||||
4. Extract SQL source from partition.
|
||||
5. Produce explanation.
|
||||
|
||||
## Trace Deficit / Forecast
|
||||
1. Читай context/06_DEFICIT_FORECAST.md.
|
||||
2. Прогноз → sp_build_deficit_proposal → deficit_proposal.
|
||||
3. deficit_proposal + forecast + inbound → sp_rebuild_stock_plan_by_arrival → stock_plan_by_arrival.
|
||||
4. order_qty = прогноз окна [T .. T+cover); дефицит при net_stock < minAvailable.
|
||||
|
||||
## Documentation Draft
|
||||
Structure:
|
||||
- Purpose
|
||||
- DAX
|
||||
- Dependencies
|
||||
- SQL sources
|
||||
- Business meaning
|
||||
- Usage notes
|
||||
6
analytics/context/04_KB_POLICY.md
Normal file
6
analytics/context/04_KB_POLICY.md
Normal file
@ -0,0 +1,6 @@
|
||||
# Knowledge Base Policy
|
||||
|
||||
- New documentation starts as draft.
|
||||
- Only approved content becomes shared knowledge.
|
||||
- Store documentation under /docs/metrics.
|
||||
- Each article must include DAX, SQL lineage and business explanation.
|
||||
11
analytics/context/05_OUTPUT_FORMATS.md
Normal file
11
analytics/context/05_OUTPUT_FORMATS.md
Normal file
@ -0,0 +1,11 @@
|
||||
# Output Formats
|
||||
|
||||
## Measure Trace Format
|
||||
|
||||
1. Measure Name
|
||||
2. DAX Formula
|
||||
3. Dependencies
|
||||
4. SQL Source (server, database, schema, object)
|
||||
5. Business Explanation
|
||||
6. Usage Recommendations
|
||||
7. Validation Checks
|
||||
133
analytics/context/06_DEFICIT_FORECAST.md
Normal file
133
analytics/context/06_DEFICIT_FORECAST.md
Normal file
@ -0,0 +1,133 @@
|
||||
# Механика расчёта дефицита поверх прогноза
|
||||
|
||||
## Общая схема
|
||||
|
||||
```
|
||||
forecast (прогноз) → sp_build_deficit_proposal → deficit_proposal
|
||||
↑ ↓
|
||||
stock + inbound + minAvail │ sp_rebuild_stock_plan_by_arrival
|
||||
│ ↓
|
||||
└──────────────────── stock_plan_by_arrival
|
||||
```
|
||||
|
||||
## Таблицы
|
||||
|
||||
| Таблица | Назначение |
|
||||
|---------|------------|
|
||||
| `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 |
|
||||
|
||||
## Процедуры
|
||||
|
||||
### 1. sp_build_deficit_proposal
|
||||
|
||||
**Назначение:** Дефицит и рекомендации к заказу с учётом прогноза по сценарию.
|
||||
|
||||
**Параметры (по умолчанию):**
|
||||
- `@scenario_id` = 4
|
||||
- `@group_path` = '' — path группы ('' = все группы)
|
||||
- `@lead_time_m` = 4 — срок поставки (мес.)
|
||||
- `@cover_months` = 6 — горизонт покрытия (мес.)
|
||||
- `@from_month` = текущий месяц
|
||||
- `@to_month_excl` = '2028-01-01'
|
||||
|
||||
**Шаги логики:**
|
||||
1. Календарь месяцев [from, to)
|
||||
2. SKU по group_path (pbi.groups.path LIKE @path + '%')
|
||||
3. Прогноз из `analytics.forecast` по scenario_id
|
||||
4. Inbound — подтверждённые заказы (get_orders_by_group): статусы В пути, В производстве, Выгружен на складе (Согласован закомментирован в коде)
|
||||
5. Stock = остаток склад (get_quantity_by_group) + MP (get_mp_quantity_by_group)
|
||||
6. Последовательность по месяцам: demand_m, inbound_m, served_m, lost_m, net_stock (рекурсивный flow)
|
||||
7. Первый месяц дефицита T: net_stock < minAvailable, месяц >= @from + lead_time
|
||||
8. Якоря: T, T+cover, T+2cover... до to_month_excl
|
||||
9. order_qty = прогноз окна [T .. T+cover) (demand_window)
|
||||
|
||||
**Результат:** INSERT в `deficit_proposal` (order_qty > 0).
|
||||
|
||||
**Источники данных:**
|
||||
- forecast ← `analytics.forecast`
|
||||
- inbound ← `analytics.get_orders_by_group`
|
||||
- stock ← `analytics.get_quantity_by_group`, `analytics.get_mp_quantity_by_group`
|
||||
- SKU/minAvail ← `pbi.nomenclature`, `pbi.groups`
|
||||
|
||||
---
|
||||
|
||||
### 2. sp_rebuild_stock_plan_by_arrival
|
||||
|
||||
**Назначение:** План остатков по месяцам прихода (opening, inbound, forecast, closing).
|
||||
|
||||
**Параметры:** @scenario_id, @from_month, @to_month
|
||||
|
||||
**Источники по CTE:**
|
||||
1. opening_qty — остаток на дату < from_month (pbi.w_ostatok_da_net)
|
||||
2. inbound_confirmed — подтверждённые заказы по месяцу прихода (get_orders_by_group: В пути, В производстве, Выгружен на складе, Согласован)
|
||||
3. inbound_deficit — SUM(order_qty) по deficit_proposal
|
||||
4. forecast_demand — SUM(value) по forecast
|
||||
|
||||
**Формула closing:**
|
||||
```
|
||||
closing = opening + inbound_confirmed + inbound_deficit - forecast_demand
|
||||
```
|
||||
|
||||
Rolling: opening для месяца M = LAG(closing) по SKU и arrival_month.
|
||||
|
||||
**Зависимость:** НЕ вызывает sp_build_deficit_proposal. Только читает deficit_proposal. Перед вызовом должен быть выполнен `sp_build_deficit_proposal` или `sp_run_deficit_all_skus`.
|
||||
|
||||
---
|
||||
|
||||
### 3. sp_run_deficit_all_skus
|
||||
|
||||
**Назначение:** Пересчёт дефицита по всем SKU (group_path = '').
|
||||
|
||||
Вызывает `sp_build_deficit_proposal` с @group_path = N''.
|
||||
|
||||
---
|
||||
|
||||
### 4. sp_загрузка_прогноза_закупки
|
||||
|
||||
**Назначение:** Загрузка прогноза из Excel/внешних источников.
|
||||
|
||||
Записывает в forecast (scenario_id = 8), при отсутствии кода — подтягивает из scenario_id = 5.
|
||||
В конце может вызывать `sp_build_deficit_proposal` (закомментировано для scenario 8).
|
||||
|
||||
---
|
||||
|
||||
### 5. create_forecast_loop
|
||||
|
||||
**Назначение:** Цикл по группам (path из pbi.groups, lvl=2).
|
||||
|
||||
Для каждого path вызывает `sp_build_forecast_s4_by_group` — наполняет forecast, **не вызывает** sp_build_deficit_proposal.
|
||||
|
||||
---
|
||||
|
||||
### 6. sp_build_forecast_s4_by_group
|
||||
|
||||
**Назначение:** Построение прогноза по группе (rate_per_day × дни × seasonal_koef).
|
||||
|
||||
Вставляет в `analytics.forecast`. Источник сезонности — `analytics.seasonality_groups`.
|
||||
|
||||
---
|
||||
|
||||
## Представления
|
||||
|
||||
| View | Источник | Назначение |
|
||||
|------|----------|------------|
|
||||
| `analytics.deficit_orders` | deficit_proposal + nomenclature | Заказы по дефициту с ценой и суммой (status='Дефицит') |
|
||||
|
||||
---
|
||||
|
||||
## Порядок выполнения (рекомендуемый)
|
||||
|
||||
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)
|
||||
|
||||
---
|
||||
|
||||
## Правила данных (дефицит)
|
||||
|
||||
- Дефицит определяется как net_stock < minAvailable (nomenclature.minAvailableQty).
|
||||
- order_qty = прогноз спроса на окно [T .. T+cover_months).
|
||||
- Статусы заказов «входящих»: см. 01_DATA_RULES. Фактически: sp_build_deficit_proposal — 3 статуса (Согласован закомментирован); sp_rebuild_stock_plan_by_arrival — 4 статуса.
|
||||
- Интервалы дат — [start, end) (полуоткрытые).
|
||||
BIN
analytics/mag_pbi/mag_pbi_schema.sql
Normal file
BIN
analytics/mag_pbi/mag_pbi_schema.sql
Normal file
Binary file not shown.
BIN
analytics/mag_pbi/procedures/mag_pbi_procedures.sql
Normal file
BIN
analytics/mag_pbi/procedures/mag_pbi_procedures.sql
Normal file
Binary file not shown.
@ -0,0 +1,48 @@
|
||||
-- =============================================================================
|
||||
-- Добавить колонку roic_norm в contractor_producer_mapping
|
||||
-- =============================================================================
|
||||
|
||||
USE [mag_pbi]
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM sys.columns
|
||||
WHERE object_id = OBJECT_ID(N'[analytics].[contractor_producer_mapping]')
|
||||
AND name = 'roic_norm'
|
||||
)
|
||||
BEGIN
|
||||
ALTER TABLE [analytics].[contractor_producer_mapping]
|
||||
ADD [roic_norm] DECIMAL(12,4) NULL;
|
||||
|
||||
EXEC sys.sp_addextendedproperty
|
||||
@name = N'MS_Description',
|
||||
@value = N'Нормированный ROIC (при торговой надбавке 100%). Рассчитывается по этапам оплаты.',
|
||||
@level0type = N'SCHEMA', @level0name = N'analytics',
|
||||
@level1type = N'TABLE', @level1name = N'contractor_producer_mapping',
|
||||
@level2type = N'COLUMN', @level2name = N'roic_norm';
|
||||
END
|
||||
GO
|
||||
|
||||
-- Обновить представление v_contractor_producer_mapping
|
||||
IF OBJECT_ID(N'[analytics].[v_contractor_producer_mapping]', N'V') IS NOT NULL
|
||||
DROP VIEW [analytics].[v_contractor_producer_mapping];
|
||||
GO
|
||||
|
||||
CREATE VIEW [analytics].[v_contractor_producer_mapping] AS
|
||||
SELECT
|
||||
m.id,
|
||||
m.contractor_1c_id,
|
||||
c.contractor_id,
|
||||
c.contractor_name,
|
||||
m.producer_1c_id,
|
||||
p.producer_id,
|
||||
p.producer_name,
|
||||
m.days_of_sales,
|
||||
m.logistics_days,
|
||||
m.roic_norm,
|
||||
m.created_at,
|
||||
m.updated_at
|
||||
FROM [analytics].[contractor_producer_mapping] m
|
||||
LEFT JOIN [analytics].[v_contractors] c ON c.contractor_1c_id = m.contractor_1c_id
|
||||
LEFT JOIN [analytics].[v_producers] p ON p.producer_1c_id = m.producer_1c_id;
|
||||
GO
|
||||
169
analytics/mag_pbi/scripts/create_contractor_producer_tables.sql
Normal file
169
analytics/mag_pbi/scripts/create_contractor_producer_tables.sql
Normal file
@ -0,0 +1,169 @@
|
||||
-- =============================================================================
|
||||
-- Скрипт: сопоставление Контрагент + Производитель с этапами оплаты
|
||||
-- Схема: analytics
|
||||
-- Источники: Контрагенты из _Reference168, Производители из _Reference260 (1С MAG_2019)
|
||||
-- =============================================================================
|
||||
|
||||
USE [mag_pbi]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 0. DROP всех сущностей (пересоздание с нуля)
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
IF OBJECT_ID(N'[analytics].[v_contractor_producer_mapping]', N'V') IS NOT NULL
|
||||
DROP VIEW [analytics].[v_contractor_producer_mapping];
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'[analytics].[tr_contractor_producer_mapping_updated]', N'TR') IS NOT NULL
|
||||
DROP TRIGGER [analytics].[tr_contractor_producer_mapping_updated];
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'[analytics].[contractor_producer_payment_stage]', N'U') IS NOT NULL
|
||||
DROP TABLE [analytics].[contractor_producer_payment_stage];
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'[analytics].[contractor_producer_mapping]', N'U') IS NOT NULL
|
||||
DROP TABLE [analytics].[contractor_producer_mapping];
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'[analytics].[v_contractors]', N'V') IS NOT NULL
|
||||
DROP VIEW [analytics].[v_contractors];
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'[analytics].[v_producers]', N'V') IS NOT NULL
|
||||
DROP VIEW [analytics].[v_producers];
|
||||
GO
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 1. Представления для списков из 1С
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
-- Контрагенты: [pbi].[ПартнерыКонтрагенты] уже существует (из _Reference168)
|
||||
-- Для удобства создаём представление analytics.v_contractors с search-friendly полями
|
||||
|
||||
CREATE VIEW [analytics].[v_contractors] AS
|
||||
|
||||
SELECT
|
||||
c._IDRRef AS contractor_1c_id, -- бинарный ключ 1С
|
||||
LOWER(CONCAT(
|
||||
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 25, 8), '-',
|
||||
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 21, 4), '-',
|
||||
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 17, 4), '-',
|
||||
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 1, 4), '-',
|
||||
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 5, 12)
|
||||
)) AS contractor_id, -- строковый id для API/поиска
|
||||
c._Description AS contractor_name
|
||||
FROM [MAG_2019].[dbo].[_Reference168] c
|
||||
WHERE c._Marked = 0;
|
||||
GO
|
||||
|
||||
-- Производители из справочника 1С _Reference260
|
||||
CREATE VIEW [analytics].[v_producers] AS
|
||||
SELECT
|
||||
pr._IDRRef AS producer_1c_id, -- бинарный ключ 1С
|
||||
LOWER(CONCAT(
|
||||
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 25, 8), '-',
|
||||
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 21, 4), '-',
|
||||
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 17, 4), '-',
|
||||
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 1, 4), '-',
|
||||
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 5, 12)
|
||||
)) AS producer_id, -- строковый id для API/поиска
|
||||
pr._Description AS producer_name
|
||||
FROM [MAG_2019].[dbo].[_Reference260] pr
|
||||
WHERE pr._Marked = 0;
|
||||
GO
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 2. Основная таблица: сопоставление Контрагент + Производитель
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
CREATE TABLE [analytics].[contractor_producer_mapping] (
|
||||
[id] INT IDENTITY(1,1) NOT NULL,
|
||||
[contractor_1c_id] BINARY(16) NOT NULL, -- бинарный ключ 1С (_Reference168)
|
||||
[producer_1c_id] BINARY(16) NOT NULL, -- бинарный ключ 1С (_Reference260)
|
||||
[days_of_sales] INT NOT NULL DEFAULT 180, -- На сколько дней продажи привезли остатков
|
||||
[logistics_days] INT NOT NULL DEFAULT 120, -- Срок логистики (дней от дня заказа)
|
||||
[roic_norm] DECIMAL(12,4) NULL, -- Нормированный ROIC (при TN 100%)
|
||||
[created_at] DATETIME2(0) NOT NULL DEFAULT GETDATE(),
|
||||
[updated_at] DATETIME2(0) NOT NULL DEFAULT GETDATE(),
|
||||
|
||||
CONSTRAINT [PK_contractor_producer_mapping] PRIMARY KEY CLUSTERED ([id] ASC),
|
||||
CONSTRAINT [UQ_contractor_producer] UNIQUE NONCLUSTERED ([contractor_1c_id], [producer_1c_id])
|
||||
);
|
||||
|
||||
EXEC sys.sp_addextendedproperty
|
||||
@name = N'MS_Description',
|
||||
@value = N'Сопоставление Контрагент (1С) + Производитель (1С). Параметры для расчёта нормированного ROIC.',
|
||||
@level0type = N'SCHEMA', @level0name = N'analytics',
|
||||
@level1type = N'TABLE', @level1name = N'contractor_producer_mapping';
|
||||
GO
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 3. Таблица этапов оплаты (неограниченное количество)
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
CREATE TABLE [analytics].[contractor_producer_payment_stage] (
|
||||
[id] INT IDENTITY(1,1) NOT NULL,
|
||||
[mapping_id] INT NOT NULL,
|
||||
[name] NVARCHAR(255) NOT NULL, -- Название этапа (Предоплата, Постоплата и т.д.)
|
||||
[days] INT NOT NULL, -- Дней от дня заказа до оплаты
|
||||
[percent] DECIMAL(9,4) NOT NULL, -- Процент от суммы (0..100)
|
||||
[sort_order] INT NOT NULL DEFAULT 0,
|
||||
|
||||
CONSTRAINT [PK_contractor_producer_payment_stage] PRIMARY KEY CLUSTERED ([id] ASC),
|
||||
CONSTRAINT [FK_payment_stage_mapping] FOREIGN KEY ([mapping_id])
|
||||
REFERENCES [analytics].[contractor_producer_mapping]([id]) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE NONCLUSTERED INDEX [IX_payment_stage_mapping_id]
|
||||
ON [analytics].[contractor_producer_payment_stage]([mapping_id] ASC);
|
||||
|
||||
EXEC sys.sp_addextendedproperty
|
||||
@name = N'MS_Description',
|
||||
@value = N'Этапы оплаты для пары Контрагент-Производитель. [{days, percent}, ...]. Сумма percent по паре должна = 100.',
|
||||
@level0type = N'SCHEMA', @level0name = N'analytics',
|
||||
@level1type = N'TABLE', @level1name = N'contractor_producer_payment_stage';
|
||||
GO
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 4. Представление для выборки с именами (для UI и API)
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
CREATE VIEW [analytics].[v_contractor_producer_mapping] AS
|
||||
SELECT
|
||||
m.id,
|
||||
m.contractor_1c_id,
|
||||
c.contractor_id, -- строковый id для API/поиска
|
||||
c.contractor_name,
|
||||
m.producer_1c_id,
|
||||
p.producer_id, -- строковый id для API/поиска
|
||||
p.producer_name,
|
||||
m.days_of_sales,
|
||||
m.logistics_days,
|
||||
m.roic_norm,
|
||||
m.created_at,
|
||||
m.updated_at
|
||||
FROM [analytics].[contractor_producer_mapping] m
|
||||
LEFT JOIN [analytics].[v_contractors] c ON c.contractor_1c_id = m.contractor_1c_id
|
||||
LEFT JOIN [analytics].[v_producers] p ON p.producer_1c_id = m.producer_1c_id;
|
||||
GO
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 5. Триггер обновления updated_at
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
CREATE TRIGGER [analytics].[tr_contractor_producer_mapping_updated]
|
||||
ON [analytics].[contractor_producer_mapping]
|
||||
AFTER UPDATE
|
||||
AS
|
||||
UPDATE [analytics].[contractor_producer_mapping]
|
||||
SET updated_at = GETDATE()
|
||||
FROM [analytics].[contractor_producer_mapping] t
|
||||
INNER JOIN inserted i ON t.id = i.id;
|
||||
GO
|
||||
232
analytics/mag_pbi/scripts/import_suppliers_csv.sql
Normal file
232
analytics/mag_pbi/scripts/import_suppliers_csv.sql
Normal file
@ -0,0 +1,232 @@
|
||||
-- =============================================================================
|
||||
-- Импорт поставщиков из CSV
|
||||
-- Пропускает: пустые строки, пустой производитель, "не работаем", двойной (партнёр=производитель)
|
||||
-- =============================================================================
|
||||
|
||||
USE [mag_pbi]
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @t TABLE (
|
||||
partner NVARCHAR(500),
|
||||
producer NVARCHAR(500),
|
||||
contractor NVARCHAR(500),
|
||||
log_val NVARCHAR(50),
|
||||
sales_val NVARCHAR(50),
|
||||
n_pct NVARCHAR(50),
|
||||
n_days NVARCHAR(50),
|
||||
m_pct NVARCHAR(50),
|
||||
m_days NVARCHAR(50)
|
||||
);
|
||||
|
||||
INSERT INTO @t (partner, producer, contractor, log_val, sales_val, n_pct, n_days, m_pct, m_days) VALUES
|
||||
(N'TWIST (Коврига)', N'TWIST', N'ИП Коврига Богдан Владиславович', N'14-21', N'', N'', N'', N'100', N'14-21'),
|
||||
(N'АО "ПНК "Красная нить"', N'АО "ПНК "Красная нить"', N'ПНК КРАСНАЯ НИТЬ АО', N'7', N'', N'', N'', N'100', N'30'),
|
||||
(N'АОРА ООО', N'Оллтекс', N'АОРА ООО', N'10', N'', N'', N'', N'100', N'14'),
|
||||
(N'АПИА', N'АПИА', N'АКВИЛОН ТЕКС ООО', N'5', N'', N'0', N'', N'100', N''),
|
||||
(N'Астра ООО', N'Астра ООО', N'АСТРА ООО(ИНН5027282471)', N'10', N'30', N'100', N'1', N'0', N'0'),
|
||||
(N'БАЛТИЙСКИЙ ТЕКСТИЛЬ', N'БАЛТИЙСКИЙ ТЕКСТИЛЬ', N'НЕВА-ТЕКСТИЛЬ ООО', N'10', N'30', N'100', N'1', N'0', N'0'),
|
||||
(N'ДЕНВИС ООО', N'Денвис ООО', N'ДЕНВИС ООО', N'14', N'', N'', N'', N'100', N'14'),
|
||||
(N'Дилан-Текс ООО', N'Дилан-Текс', N'ДИЛАН-ТЕКСТИЛЬ ООО', N'3', N'30', N'100', N'', N'0', N'0'),
|
||||
(N'Зарина Садовод', N'Зарина', N'ИП Ашурова Зарина Мирзоевна', N'7', N'30', N'0', N'', N'100', N'10'),
|
||||
(N'Зарина Садовод', N'Зарина', N'ИП Забиров Умед Махмадиевич', N'7', N'30', N'0', N'', N'100', N'10'),
|
||||
(N'Интай (ТЕКСТИЛЬ-ПРИНТ ООО)', N'Интай', N'ТЕКСТИЛЬ-ПРИНТ ООО', N'7', N'', N'0', N'', N'100', N''),
|
||||
(N'ИП Маркович Олег Вячеславович', N'М-тех', N'ИП Маркович Олег Вячеславович', N'20', N'', N'100', N'', N'', N''),
|
||||
(N'КАПРИЧЧО ООО', N'КАПРИЧЧО', N'КАПРИЗ ООО', N'7', N'30', N'0', N'', N'100', N'30'),
|
||||
(N'КВИКЕР ООО (АРИМА)', N'Арима', N'КВИКЕР ООО', N'7', N'30', N'100', N'', N'0', N'0'),
|
||||
(N'КВИНТА', N'КВИНТА ООО', N'КВИНТА ООО', N'14', N'30', N'50', N'', N'50', N'50'),
|
||||
(N'КВИНТА', N'КВИНТА ООО', N'ТЕКСИНТЕХ ООО', N'14', N'30', N'50', N'', N'50', N'50'),
|
||||
(N'КИТАЙ', N'ANHUI PHAETON CO.,LTD.', N'ANHUI PHAETON CO., LTD', N'120', N'180', N'30', N'1', N'70', N'50'),
|
||||
(N'КИТАЙ', N'ANHUI PHAETON CO.,LTD.', N'ANHUI XINGTAI INTERNATIONAL TRADE CO., LTD', N'120', N'180', N'30', N'1', N'70', N'50'),
|
||||
(N'КИТАЙ', N'Crafoam', N'CHANGSHA HEAPLAKE ENTERPRISES CO., LTD.', N'120', N'180', N'30', N'1', N'70', N'50'),
|
||||
(N'КИТАЙ', N'DAVID', N'David YIWU SUPPLY AND MARKETING IMPORT AND EXPORT CO.,LTD', N'120', N'180', N'', N'', N'100', N'90'),
|
||||
(N'КИТАЙ', N'WENDY', N'FUJIAN FOR BOTH TEXTILE CO.,LTD', N'120', N'180', N'', N'', N'100', N'60'),
|
||||
(N'КИТАЙ', N'WENDY', N'Fujian Original Textile Co., Ltd', N'120', N'180', N'', N'', N'100', N'60'),
|
||||
(N'КИТАЙ', N'GREAT ART INDUSTRIAL LTD.', N'GREAT ART INDUSTRIAL LTD.', N'120', N'180', N'30', N'1', N'70', N'60'),
|
||||
(N'КИТАЙ', N'FEELO', N'AURORA SEWING SOLUTIONS - FZCO / MH / Yisun', N'120', N'180', N'30', N'1', N'70', N'21'),
|
||||
(N'КИТАЙ', N'FEELO', N'GUANGDONG YILE TOYS CO., LTD.', N'120', N'180', N'30', N'1', N'70', N'21'),
|
||||
(N'КИТАЙ', N'Evernice', N'GUANGZHOU ARK IMPORT EXPORT CO. LTD', N'120', N'180', N'', N'', N'100', N'60'),
|
||||
(N'КИТАЙ', N'Evernice', N'Guangzhou Evernice Technology Development Co., Ltd', N'120', N'180', N'', N'', N'100', N'60'),
|
||||
(N'КИТАЙ', N'ZHEJIANG BEYOND INDUSTRIAL AND TRADING', N'Jessy YIWU SUPPLY AND MARKETING IMPORT AND EXPORT CO.,LTD', N'120', N'180', N'', N'', N'', N''),
|
||||
(N'КИТАЙ', N'JIANGSU GOLDEN AUTUMN ELASTIC FABRICS CO.,LTD', N'JIANGSU GOLDEN AUTUMN ELASTIC FABRICS CO.,LTD', N'120', N'180', N'30', N'1', N'70', N'60'),
|
||||
(N'КИТАЙ', N'MH', N'NINGBO MH INDUSTRY CO., LTD.', N'120', N'180', N'50', N'100', N'50', N'160'),
|
||||
(N'КИТАЙ', N'ZHEJIANG BEYOND INDUSTRIAL AND TRADING', N'NINGBO QUANAO IMP. AND EXP.CO.,LTD', N'120', N'180', N'', N'', N'100', N'120'),
|
||||
(N'КИТАЙ', N'NINGBO YISUN IMPORT AND EXPORT COMPANY LIMITED', N'NINGBO UNISUN TRADE CO., LTD', N'120', N'180', N'50', N'90', N'50', N'120'),
|
||||
(N'КИТАЙ', N'XINDEW', N'NINGBO YINZHOU XINDEW TEXTILE CO.,LTD', N'120', N'180', N'30', N'1', N'70', N'60'),
|
||||
(N'КИТАЙ', N'NINGBO YISUN IMPORT AND EXPORT COMPANY LIMITED', N'SHAAN XI SUCCEED TRADING CO.,LTD', N'120', N'180', N'50', N'90', N'50', N'120'),
|
||||
(N'КИТАЙ', N'Hebei', N'SHAOXING CITY YEHUA TEXTILE CO.,LTD', N'120', N'180', N'', N'', N'', N''),
|
||||
(N'КИТАЙ', N'Houwen', N'SHAOXING KEQIAO DISTRICT HOUWEN IMPORT & EXPORT CO., LTD', N'120', N'180', N'30', N'1', N'70', N'60'),
|
||||
(N'КИТАЙ', N'Mingge', N'SHAOXING KEQIAO MINGGE TEXTILE CO.,LTD', N'120', N'180', N'', N'', N'100', N'60'),
|
||||
(N'КИТАЙ', N'QX', N'SHAOXING LIUYI TEXTILE IMPORT AND EXPORT CO.,LTD', N'120', N'180', N'', N'', N'', N''),
|
||||
(N'КИТАЙ', N'Mingge', N'SHAOXING MENGYUE TEXTILE CO., LTD', N'120', N'180', N'', N'', N'100', N'60'),
|
||||
(N'КИТАЙ', N'Varo', N'SHAOXING VARO TEXTILE CO., LTD', N'120', N'180', N'', N'', N'100', N'80'),
|
||||
(N'КИТАЙ', N'ZHONGZHE', N'SHAOXING ZHONGZHE TEXTILE IMPORT AND EXPORT CO.,LTD', N'120', N'180', N'50', N'60', N'50', N'80'),
|
||||
(N'КИТАЙ', N'Joanna', N'SHAOXING ZUHAO TEXTILE CO.,LTD', N'120', N'180', N'', N'', N'100', N'80'),
|
||||
(N'КИТАЙ', N'SINEM BRODE', N'SINEMBRODE TEKSTIL SANAYI VE TICARET LTD. STI.', N'120', N'180', N'50', N'60', N'50', N'100'),
|
||||
(N'КИТАЙ', N'RECHSEA', N'TOWARD OCEAN TECHNOLOGY CO., LIMITED', N'120', N'180', N'30', N'1', N'70', N''),
|
||||
(N'КИТАЙ', N'XINDEW', N'XINDEW GROUP CO LIMITED', N'120', N'180', N'30', N'1', N'70', N'60'),
|
||||
(N'КИТАЙ', N'Yingfeng Textile', N'Yingfeng Textile (Nanjing) Co., Ltd', N'120', N'180', N'30', N'1', N'70', N'50'),
|
||||
(N'КИТАЙ', N'Sunshine', N'YIWU JYAO IMPORT AND EXPORT CO.,LTD', N'120', N'180', N'30', N'1', N'70', N'60'),
|
||||
(N'КИТАЙ', N'ZHEGAO', N'AURORA SEWING SOLUTIONS - FZCO / MH / Yisun', N'120', N'180', N'30', N'1', N'70', N'21'),
|
||||
(N'КИТАЙ', N'CADA', N'AURORA SEWING SOLUTIONS - FZCO / MH / Yisun', N'120', N'180', N'30', N'1', N'70', N'21'),
|
||||
(N'КИТАЙ', N'KAVO', N'Shenzhen Sfun Toys Co., Ltd.', N'120', N'180', N'30', N'1', N'70', N'21'),
|
||||
(N'КИТАЙ', N'Im.master', N'AURORA SEWING SOLUTIONS - FZCO / MH / Yisun', N'120', N'180', N'30', N'1', N'70', N'21'),
|
||||
(N'КИТАЙ', N'LX', N'AURORA SEWING SOLUTIONS - FZCO / MH / Yisun', N'120', N'180', N'30', N'1', N'70', N'21'),
|
||||
(N'КИТАЙ', N'LB+', N'AURORA SEWING SOLUTIONS - FZCO / MH / Yisun', N'120', N'180', N'30', N'1', N'70', N'21'),
|
||||
(N'КИТАЙ', N'CAYI', N'AURORA SEWING SOLUTIONS - FZCO / MH / Yisun', N'120', N'180', N'30', N'1', N'70', N'21'),
|
||||
(N'КИТАЙ', N'JINGXIN', N'YONGJIA JINGXIN GARMENT ACCESSORIES CO.,LTD', N'120', N'180', N'', N'', N'100', N'21'),
|
||||
(N'КИТАЙ', N'HP', N'SHISHI HONGPENG METAL WEAR ACCESSORIES CO., LTD.', N'120', N'180', N'30', N'1', N'70', N'21'),
|
||||
(N'КИТАЙ', N'YANG', N'ZHEJIANG KENKING INDUSTRIAL CO., LTD.', N'120', N'180', N'', N'', N'', N''),
|
||||
(N'КИТАЙ', N'YANG', N'ZHEJIANG KENKING TEXTILE CO., LTD.', N'120', N'180', N'', N'', N'', N''),
|
||||
(N'КИТАЙ', N'Larbene', N'ZHEJIANG LARBENE TEXTILE TECHNOLOG Y CO.,LTD', N'120', N'180', N'', N'', N'', N''),
|
||||
(N'КИТАЙ', N'SHUAINING', N'ZHEJIANG SHUAINING INTERLINING TECHNOLOGY CO., LTD', N'120', N'180', N'', N'', N'100', N'160'),
|
||||
(N'ЛАВИСТА ТЕКСТИЛЬ ООО', N'ЛАВИСТА ТЕКСТИЛЬ ООО', N'ЛАВИСТА ТЕКСТИЛЬ ООО', N'10', N'30', N'100', N'1', N'0', N'0'),
|
||||
(N'ЛЕНТА АО (Чебоксары)', N'АО "Лента" (Ч)', N'ЛЕНТА АО (Чебоксары)', N'', N'', N'', N'', N'', N''),
|
||||
(N'ЛЕРТЕКС ГРУПП ООО', N'ЛЕРТЕКС ГРУПП ООО', N'ЛЕРТЕКС ГРУПП ООО', N'10', N'30', N'100', N'1', N'0', N'0'),
|
||||
(N'МЕБЕЛЬНАЯ ЛИНИЯ ООО', N'МЕБЕЛЬНАЯ ЛИНИЯ ООО', N'МЕБЕЛЬНАЯ ЛИНИЯ ООО', N'7', N'30', N'100', N'1', N'0', N'0'),
|
||||
(N'МИР МАНУФАКТУРЫ', N'МИР МАНУФАКТУРЫ', N'РАДУГА ООО/МИР МАНУФАКТУРЫ', N'7', N'30', N'100', N'', N'', N''),
|
||||
(N'Морозкин Иван Васильевич', N'Морозкин Иван Васильевич', N'ИП Морозкин Иван Васильевич', N'7', N'30', N'0', N'', N'100', N'20'),
|
||||
(N'Морозкин Иван Васильевич', N'Морозкин Иван Васильевич', N'ИП Морозкина Нина Ивановна', N'7', N'30', N'0', N'', N'100', N'20'),
|
||||
(N'Московское ПО Металлпластизделие ООО', N'ООО "Московское ПО Металлпластизделие"', N'Московское ПО Металлпластизделие ООО', N'5', N'60', N'', N'', N'100', N'20'),
|
||||
(N'НЬЮСТАР ООО', N'НЬЮСТАР ООО', N'НЬЮСТАР ООО', N'10', N'60', N'', N'', N'100', N'40'),
|
||||
(N'ОАО "Лента" Беларусь', N'ОАО "Лента"', N'ОАО "Лента"', N'10', N'', N'', N'', N'100', N'90'),
|
||||
(N'ОАО ХБК "Шуйские ситцы"', N'ОАО ХБК "Шуйские ситцы"', N'ШУЙСКИЕ СИТЦЫ АО ХБК', N'10', N'30', N'100', N'1', N'', N''),
|
||||
(N'ОЛДОС', N'АнТекс', N'АНТЕКС ООО', N'3', N'', N'0', N'', N'30', N'30'),
|
||||
(N'ООО "АРГО ДС"', N'Арго ДС', N'АРГО ДС ООО', N'5', N'', N'', N'', N'', N''),
|
||||
(N'ООО "ЕВРОПЛАСТИК"', N'ЕВРОПЛАСТИК ПЛЮС ООО', N'ЕВРОПЛАСТИК ПЛЮС ООО', N'14', N'', N'', N'', N'100', N'14'),
|
||||
(N'ООО "ЕвроСнаб" (Казинников ДВ)', N'ЕВРОСНАБ ООО', N'ЕВРОСНАБ ООО', N'14-21', N'', N'', N'', N'100', N'20'),
|
||||
(N'ООО "ТриЯна" ДАВА Пласт', N'ДАВА Пласт', N'ДАВА Пласт', N'10', N'30', N'0', N'', N'100', N'10'),
|
||||
(N'ООО "Ф-ЛЕЙБЛ"', N'ООО "Фуртекс"', N'ООО "ФУРТЕКС" ПРОИЗВОДСТВО ЭТИКЕТОК (Ф-ЛЕЙБЛ)', N'14', N'30', N'', N'', N'100', N'10'),
|
||||
(N'ООО "ЭЛАСТТЕКС2020"', N'ООО "ЭЛАСТТЕКС2020"', N'ЭЛАСТТЕКС2020', N'14-20', N'', N'30', N'1', N'70', N'14'),
|
||||
(N'ПИН (Булавки)', N'дистр. ПАО "Мосточлегмаш"', N'БУЛАВКИ ООО', N'5', N'', N'', N'', N'100', N'14'),
|
||||
(N'ПИН (Булавки)', N'дистр. ПАО "Мосточлегмаш"', N'ПИН ООО 9715499112', N'5', N'', N'', N'', N'100', N'14'),
|
||||
(N'ПНК ИМ. КИРОВА АО', N'ООО "ПНК им. Кирова"', N'ПНК ИМ. КИРОВА АО', N'7', N'', N'', N'', N'100', N'30'),
|
||||
(N'ПНК ИМ. КИРОВА АО', N'ООО "ПНК им. Кирова"', N'ПНК ИМ. КИРОВА ООО', N'7', N'', N'', N'', N'100', N'30'),
|
||||
(N'ПНК ИМ. КИРОВА АО', N'ООО "ПНК им. Кирова"', N'Филиал АО "ПНК ИМ. КИРОВА"', N'7', N'', N'', N'', N'100', N'30'),
|
||||
(N'ПОЛИМЕРНАЯ ИМПЕРИЯ ООО', N'Мегафторполимер', N'ПОЛИМЕРНАЯ ИМПЕРИЯ ООО', N'20', N'', N'', N'', N'100', N'14'),
|
||||
(N'ПремиумФорм', N'Антинея', N'ПРЕМИУМФОРМ ООО', N'14-20', N'30', N'100', N'1', N'', N''),
|
||||
(N'Результат-МСК', N'Следопыт', N'РЕЗУЛЬТАТ-МСК ООО', N'7', N'', N'', N'', N'100', N'30'),
|
||||
(N'РЭДТЕКС ООО', N'Рэдтекс', N'РЭДТЕКС ООО', N'14-20', N'', N'', N'', N'100', N'30'),
|
||||
(N'СИДЖЕЙ МОДА ООО', N'СИДЖЕЙ МОДА ООО', N'ЕВРОПА ТЕКС ООО', N'7', N'30', N'0', N'', N'100', N'14'),
|
||||
(N'СПЕКТР ПРО-АКТИВ ООО', N'СПЕКТР ПРО-АКТИВ ООО', N'СПЕКТР ПРО-АКТИВ ООО', N'7', N'30', N'0', N'', N'100', N'21'),
|
||||
(N'ТДЛ Текстиль', N'ТДЛ Текстиль', N'ТДЛ ТЕКСТИЛЬ ООО', N'7', N'30', N'0', N'', N'100', N'5'),
|
||||
(N'ТЕКСТРА ТРЭЙД ООО', N'ООО "Текстра трэйд"', N'ТЕКСТРА РУ ООО', N'3', N'14', N'0', N'', N'14', N'14'),
|
||||
(N'ТК МегаМаркет', N'ООО "ТК МегаМаркет"', N'МАРКЕТ ПЛЮС ООО', N'3', N'30', N'100', N'', N'0', N'0'),
|
||||
(N'ТОП ПРИНТ (Азхар Аймаль)', N'Топ принт', N'Азхар Аймаль', N'5', N'20', N'0', N'', N'100', N'14'),
|
||||
(N'ТОП ПРИНТ (Азхар Аймаль)', N'Топ принт', N'ТОП ПРИНТ ООО', N'5', N'20', N'0', N'', N'100', N'14'),
|
||||
(N'ТРЕНД ООО ( Колибри)', N'Colibri', N'ТРЕНД ООО', N'30', N'90', N'', N'', N'100', N'120'),
|
||||
(N'ФЕЛИтеКС Беларусь', N'Фелитекс', N'ФЕЛИтеКС Беларусь', N'14', N'30', N'0', N'', N'30', N'30'),
|
||||
(N'Фи-текс', N'ООО "Фи-текс"', N'Фи-текс ООО', N'14', N'30', N'0', N'', N'30', N'30'),
|
||||
(N'ЧУП "Максипресс"', N'ЧУП "Максипресс"', N'НЕЙЛОН ООО', N'25', N'', N'100', N'1', N'', N''),
|
||||
(N'Экстра Текстиль ООО', N'Экстра Текстиль ООО', N'ЭКСТРА ТЕКСТИЛЬ ООО', N'3', N'15', N'100', N'', N'', N''),
|
||||
(N'Эскар ООО', N'ЭСКАР ООО', N'ЭСКАР ООО', N'10', N'', N'', N'', N'100', N'14');
|
||||
|
||||
-- Фильтрация: пустой производитель, не работаем, партнёр=производитель
|
||||
;WITH Filtered AS (
|
||||
SELECT producer, contractor, log_val, sales_val, n_pct, n_days, m_pct, m_days,
|
||||
ROW_NUMBER() OVER (PARTITION BY LTRIM(RTRIM(producer)), LTRIM(RTRIM(contractor)) ORDER BY (SELECT 1)) AS rn
|
||||
FROM @t
|
||||
WHERE LTRIM(RTRIM(producer)) <> N''
|
||||
AND LOWER(LTRIM(RTRIM(producer))) NOT LIKE N'%не работаем%'
|
||||
AND LOWER(LTRIM(RTRIM(producer))) NOT LIKE N'%под клиентов%'
|
||||
AND (LTRIM(RTRIM(partner)) <> LTRIM(RTRIM(producer)) OR LTRIM(RTRIM(partner)) = N'')
|
||||
)
|
||||
SELECT producer, contractor, log_val, sales_val, n_pct, n_days, m_pct, m_days
|
||||
INTO #staging
|
||||
FROM Filtered
|
||||
WHERE rn = 1;
|
||||
|
||||
DECLARE @log_days INT, @sales_days INT, @n_pct DECIMAL(9,4), @n_days INT, @m_pct DECIMAL(9,4), @m_days INT;
|
||||
DECLARE @producer NVARCHAR(500), @contractor NVARCHAR(500);
|
||||
DECLARE @manufacturer_id INT, @contractor_1c_id BINARY(16);
|
||||
DECLARE @log_val NVARCHAR(50), @sales_val NVARCHAR(50), @n_pct_val NVARCHAR(50), @n_days_val NVARCHAR(50), @m_pct_val NVARCHAR(50), @m_days_val NVARCHAR(50);
|
||||
|
||||
DECLARE cur CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT producer, contractor, log_val, sales_val, n_pct, n_days, m_pct, m_days FROM #staging;
|
||||
|
||||
OPEN cur;
|
||||
|
||||
WHILE 1=1
|
||||
BEGIN
|
||||
FETCH cur INTO @producer, @contractor, @log_val, @sales_val, @n_pct_val, @n_days_val, @m_pct_val, @m_days_val;
|
||||
IF @@FETCH_STATUS <> 0 BREAK;
|
||||
|
||||
SET @manufacturer_id = NULL;
|
||||
SET @contractor_1c_id = NULL;
|
||||
|
||||
-- Парсинг чисел: диапазон 14-21 -> среднее, пустое -> NULL
|
||||
SET @log_days = CASE
|
||||
WHEN @log_val = N'' OR @log_val IS NULL THEN NULL
|
||||
WHEN @log_val LIKE N'%-%' AND CHARINDEX(N'-', @log_val) > 1
|
||||
THEN (TRY_CAST(LEFT(@log_val, CHARINDEX(N'-', @log_val)-1) AS INT) + TRY_CAST(LTRIM(SUBSTRING(@log_val, CHARINDEX(N'-', @log_val)+1, 10)) AS INT))/2
|
||||
ELSE TRY_CAST(@log_val AS INT) END;
|
||||
SET @sales_days = CASE
|
||||
WHEN @sales_val = N'' OR @sales_val IS NULL THEN NULL
|
||||
WHEN @sales_val LIKE N'%-%' AND CHARINDEX(N'-', @sales_val) > 1
|
||||
THEN (TRY_CAST(LEFT(@sales_val, CHARINDEX(N'-', @sales_val)-1) AS INT) + TRY_CAST(LTRIM(SUBSTRING(@sales_val, CHARINDEX(N'-', @sales_val)+1, 10)) AS INT))/2
|
||||
ELSE TRY_CAST(@sales_val AS INT) END;
|
||||
SET @n_pct = TRY_CAST(@n_pct_val AS DECIMAL(9,4));
|
||||
SET @n_days = TRY_CAST(@n_days_val AS INT);
|
||||
SET @m_pct = TRY_CAST(@m_pct_val AS DECIMAL(9,4));
|
||||
SET @m_days = TRY_CAST(@m_days_val AS INT);
|
||||
|
||||
IF @log_days IS NULL SET @log_days = 120;
|
||||
IF @sales_days IS NULL SET @sales_days = 180;
|
||||
|
||||
-- Найти contractor_1c_id в v_contractors (по точному совпадению имени)
|
||||
SELECT @contractor_1c_id = (SELECT TOP 1 contractor_1c_id
|
||||
FROM [analytics].[v_contractors]
|
||||
WHERE LTRIM(RTRIM(contractor_name)) = LTRIM(RTRIM(@contractor)));
|
||||
|
||||
IF @contractor_1c_id IS NULL
|
||||
CONTINUE; -- контрагент не найден в 1С, пропускаем
|
||||
|
||||
-- Найти или создать manufacturer (подзапрос — при отсутствии строк переменная станет NULL)
|
||||
SELECT @manufacturer_id = (SELECT id FROM [analytics].[manufacturers]
|
||||
WHERE LTRIM(RTRIM(manufacturer)) = LTRIM(RTRIM(@producer)));
|
||||
|
||||
IF @manufacturer_id IS NULL
|
||||
BEGIN
|
||||
INSERT INTO [analytics].[manufacturers] (manufacturer, days_of_sales, logistics_days, roic_norm)
|
||||
VALUES (LTRIM(RTRIM(@producer)), @sales_days, @log_days, NULL);
|
||||
SET @manufacturer_id = SCOPE_IDENTITY();
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE [analytics].[manufacturers]
|
||||
SET days_of_sales = @sales_days, logistics_days = @log_days
|
||||
WHERE id = @manufacturer_id;
|
||||
END
|
||||
|
||||
-- Проверить, нет ли уже связи
|
||||
IF EXISTS (SELECT 1 FROM [analytics].[manufacturer_counterparty_map]
|
||||
WHERE manufacturer_id = @manufacturer_id AND contractor_1c_id = @contractor_1c_id)
|
||||
CONTINUE;
|
||||
|
||||
INSERT INTO [analytics].[manufacturer_counterparty_map] (manufacturer_id, contractor_1c_id)
|
||||
VALUES (@manufacturer_id, @contractor_1c_id);
|
||||
|
||||
-- Этапы оплаты
|
||||
DELETE FROM [analytics].[manufacturer_payment_stage] WHERE manufacturer_id = @manufacturer_id;
|
||||
|
||||
IF @n_pct IS NOT NULL AND @n_pct > 0
|
||||
INSERT INTO [analytics].[manufacturer_payment_stage] (manufacturer_id, name, days, [percent], sort_order)
|
||||
VALUES (@manufacturer_id, N'Первая оплата', ISNULL(@n_days, 1), @n_pct, 0);
|
||||
|
||||
IF @m_pct IS NOT NULL AND @m_pct > 0
|
||||
INSERT INTO [analytics].[manufacturer_payment_stage] (manufacturer_id, name, days, [percent], sort_order)
|
||||
VALUES (@manufacturer_id, N'Вторая оплата', ISNULL(@m_days, 60), @m_pct, 1);
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM [analytics].[manufacturer_payment_stage] WHERE manufacturer_id = @manufacturer_id)
|
||||
INSERT INTO [analytics].[manufacturer_payment_stage] (manufacturer_id, name, days, [percent], sort_order)
|
||||
VALUES (@manufacturer_id, N'Предоплата', 14, 100, 0);
|
||||
END
|
||||
|
||||
CLOSE cur;
|
||||
DEALLOCATE cur;
|
||||
|
||||
DROP TABLE #staging;
|
||||
|
||||
PRINT 'Импорт завершён.';
|
||||
GO
|
||||
@ -0,0 +1,120 @@
|
||||
-- =============================================================================
|
||||
-- Миграция: manufacturers + manufacturer_counterparty_map + counterparties
|
||||
-- → contractor_producer_mapping + contractor_producer_payment_stage
|
||||
--
|
||||
-- Источник: analytics.manufacturers, analytics.manufacturer_counterparty_map,
|
||||
-- analytics.counterparties
|
||||
-- Назначение: analytics.contractor_producer_mapping,
|
||||
-- analytics.contractor_producer_payment_stage
|
||||
--
|
||||
-- Сопоставление по именам: counterparty → v_contractors (_Reference168),
|
||||
-- manufacturer → v_producers (_Reference260)
|
||||
-- =============================================================================
|
||||
|
||||
USE [mag_pbi]
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
|
||||
-- 1. Проверка: какие строки будут мигрировать, какие найдутся в 1С
|
||||
PRINT '=== Сопоставление с v_contractors и v_producers ===';
|
||||
SELECT
|
||||
mcm.id AS map_id,
|
||||
cp.counterparty,
|
||||
c.contractor_id AS contractor_1c_match,
|
||||
man.manufacturer,
|
||||
p.producer_id AS producer_1c_match,
|
||||
CASE WHEN c.contractor_1c_id IS NULL THEN 'НЕТ' ELSE 'OK' END AS contractor_ok,
|
||||
CASE WHEN p.producer_1c_id IS NULL THEN 'НЕТ' ELSE 'OK' END AS producer_ok
|
||||
FROM [analytics].[manufacturer_counterparty_map] mcm
|
||||
JOIN [analytics].[manufacturers] man ON man.id = mcm.manufacturer_id
|
||||
JOIN [analytics].[counterparties] cp ON cp.id = mcm.counterparty_id
|
||||
LEFT JOIN [analytics].[v_contractors] c
|
||||
ON LTRIM(RTRIM(c.contractor_name)) = LTRIM(RTRIM(cp.counterparty))
|
||||
LEFT JOIN [analytics].[v_producers] p
|
||||
ON LTRIM(RTRIM(p.producer_name)) = LTRIM(RTRIM(man.manufacturer))
|
||||
ORDER BY mcm.id;
|
||||
|
||||
-- 2. Вставка в contractor_producer_mapping (только пары, найденные в 1С)
|
||||
PRINT '';
|
||||
PRINT '=== Вставка в contractor_producer_mapping ===';
|
||||
|
||||
INSERT INTO [analytics].[contractor_producer_mapping]
|
||||
(contractor_1c_id, producer_1c_id, days_of_sales, logistics_days, roic_norm)
|
||||
SELECT
|
||||
c.contractor_1c_id,
|
||||
p.producer_1c_id,
|
||||
180,
|
||||
120,
|
||||
man.ROI_norm
|
||||
FROM [analytics].[manufacturer_counterparty_map] mcm
|
||||
JOIN [analytics].[manufacturers] man ON man.id = mcm.manufacturer_id
|
||||
JOIN [analytics].[counterparties] cp ON cp.id = mcm.counterparty_id
|
||||
JOIN [analytics].[v_contractors] c
|
||||
ON LTRIM(RTRIM(c.contractor_name)) = LTRIM(RTRIM(cp.counterparty))
|
||||
JOIN [analytics].[v_producers] p
|
||||
ON LTRIM(RTRIM(p.producer_name)) = LTRIM(RTRIM(man.manufacturer))
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM [analytics].[contractor_producer_mapping] m2
|
||||
WHERE m2.contractor_1c_id = c.contractor_1c_id AND m2.producer_1c_id = p.producer_1c_id
|
||||
);
|
||||
|
||||
PRINT 'Вставлено сопоставлений: ' + CAST(@@ROWCOUNT AS NVARCHAR(10));
|
||||
|
||||
-- 3. Вставка этапов оплаты для маппингов без этапов
|
||||
PRINT '';
|
||||
PRINT '=== Вставка этапов оплаты ===';
|
||||
|
||||
DECLARE @mapping_id INT;
|
||||
DECLARE @n_pct DECIMAL(10,3), @n_d INT, @m_pct DECIMAL(10,3), @m_d INT;
|
||||
|
||||
DECLARE cur CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT
|
||||
m.id,
|
||||
man.n_percent,
|
||||
ISNULL(man.n_days, 1),
|
||||
man.m_percent,
|
||||
ISNULL(man.m_days, 120)
|
||||
FROM [analytics].[contractor_producer_mapping] m
|
||||
JOIN [analytics].[v_contractors] c ON c.contractor_1c_id = m.contractor_1c_id
|
||||
JOIN [analytics].[v_producers] p ON p.producer_1c_id = m.producer_1c_id
|
||||
JOIN [analytics].[counterparties] cp ON LTRIM(RTRIM(cp.counterparty)) = LTRIM(RTRIM(c.contractor_name))
|
||||
JOIN [analytics].[manufacturer_counterparty_map] mcm ON mcm.counterparty_id = cp.id
|
||||
JOIN [analytics].[manufacturers] man ON man.id = mcm.manufacturer_id
|
||||
AND LTRIM(RTRIM(man.manufacturer)) = LTRIM(RTRIM(p.producer_name))
|
||||
WHERE NOT EXISTS (SELECT 1 FROM [analytics].[contractor_producer_payment_stage] s WHERE s.mapping_id = m.id);
|
||||
|
||||
OPEN cur;
|
||||
FETCH NEXT FROM cur INTO @mapping_id, @n_pct, @n_d, @m_pct, @m_d;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
-- Этап 1: Предоплата (n_percent, n_days)
|
||||
IF @n_pct IS NOT NULL AND @n_pct <> 0
|
||||
BEGIN
|
||||
INSERT INTO [analytics].[contractor_producer_payment_stage] (mapping_id, name, days, [percent], sort_order)
|
||||
VALUES (@mapping_id, N'Предоплата', @n_d,
|
||||
CASE WHEN @n_pct > 1 THEN @n_pct ELSE @n_pct * 100 END, 0);
|
||||
END
|
||||
-- Этап 2: Постоплата (m_percent, m_days)
|
||||
IF @m_pct IS NOT NULL AND @m_pct <> 0
|
||||
BEGIN
|
||||
INSERT INTO [analytics].[contractor_producer_payment_stage] (mapping_id, name, days, [percent], sort_order)
|
||||
VALUES (@mapping_id, N'Постоплата', @m_d,
|
||||
CASE WHEN @m_pct > 1 THEN @m_pct ELSE @m_pct * 100 END, 1);
|
||||
END
|
||||
-- Если оба NULL — дефолт Предоплата 7-50, Постоплата 120-50
|
||||
IF (@n_pct IS NULL OR @n_pct = 0) AND (@m_pct IS NULL OR @m_pct = 0)
|
||||
BEGIN
|
||||
INSERT INTO [analytics].[contractor_producer_payment_stage] (mapping_id, name, days, [percent], sort_order)
|
||||
VALUES (@mapping_id, N'Предоплата', 7, 50, 0),
|
||||
(@mapping_id, N'Постоплата', 120, 50, 1);
|
||||
END
|
||||
FETCH NEXT FROM cur INTO @mapping_id, @n_pct, @n_d, @m_pct, @m_d;
|
||||
END;
|
||||
|
||||
CLOSE cur;
|
||||
DEALLOCATE cur;
|
||||
|
||||
PRINT 'Миграция завершена.';
|
||||
GO
|
||||
156
analytics/mag_pbi/scripts/migrate_map_to_contractor_1c.sql
Normal file
156
analytics/mag_pbi/scripts/migrate_map_to_contractor_1c.sql
Normal file
@ -0,0 +1,156 @@
|
||||
-- =============================================================================
|
||||
-- Переход: counterparties → v_contractors (1С)
|
||||
-- manufacturer_counterparty_map: counterparty_id → contractor_1c_id
|
||||
-- Контрагенты и производители из 1С (v_contractors, v_producers)
|
||||
-- =============================================================================
|
||||
|
||||
USE [mag_pbi]
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
|
||||
-- Удаляем представления, ссылающиеся на map/counterparties
|
||||
IF OBJECT_ID(N'[analytics].[v_manufacturer_counterparty_mapping]', N'V') IS NOT NULL
|
||||
DROP VIEW [analytics].[v_manufacturer_counterparty_mapping];
|
||||
GO
|
||||
|
||||
-- Удалить FK manufacturer_counterparty_map → counterparties (если есть)
|
||||
DECLARE @fk NVARCHAR(256);
|
||||
SELECT @fk = name FROM sys.foreign_keys
|
||||
WHERE parent_object_id = OBJECT_ID(N'[analytics].[manufacturer_counterparty_map]')
|
||||
AND referenced_object_id = OBJECT_ID(N'[analytics].[counterparties]');
|
||||
IF @fk IS NOT NULL
|
||||
EXEC('ALTER TABLE [analytics].[manufacturer_counterparty_map] DROP CONSTRAINT ' + @fk);
|
||||
GO
|
||||
|
||||
-- Очистить таблицу привязки
|
||||
TRUNCATE TABLE [analytics].[manufacturer_counterparty_map];
|
||||
PRINT 'manufacturer_counterparty_map: очищена';
|
||||
GO
|
||||
|
||||
-- Заменить counterparty_id на contractor_1c_id
|
||||
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturer_counterparty_map]') AND name = 'counterparty_id')
|
||||
BEGIN
|
||||
ALTER TABLE [analytics].[manufacturer_counterparty_map] DROP COLUMN [counterparty_id];
|
||||
PRINT 'Удалена колонка counterparty_id';
|
||||
END
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturer_counterparty_map]') AND name = 'contractor_1c_id')
|
||||
BEGIN
|
||||
ALTER TABLE [analytics].[manufacturer_counterparty_map] ADD [contractor_1c_id] BINARY(16) NOT NULL;
|
||||
PRINT 'Добавлена колонка contractor_1c_id';
|
||||
END
|
||||
GO
|
||||
|
||||
-- Удалить старые уникальные ограничения (на counterparty_id), создать новое
|
||||
DECLARE @uq NVARCHAR(256);
|
||||
SELECT @uq = name FROM sys.key_constraints
|
||||
WHERE parent_object_id = OBJECT_ID(N'[analytics].[manufacturer_counterparty_map]')
|
||||
AND type = 'UQ' AND name = 'UQ_mcm_counterparty';
|
||||
IF @uq IS NOT NULL
|
||||
EXEC('ALTER TABLE [analytics].[manufacturer_counterparty_map] DROP CONSTRAINT ' + @uq);
|
||||
|
||||
SELECT @uq = name FROM sys.key_constraints
|
||||
WHERE parent_object_id = OBJECT_ID(N'[analytics].[manufacturer_counterparty_map]')
|
||||
AND type = 'UQ' AND name = 'UQ_mcm_pair';
|
||||
IF @uq IS NOT NULL
|
||||
EXEC('ALTER TABLE [analytics].[manufacturer_counterparty_map] DROP CONSTRAINT ' + @uq);
|
||||
|
||||
-- Один контрагент — один производитель
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints
|
||||
WHERE parent_object_id = OBJECT_ID(N'[analytics].[manufacturer_counterparty_map]') AND name = 'UQ_mcm_contractor')
|
||||
ALTER TABLE [analytics].[manufacturer_counterparty_map] ADD CONSTRAINT [UQ_mcm_contractor] UNIQUE ([contractor_1c_id]);
|
||||
-- Уникальная пара
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints
|
||||
WHERE parent_object_id = OBJECT_ID(N'[analytics].[manufacturer_counterparty_map]') AND name = 'UQ_mcm_pair')
|
||||
ALTER TABLE [analytics].[manufacturer_counterparty_map] ADD CONSTRAINT [UQ_mcm_pair] UNIQUE ([manufacturer_id], [contractor_1c_id]);
|
||||
GO
|
||||
|
||||
-- Удалить таблицу counterparties
|
||||
IF OBJECT_ID(N'[analytics].[counterparties]', N'U') IS NOT NULL
|
||||
BEGIN
|
||||
DROP TABLE [analytics].[counterparties];
|
||||
PRINT 'Удалена таблица analytics.counterparties';
|
||||
END
|
||||
GO
|
||||
|
||||
-- Создать v_contractors, v_producers если не существуют
|
||||
IF OBJECT_ID(N'[analytics].[v_contractors]', N'V') IS NULL
|
||||
BEGIN
|
||||
EXEC('
|
||||
CREATE VIEW [analytics].[v_contractors] AS
|
||||
SELECT
|
||||
c._IDRRef AS contractor_1c_id,
|
||||
LOWER(CONCAT(
|
||||
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 25, 8), ''-'',
|
||||
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 21, 4), ''-'',
|
||||
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 17, 4), ''-'',
|
||||
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 1, 4), ''-'',
|
||||
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 5, 12)
|
||||
)) AS contractor_id,
|
||||
c._Description AS contractor_name
|
||||
FROM [MAG_2019].[dbo].[_Reference168] c
|
||||
WHERE c._Marked = 0');
|
||||
PRINT 'Создано представление v_contractors';
|
||||
END
|
||||
|
||||
IF OBJECT_ID(N'[analytics].[v_producers]', N'V') IS NULL
|
||||
BEGIN
|
||||
EXEC('
|
||||
CREATE VIEW [analytics].[v_producers] AS
|
||||
SELECT
|
||||
pr._IDRRef AS producer_1c_id,
|
||||
LOWER(CONCAT(
|
||||
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 25, 8), ''-'',
|
||||
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 21, 4), ''-'',
|
||||
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 17, 4), ''-'',
|
||||
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 1, 4), ''-'',
|
||||
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 5, 12)
|
||||
)) AS producer_id,
|
||||
pr._Description AS producer_name
|
||||
FROM [MAG_2019].[dbo].[_Reference260] pr
|
||||
WHERE pr._Marked = 0');
|
||||
PRINT 'Создано представление v_producers';
|
||||
END
|
||||
GO
|
||||
|
||||
-- Представление для API: map + manufacturer + contractor/producer (из 1С)
|
||||
CREATE VIEW [analytics].[v_manufacturer_counterparty_mapping] AS
|
||||
SELECT
|
||||
mcm.id,
|
||||
mcm.manufacturer_id,
|
||||
p.producer_id,
|
||||
man.manufacturer AS manufacturer_name,
|
||||
mcm.contractor_1c_id,
|
||||
c.contractor_id,
|
||||
c.contractor_name AS contractor_name,
|
||||
man.days_of_sales,
|
||||
man.logistics_days,
|
||||
man.roic_norm
|
||||
FROM [analytics].[manufacturer_counterparty_map] mcm
|
||||
LEFT JOIN [analytics].[manufacturers] man ON man.id = mcm.manufacturer_id
|
||||
LEFT JOIN [analytics].[v_contractors] c ON c.contractor_1c_id = mcm.contractor_1c_id
|
||||
LEFT JOIN [analytics].[v_producers] p ON LTRIM(RTRIM(p.producer_name)) = LTRIM(RTRIM(man.manufacturer));
|
||||
GO
|
||||
|
||||
-- Исправить [analytics].[get_orders_list]: counterparties удалена, map по contractor_1c_id,
|
||||
-- manufacturers без ROI_norm/n_percent/n_days/m_percent/m_days — использовать v_manufacturers_roi_compat
|
||||
IF OBJECT_ID(N'[analytics].[get_orders_list]', N'V') IS NOT NULL
|
||||
BEGIN
|
||||
DECLARE @def NVARCHAR(MAX);
|
||||
SELECT @def = OBJECT_DEFINITION(OBJECT_ID(N'[analytics].[get_orders_list]'));
|
||||
IF @def LIKE N'%counterparties%'
|
||||
BEGIN
|
||||
SET @def = REPLACE(@def, N'LEFT JOIN [analytics].[counterparties] cp ON cp.[counterparty] = r._Description', N'');
|
||||
SET @def = REPLACE(@def, N'map.[counterparty_id] = cp.id', N'map.[contractor_1c_id] = r._IDRRef');
|
||||
-- manufacturers без старых полей — join на v_manufacturers_roi_compat (ROI_norm, n_percent, n_days, m_percent, m_days)
|
||||
IF @def LIKE N'%ROI_norm%' AND OBJECT_ID(N'[analytics].[v_manufacturers_roi_compat]', N'V') IS NOT NULL
|
||||
SET @def = REPLACE(@def, N'[analytics].[manufacturers] man', N'[analytics].[v_manufacturers_roi_compat] man');
|
||||
DROP VIEW [analytics].[get_orders_list];
|
||||
EXEC sp_executesql @def;
|
||||
PRINT 'Обновлено представление analytics.get_orders_list';
|
||||
END
|
||||
END
|
||||
GO
|
||||
|
||||
PRINT 'Готово: manufacturer_counterparty_map с contractor_1c_id, counterparties удалена';
|
||||
GO
|
||||
252
analytics/mag_pbi/scripts/migrate_to_manufacturers_structure.sql
Normal file
252
analytics/mag_pbi/scripts/migrate_to_manufacturers_structure.sql
Normal file
@ -0,0 +1,252 @@
|
||||
-- =============================================================================
|
||||
-- Миграция: логистика, дни продаж и этапы оплаты — на manufacturers
|
||||
-- manufacturer_counterparty_map — только связь manufacturer_id + contractor_1c_id (из 1С)
|
||||
--
|
||||
-- ВАЖНО: Перед запуском выполнить migrate_map_to_contractor_1c.sql
|
||||
-- (удаление counterparties, переход на contractor_1c_id)
|
||||
--
|
||||
-- ИСТОЧНИК: contractor_producer_mapping, contractor_producer_payment_stage
|
||||
-- (сопоставление по v_contractors, v_producers → counterparties, manufacturers)
|
||||
--
|
||||
-- 1. manufacturers: добавить days_of_sales, logistics_days, roic_norm
|
||||
-- 2. manufacturer_payment_stage: новая таблица, FK на manufacturers
|
||||
-- 3. Миграция из contractor_producer_* в manufacturers, map, manufacturer_payment_stage
|
||||
-- 4. manufacturer_counterparty_map: убрать days_of_sales, logistics_days, roic_norm (если есть)
|
||||
-- 5. Удалить contractor_producer_*, manufacturer_counterparty_payment_stage
|
||||
-- =============================================================================
|
||||
|
||||
USE [mag_pbi]
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
|
||||
-- =============================================================================
|
||||
-- 1. manufacturers: добавить days_of_sales, logistics_days, roic_norm
|
||||
-- =============================================================================
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturers]') AND name = 'days_of_sales')
|
||||
ALTER TABLE [analytics].[manufacturers] ADD [days_of_sales] INT NOT NULL DEFAULT 180;
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturers]') AND name = 'logistics_days')
|
||||
ALTER TABLE [analytics].[manufacturers] ADD [logistics_days] INT NOT NULL DEFAULT 120;
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturers]') AND name = 'roic_norm')
|
||||
ALTER TABLE [analytics].[manufacturers] ADD [roic_norm] DECIMAL(12,4) NULL;
|
||||
|
||||
-- Миграция из manufacturers.ROI_norm (если ещё не удалена, roic_norm уже добавлена)
|
||||
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturers]') AND name = 'ROI_norm')
|
||||
AND EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturers]') AND name = 'roic_norm')
|
||||
BEGIN
|
||||
UPDATE [analytics].[manufacturers] SET [roic_norm] = [ROI_norm] WHERE [roic_norm] IS NULL AND [ROI_norm] IS NOT NULL;
|
||||
END
|
||||
|
||||
-- Удалить старые поля manufacturers (n_percent, n_days, m_percent, m_days, ROI_norm)
|
||||
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturers]') AND name = 'ROI_norm')
|
||||
ALTER TABLE [analytics].[manufacturers] DROP COLUMN [ROI_norm];
|
||||
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturers]') AND name = 'n_percent')
|
||||
ALTER TABLE [analytics].[manufacturers] DROP COLUMN [n_percent];
|
||||
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturers]') AND name = 'n_days')
|
||||
ALTER TABLE [analytics].[manufacturers] DROP COLUMN [n_days];
|
||||
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturers]') AND name = 'm_percent')
|
||||
ALTER TABLE [analytics].[manufacturers] DROP COLUMN [m_percent];
|
||||
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturers]') AND name = 'm_days')
|
||||
ALTER TABLE [analytics].[manufacturers] DROP COLUMN [m_days];
|
||||
|
||||
PRINT 'manufacturers: добавлены days_of_sales, logistics_days, roic_norm';
|
||||
GO
|
||||
|
||||
-- =============================================================================
|
||||
-- 2. manufacturer_payment_stage — этапы оплаты, привязаны к manufacturers
|
||||
-- =============================================================================
|
||||
IF OBJECT_ID(N'[analytics].[manufacturer_payment_stage]', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE [analytics].[manufacturer_payment_stage] (
|
||||
[id] INT IDENTITY(1,1) NOT NULL,
|
||||
[manufacturer_id] INT NOT NULL,
|
||||
[name] NVARCHAR(255) NOT NULL,
|
||||
[days] INT NOT NULL,
|
||||
[percent] DECIMAL(9,4) NOT NULL,
|
||||
[sort_order] INT NOT NULL DEFAULT 0,
|
||||
CONSTRAINT [PK_manufacturer_payment_stage] PRIMARY KEY CLUSTERED ([id]),
|
||||
CONSTRAINT [FK_manufacturer_payment_stage] FOREIGN KEY ([manufacturer_id])
|
||||
REFERENCES [analytics].[manufacturers]([id]) ON DELETE CASCADE
|
||||
);
|
||||
CREATE NONCLUSTERED INDEX [IX_manufacturer_payment_stage_manufacturer_id]
|
||||
ON [analytics].[manufacturer_payment_stage]([manufacturer_id]);
|
||||
PRINT 'Создана таблица manufacturer_payment_stage';
|
||||
END
|
||||
GO
|
||||
|
||||
-- =============================================================================
|
||||
-- Миграция из contractor_producer_mapping и contractor_producer_payment_stage
|
||||
-- (требует v_contractors, v_producers; manufacturer_counterparty_map с contractor_1c_id)
|
||||
-- =============================================================================
|
||||
IF OBJECT_ID(N'[analytics].[contractor_producer_mapping]', N'U') IS NOT NULL
|
||||
AND OBJECT_ID(N'[analytics].[contractor_producer_payment_stage]', N'U') IS NOT NULL
|
||||
AND OBJECT_ID(N'[analytics].[v_contractors]', N'V') IS NOT NULL
|
||||
AND OBJECT_ID(N'[analytics].[v_producers]', N'V') IS NOT NULL
|
||||
AND EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturer_counterparty_map]') AND name = 'contractor_1c_id')
|
||||
BEGIN
|
||||
-- 3a. Добавить недостающие manufacturers (по именам из 1С)
|
||||
INSERT INTO [analytics].[manufacturers] (manufacturer, days_of_sales, logistics_days, roic_norm)
|
||||
SELECT t.producer_name, t.days_of_sales, t.logistics_days, t.roic_norm
|
||||
FROM (
|
||||
SELECT LTRIM(RTRIM(p.producer_name)) AS producer_name, m.days_of_sales, m.logistics_days, m.roic_norm,
|
||||
ROW_NUMBER() OVER (PARTITION BY LTRIM(RTRIM(p.producer_name)) ORDER BY m.id) AS rn
|
||||
FROM [analytics].[contractor_producer_mapping] m
|
||||
JOIN [analytics].[v_producers] p ON p.producer_1c_id = m.producer_1c_id
|
||||
) t
|
||||
WHERE t.rn = 1
|
||||
AND NOT EXISTS (SELECT 1 FROM [analytics].[manufacturers] man WHERE LTRIM(RTRIM(man.manufacturer)) = t.producer_name);
|
||||
|
||||
-- 3b. Обновить manufacturers (days, logistics, roic) из contractor_producer_mapping
|
||||
UPDATE man
|
||||
SET man.days_of_sales = src.days_of_sales,
|
||||
man.logistics_days = src.logistics_days,
|
||||
man.roic_norm = COALESCE(man.roic_norm, src.roic_norm)
|
||||
FROM [analytics].[manufacturers] man
|
||||
JOIN (
|
||||
SELECT p.producer_name, m.days_of_sales, m.logistics_days, m.roic_norm,
|
||||
ROW_NUMBER() OVER (PARTITION BY LTRIM(RTRIM(p.producer_name)) ORDER BY m.id) AS rn
|
||||
FROM [analytics].[contractor_producer_mapping] m
|
||||
JOIN [analytics].[v_producers] p ON p.producer_1c_id = m.producer_1c_id
|
||||
) src ON LTRIM(RTRIM(man.manufacturer)) = LTRIM(RTRIM(src.producer_name)) AND src.rn = 1;
|
||||
|
||||
-- 3c. Вставить связи в manufacturer_counterparty_map (contractor_1c_id из 1С)
|
||||
INSERT INTO [analytics].[manufacturer_counterparty_map] (manufacturer_id, contractor_1c_id)
|
||||
SELECT man.id, m.contractor_1c_id
|
||||
FROM [analytics].[contractor_producer_mapping] m
|
||||
JOIN [analytics].[v_producers] p ON p.producer_1c_id = m.producer_1c_id
|
||||
JOIN [analytics].[manufacturers] man ON LTRIM(RTRIM(man.manufacturer)) = LTRIM(RTRIM(p.producer_name))
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM [analytics].[manufacturer_counterparty_map] mcm
|
||||
WHERE mcm.manufacturer_id = man.id AND mcm.contractor_1c_id = m.contractor_1c_id
|
||||
);
|
||||
PRINT 'Миграция из contractor_producer_mapping: вставлено связей ' + CAST(@@ROWCOUNT AS NVARCHAR(10));
|
||||
|
||||
-- 3d. Миграция этапов в manufacturer_payment_stage (по одному набору на производителя — из первого mapping)
|
||||
INSERT INTO [analytics].[manufacturer_payment_stage] (manufacturer_id, name, [days], [percent], sort_order)
|
||||
SELECT man.id, s.name, s.[days], s.[percent], s.sort_order
|
||||
FROM [analytics].[contractor_producer_payment_stage] s
|
||||
JOIN [analytics].[contractor_producer_mapping] m ON m.id = s.mapping_id
|
||||
JOIN [analytics].[v_producers] p ON p.producer_1c_id = m.producer_1c_id
|
||||
JOIN [analytics].[manufacturers] man ON LTRIM(RTRIM(man.manufacturer)) = LTRIM(RTRIM(p.producer_name))
|
||||
WHERE m.id = (
|
||||
SELECT MIN(m2.id) FROM [analytics].[contractor_producer_mapping] m2
|
||||
JOIN [analytics].[v_producers] p2 ON p2.producer_1c_id = m2.producer_1c_id
|
||||
WHERE LTRIM(RTRIM(p2.producer_name)) = LTRIM(RTRIM(p.producer_name))
|
||||
)
|
||||
AND man.id NOT IN (SELECT manufacturer_id FROM [analytics].[manufacturer_payment_stage]);
|
||||
PRINT 'Миграция из contractor_producer_payment_stage: вставлено этапов ' + CAST(@@ROWCOUNT AS NVARCHAR(10));
|
||||
END
|
||||
GO
|
||||
|
||||
-- Fallback: миграция из manufacturer_counterparty_payment_stage (если contractor_producer уже удалён)
|
||||
IF OBJECT_ID(N'[analytics].[manufacturer_counterparty_payment_stage]', N'U') IS NOT NULL
|
||||
BEGIN
|
||||
INSERT INTO [analytics].[manufacturer_payment_stage] (manufacturer_id, name, [days], [percent], sort_order)
|
||||
SELECT mcm.manufacturer_id, s.name, s.[days], s.[percent], s.sort_order
|
||||
FROM [analytics].[manufacturer_counterparty_payment_stage] s
|
||||
JOIN [analytics].[manufacturer_counterparty_map] mcm ON mcm.id = s.map_id
|
||||
WHERE mcm.id = (SELECT MIN(m2.id) FROM [analytics].[manufacturer_counterparty_map] m2 WHERE m2.manufacturer_id = mcm.manufacturer_id)
|
||||
AND mcm.manufacturer_id NOT IN (SELECT manufacturer_id FROM [analytics].[manufacturer_payment_stage]);
|
||||
PRINT 'Миграция из manufacturer_counterparty_payment_stage: ' + CAST(@@ROWCOUNT AS NVARCHAR(10));
|
||||
END
|
||||
GO
|
||||
|
||||
-- Дефолтные этапы для manufacturers без этапов (из старых n_/m_ полей, если остались — уже удалены)
|
||||
-- Берём manufacturers без этапов и добавляем Предоплата+Постоплата
|
||||
INSERT INTO [analytics].[manufacturer_payment_stage] (manufacturer_id, name, [days], [percent], sort_order)
|
||||
SELECT man.id, N'Предоплата', 7, 50, 0
|
||||
FROM [analytics].[manufacturers] man
|
||||
WHERE NOT EXISTS (SELECT 1 FROM [analytics].[manufacturer_payment_stage] s WHERE s.manufacturer_id = man.id);
|
||||
|
||||
INSERT INTO [analytics].[manufacturer_payment_stage] (manufacturer_id, name, [days], [percent], sort_order)
|
||||
SELECT man.id, N'Постоплата', 120, 50, 1
|
||||
FROM [analytics].[manufacturers] man
|
||||
WHERE (SELECT COUNT(*) FROM [analytics].[manufacturer_payment_stage] s WHERE s.manufacturer_id = man.id) = 1;
|
||||
|
||||
PRINT 'Созданы дефолтные этапы оплаты';
|
||||
GO
|
||||
|
||||
-- =============================================================================
|
||||
-- 3. manufacturer_counterparty_map: убрать days_of_sales, logistics_days, roic_norm
|
||||
-- =============================================================================
|
||||
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturer_counterparty_map]') AND name = 'days_of_sales')
|
||||
ALTER TABLE [analytics].[manufacturer_counterparty_map] DROP COLUMN [days_of_sales];
|
||||
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturer_counterparty_map]') AND name = 'logistics_days')
|
||||
ALTER TABLE [analytics].[manufacturer_counterparty_map] DROP COLUMN [logistics_days];
|
||||
IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'[analytics].[manufacturer_counterparty_map]') AND name = 'roic_norm')
|
||||
ALTER TABLE [analytics].[manufacturer_counterparty_map] DROP COLUMN [roic_norm];
|
||||
|
||||
PRINT 'manufacturer_counterparty_map: оставлены только manufacturer_id, counterparty_id';
|
||||
GO
|
||||
|
||||
-- =============================================================================
|
||||
-- 4. Удалить manufacturer_counterparty_payment_stage и contractor_producer_*
|
||||
-- =============================================================================
|
||||
IF OBJECT_ID(N'[analytics].[manufacturer_counterparty_payment_stage]', N'U') IS NOT NULL
|
||||
DROP TABLE [analytics].[manufacturer_counterparty_payment_stage];
|
||||
IF OBJECT_ID(N'[analytics].[v_contractor_producer_mapping]', N'V') IS NOT NULL
|
||||
DROP VIEW [analytics].[v_contractor_producer_mapping];
|
||||
IF OBJECT_ID(N'[analytics].[contractor_producer_payment_stage]', N'U') IS NOT NULL
|
||||
DROP TABLE [analytics].[contractor_producer_payment_stage];
|
||||
IF OBJECT_ID(N'[analytics].[contractor_producer_mapping]', N'U') IS NOT NULL
|
||||
DROP TABLE [analytics].[contractor_producer_mapping];
|
||||
|
||||
PRINT 'Удалены manufacturer_counterparty_payment_stage и contractor_producer_*';
|
||||
GO
|
||||
|
||||
-- =============================================================================
|
||||
-- 5. Представление для API (map + manufacturer + counterparty, roic из manufacturers)
|
||||
-- =============================================================================
|
||||
IF OBJECT_ID(N'[analytics].[v_manufacturer_counterparty_mapping]', N'V') IS NOT NULL
|
||||
DROP VIEW [analytics].[v_manufacturer_counterparty_mapping];
|
||||
GO
|
||||
|
||||
CREATE VIEW [analytics].[v_manufacturer_counterparty_mapping] AS
|
||||
SELECT
|
||||
mcm.id,
|
||||
mcm.manufacturer_id,
|
||||
p.producer_id,
|
||||
man.manufacturer AS manufacturer_name,
|
||||
mcm.contractor_1c_id,
|
||||
c.contractor_id,
|
||||
c.contractor_name AS contractor_name,
|
||||
man.days_of_sales,
|
||||
man.logistics_days,
|
||||
man.roic_norm
|
||||
FROM [analytics].[manufacturer_counterparty_map] mcm
|
||||
LEFT JOIN [analytics].[manufacturers] man ON man.id = mcm.manufacturer_id
|
||||
LEFT JOIN [analytics].[v_contractors] c ON c.contractor_1c_id = mcm.contractor_1c_id
|
||||
LEFT JOIN [analytics].[v_producers] p ON LTRIM(RTRIM(p.producer_name)) = LTRIM(RTRIM(man.manufacturer));
|
||||
GO
|
||||
|
||||
PRINT 'Создано представление v_manufacturer_counterparty_mapping';
|
||||
GO
|
||||
|
||||
-- =============================================================================
|
||||
-- 6. View для обратной совместимости процедур (manufacturer + roic + n_/m_)
|
||||
-- =============================================================================
|
||||
IF OBJECT_ID(N'[analytics].[v_manufacturers_roi_compat]', N'V') IS NOT NULL
|
||||
DROP VIEW [analytics].[v_manufacturers_roi_compat];
|
||||
GO
|
||||
|
||||
CREATE VIEW [analytics].[v_manufacturers_roi_compat] AS
|
||||
SELECT
|
||||
man.id,
|
||||
man.manufacturer,
|
||||
man.roic_norm AS ROI_norm,
|
||||
n_stage.[percent] / 100.0 AS n_percent,
|
||||
n_stage.[days] AS n_days,
|
||||
m_stage.[percent] / 100.0 AS m_percent,
|
||||
m_stage.[days] AS m_days
|
||||
FROM [analytics].[manufacturers] man
|
||||
LEFT JOIN (
|
||||
SELECT manufacturer_id, [percent], [days],
|
||||
ROW_NUMBER() OVER (PARTITION BY manufacturer_id ORDER BY sort_order, [days]) AS rn
|
||||
FROM [analytics].[manufacturer_payment_stage]
|
||||
) n_stage ON n_stage.manufacturer_id = man.id AND n_stage.rn = 1
|
||||
LEFT JOIN (
|
||||
SELECT manufacturer_id, [percent], [days],
|
||||
ROW_NUMBER() OVER (PARTITION BY manufacturer_id ORDER BY sort_order, [days]) AS rn
|
||||
FROM [analytics].[manufacturer_payment_stage]
|
||||
) m_stage ON m_stage.manufacturer_id = man.id AND m_stage.rn = 2;
|
||||
GO
|
||||
@ -0,0 +1,50 @@
|
||||
-- =============================================================================
|
||||
-- Пересчёт roic_norm по методике (возврат денег по ходу продаж)
|
||||
-- Таблицы: manufacturers, manufacturer_payment_stage
|
||||
-- Алгоритм: avgReturnDay = logistics_days + days_of_sales/2
|
||||
-- frozenDays = avgReturnDay - effectiveDeferralDays
|
||||
-- roic_norm = 12 / (frozenDays/30) * 100
|
||||
-- =============================================================================
|
||||
|
||||
USE [mag_pbi]
|
||||
GO
|
||||
|
||||
;WITH stage_agg AS (
|
||||
SELECT
|
||||
manufacturer_id,
|
||||
SUM([percent] / 100.0 * [days]) AS effective_deferral_days,
|
||||
SUM([percent] / 100.0) AS total_percent
|
||||
FROM [analytics].[manufacturer_payment_stage]
|
||||
GROUP BY manufacturer_id
|
||||
),
|
||||
calc AS (
|
||||
SELECT
|
||||
man.id,
|
||||
man.days_of_sales,
|
||||
man.logistics_days,
|
||||
COALESCE(s.effective_deferral_days, 0) AS effective_deferral_days,
|
||||
COALESCE(s.total_percent, 0) AS total_percent,
|
||||
(man.logistics_days + man.days_of_sales / 2.0) AS avg_return_day
|
||||
FROM [analytics].[manufacturers] man
|
||||
LEFT JOIN stage_agg s ON s.manufacturer_id = man.id
|
||||
),
|
||||
roic_calc AS (
|
||||
SELECT
|
||||
id,
|
||||
CASE
|
||||
WHEN total_percent <= 0 THEN NULL
|
||||
WHEN (avg_return_day - effective_deferral_days) <= 0 THEN NULL
|
||||
ELSE ROUND(12.0 / ((avg_return_day - effective_deferral_days) / 30.0) * 100.0, 2)
|
||||
END AS new_roic
|
||||
FROM calc
|
||||
)
|
||||
UPDATE man
|
||||
SET man.roic_norm = r.new_roic
|
||||
FROM [analytics].[manufacturers] man
|
||||
JOIN roic_calc r ON r.id = man.id;
|
||||
|
||||
SELECT
|
||||
COUNT(*) AS total,
|
||||
COUNT(roic_norm) AS with_roic,
|
||||
COUNT(*) - COUNT(roic_norm) AS without_roic
|
||||
FROM [analytics].[manufacturers];
|
||||
62
analytics/mag_pbi/scripts/sp_recalc_roic.sql
Normal file
62
analytics/mag_pbi/scripts/sp_recalc_roic.sql
Normal file
@ -0,0 +1,62 @@
|
||||
-- =============================================================================
|
||||
-- Процедура пересчёта roic_norm для manufacturers
|
||||
-- Параметры: @manufacturer_id INT = NULL — id строки в manufacturers; если NULL, пересчёт для всех
|
||||
-- Формула: avgReturnDay = logistics_days + days_of_sales/2
|
||||
-- frozenDays = avgReturnDay - effectiveDeferralDays (из этапов оплаты)
|
||||
-- roic_norm = 12 / (frozenDays/30) * 100
|
||||
-- =============================================================================
|
||||
|
||||
USE [mag_pbi]
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'[analytics].[sp_recalc_roic]', N'P') IS NOT NULL
|
||||
DROP PROCEDURE [analytics].[sp_recalc_roic];
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [analytics].[sp_recalc_roic]
|
||||
@manufacturer_id INT = NULL
|
||||
AS
|
||||
SET NOCOUNT ON;
|
||||
|
||||
;WITH stage_agg AS (
|
||||
SELECT
|
||||
manufacturer_id,
|
||||
SUM([percent] / 100.0 * [days]) AS effective_deferral_days,
|
||||
SUM([percent] / 100.0) AS total_percent
|
||||
FROM [analytics].[manufacturer_payment_stage]
|
||||
WHERE @manufacturer_id IS NULL OR manufacturer_id = @manufacturer_id
|
||||
GROUP BY manufacturer_id
|
||||
),
|
||||
calc AS (
|
||||
SELECT
|
||||
man.id,
|
||||
man.days_of_sales,
|
||||
man.logistics_days,
|
||||
COALESCE(s.effective_deferral_days, 0) AS effective_deferral_days,
|
||||
COALESCE(s.total_percent, 0) AS total_percent,
|
||||
(ISNULL(man.logistics_days, 120) + ISNULL(man.days_of_sales, 180) / 2.0) AS avg_return_day
|
||||
FROM [analytics].[manufacturers] man
|
||||
LEFT JOIN stage_agg s ON s.manufacturer_id = man.id
|
||||
WHERE @manufacturer_id IS NULL OR man.id = @manufacturer_id
|
||||
),
|
||||
roic_calc AS (
|
||||
SELECT
|
||||
id,
|
||||
CASE
|
||||
WHEN total_percent <= 0 THEN NULL
|
||||
WHEN (avg_return_day - effective_deferral_days) <= 0 THEN NULL
|
||||
ELSE ROUND(12.0 / ((avg_return_day - effective_deferral_days) / 30.0) * 100.0, 2)
|
||||
END AS new_roic
|
||||
FROM calc
|
||||
)
|
||||
UPDATE man
|
||||
SET man.roic_norm = r.new_roic
|
||||
FROM [analytics].[manufacturers] man
|
||||
JOIN roic_calc r ON r.id = man.id;
|
||||
|
||||
SELECT @@ROWCOUNT AS updated_count;
|
||||
GO
|
||||
|
||||
-- Примеры вызова:
|
||||
-- EXEC [analytics].[sp_recalc_roic]; -- пересчёт для всех
|
||||
-- EXEC [analytics].[sp_recalc_roic] @manufacturer_id = 5; -- только для id=5
|
||||
BIN
analytics/mag_pbi/tables/mag_pbi_tables.sql
Normal file
BIN
analytics/mag_pbi/tables/mag_pbi_tables.sql
Normal file
Binary file not shown.
BIN
analytics/mag_pbi/views/mag_pbi_views.sql
Normal file
BIN
analytics/mag_pbi/views/mag_pbi_views.sql
Normal file
Binary file not shown.
5
analytics/pbi/model/report/.pbixproj.json
Normal file
5
analytics/pbi/model/report/.pbixproj.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"created": "2026-02-04T18:19:36.8541938+03:00",
|
||||
"lastModified": "2026-02-04T18:19:37.3198069+03:00"
|
||||
}
|
||||
10
analytics/pbi/model/report/Connections.json
Normal file
10
analytics/pbi/model/report/Connections.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"Version": 6,
|
||||
"RemoteArtifacts": [
|
||||
{
|
||||
"DatasetId": "f4e65e8a-12c8-4f22-864c-59603e40b45e",
|
||||
"ReportId": "25e09a6e-0b0f-4a8a-a640-4331f9329c40"
|
||||
}
|
||||
],
|
||||
"OriginalWorkspaceObjectId": "dc155dfb-5cd1-4587-adfd-bde5c5298968"
|
||||
}
|
||||
1274
analytics/pbi/model/report/DiagramLayout.json
Normal file
1274
analytics/pbi/model/report/DiagramLayout.json
Normal file
File diff suppressed because it is too large
Load Diff
3734
analytics/pbi/model/report/Model/cultures/ru-RU.tmdl
Normal file
3734
analytics/pbi/model/report/Model/cultures/ru-RU.tmdl
Normal file
File diff suppressed because it is too large
Load Diff
3
analytics/pbi/model/report/Model/database.tmdl
Normal file
3
analytics/pbi/model/report/Model/database.tmdl
Normal file
@ -0,0 +1,3 @@
|
||||
database report
|
||||
compatibilityLevel: 1600
|
||||
|
||||
87
analytics/pbi/model/report/Model/expressions.tmdl
Normal file
87
analytics/pbi/model/report/Model/expressions.tmdl
Normal file
@ -0,0 +1,87 @@
|
||||
/// DNS-name of the server with BI-data, e.g. "myhost.bitrix24.com"
|
||||
expression 'Server address' = "magok.bitrix24.ru" meta [IsParameterQuery=true, Type="Text", IsParameterQueryRequired=true]
|
||||
|
||||
annotation PBI_ResultType = Text
|
||||
|
||||
/// Secret token
|
||||
expression 'Secret key' = "OLK0Ik9i34J1r3afMOHb5Q16DO821hjMru" meta [IsParameterQuery=true, Type="Text", IsParameterQueryRequired=true]
|
||||
|
||||
annotation PBI_ResultType = Text
|
||||
|
||||
expression bx24_load_entity =
|
||||
let
|
||||
//https://helpdesk.bitrix24.com/open/16457718/
|
||||
//bx24_entity_name: "crm_company_uf"
|
||||
//https://docs.microsoft.com/en-us/powerquery-m/web-contents
|
||||
func = (bx24_entity_name as text) as table =>
|
||||
let
|
||||
response = Web.Contents(
|
||||
"https://" & #"Server address",
|
||||
[
|
||||
RelativePath = "bitrix/tools/biconnector/pbi.php",
|
||||
Query = [
|
||||
table = bx24_entity_name
|
||||
],
|
||||
Content = Json.FromValue([dateRange = [
|
||||
startDate = Date.AddYears(Date.From(DateTime.LocalNow()),-5),
|
||||
endDate = Date.From(DateTime.LocalNow())],
|
||||
key = #"Secret key"
|
||||
]
|
||||
)
|
||||
]
|
||||
),
|
||||
jd = Json.Document(response)
|
||||
in
|
||||
Table.FromRows(
|
||||
List.Skip(jd),//data: >=1 row (index 0 based)
|
||||
List.First(jd)//header: 0 row (index 0 based)
|
||||
)
|
||||
in
|
||||
func
|
||||
|
||||
annotation PBI_ResultType = Function
|
||||
|
||||
expression 'Ошибки в Я Директ расходы' =
|
||||
let
|
||||
Источник = #"Я.Директ расходы стар",
|
||||
#"Обнаруженные несоответствия типов" = let
|
||||
tableWithOnlyPrimitiveTypes = Table.SelectColumns(Источник, Table.ColumnsOfType(Источник, {type nullable number, type nullable text, type nullable logical, type nullable date, type nullable datetime, type nullable datetimezone, type nullable time, type nullable duration})),
|
||||
recordTypeFields = Type.RecordFields(Type.TableRow(Value.Type(tableWithOnlyPrimitiveTypes))),
|
||||
fieldNames = Record.FieldNames(recordTypeFields),
|
||||
fieldTypes = List.Transform(Record.ToList(recordTypeFields), each [Type]),
|
||||
pairs = List.Transform(List.Positions(fieldNames), (i) => {fieldNames{i}, (v) => if v = null or Value.Is(v, fieldTypes{i}) then v else error [Message = "Тип значения не соответствует типу столбца.", Detail = v], fieldTypes{i}})
|
||||
in
|
||||
Table.TransformColumns(Источник, pairs),
|
||||
#"Добавлен индекс" = Table.AddIndexColumn(#"Обнаруженные несоответствия типов", "Номер строки" ,1),
|
||||
#"Сохраненные ошибки" = Table.SelectRowsWithErrors(#"Добавлен индекс", {"Дата", "Кампания", "Группа", "Условие показа", "№ Условия показа", "Показы", "Клики", "CTR (%)", "key_dir", "Ср. цена клика, руб", "Расход, руб"}),
|
||||
#"Переупорядоченные столбцы" = Table.ReorderColumns(#"Сохраненные ошибки", {"Номер строки", "Дата", "Кампания", "Группа", "Условие показа", "№ Условия показа", "Показы", "Клики", "CTR (%)", "key_dir", "Ср. цена клика, руб", "Расход, руб"})
|
||||
in
|
||||
#"Переупорядоченные столбцы"
|
||||
queryGroup: 'Ошибки в запросах — 05 01 2025 15:59:08'
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
annotation PBI_ResultType = Exception
|
||||
|
||||
expression 'Я.Директ расходы стар' =
|
||||
let
|
||||
Источник = GoogleSheets.Contents("https://docs.google.com/spreadsheets/d/12gd2O6tTGPGc2BsRbX_QPKn4VF23jhXoFcrj8ErblAo/edit?usp=sharing"),
|
||||
#"Мастер отчётов_Table" = Источник{[name="Мастер отчётов",ItemKind="Table"]}[Data],
|
||||
#"Повышенные заголовки" = Table.PromoteHeaders(#"Мастер отчётов_Table", [PromoteAllScalars=true]),
|
||||
#"Измененный тип" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"Дата", type date}, {"Кампания", type text}, {"№ Кампании", type text}, {"Группа", type text}, {"№ Группы", type text}, {"Условие показа", type text}, {"№ Условия показа", type text}, {"Показы", Int64.Type}, {"Клики", Int64.Type}, {"CTR (%)", type number}, {"Расход (руб.)", type number}, {"Ср. цена клика (руб.)", type number}}),
|
||||
#"Вставлено: объединенный столбец" = Table.AddColumn(#"Измененный тип", "key_dir", each Text.Combine({[#"№ Кампании"], [#"№ Группы"]}, "-"), type text),
|
||||
#"Удаленные столбцы" = Table.RemoveColumns(#"Вставлено: объединенный столбец",{"№ Кампании", "№ Группы"}),
|
||||
#"Добавлен пользовательский объект" = Table.AddColumn(#"Удаленные столбцы", "Ср. цена клика, руб", each [#"Ср. цена клика (руб.)"]/1000),
|
||||
#"Удаленные столбцы1" = Table.RemoveColumns(#"Добавлен пользовательский объект",{"Ср. цена клика (руб.)"}),
|
||||
#"Измененный тип1" = Table.TransformColumnTypes(#"Удаленные столбцы1",{{"Ср. цена клика, руб", type number}}),
|
||||
#"Добавлен пользовательский объект1" = Table.AddColumn(#"Измененный тип1", "Расход, руб", each [#"Расход (руб.)"]/1000),
|
||||
#"Измененный тип2" = Table.TransformColumnTypes(#"Добавлен пользовательский объект1",{{"Расход, руб", type number}}),
|
||||
#"Удаленные столбцы2" = Table.RemoveColumns(#"Измененный тип2",{"Расход (руб.)"}),
|
||||
#"Строки с примененным фильтром" = Table.SelectRows(#"Удаленные столбцы2", each [Дата] < #date(2024, 6, 1))
|
||||
in
|
||||
#"Строки с примененным фильтром"
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
78
analytics/pbi/model/report/Model/model.tmdl
Normal file
78
analytics/pbi/model/report/Model/model.tmdl
Normal file
@ -0,0 +1,78 @@
|
||||
model Model
|
||||
culture: ru-RU
|
||||
defaultPowerBIDataSourceVersion: powerBI_V3
|
||||
sourceQueryCulture: ru-RU
|
||||
dataAccessOptions
|
||||
fastCombine
|
||||
legacyRedirects
|
||||
returnErrorValuesAsNull
|
||||
|
||||
/// Ошибки в запросах, загруженных 05.01.2025 15:59:08.
|
||||
queryGroup 'Ошибки в запросах — 05 01 2025 15:59:08'
|
||||
|
||||
annotation PBI_QueryGroupOrder = 0
|
||||
|
||||
annotation __PBI_TimeIntelligenceEnabled = 1
|
||||
|
||||
annotation PBI_QueryOrder = ["Номенклатура","Партнер","Стоимость МП","Server address","Secret key","crm_company_uf","Себестоимость","Основной отчет","Группы","bx24_load_entity","Остатки","Заявки на оплату","План продаж менеджеров","План продаж по группам","Менеджеры","mp остатки","mp аналитика продаж","Я.Директ расходы стар","Ошибки в Я Директ расходы","ПРАЙСлист","Отзывы клиентов","Упущенные продажи","Расходы по годам","Заказы все","mp реклама","План маркеты","Резервы","Я.Директ расходы","Я.Директ заказы","mp узел","mp оборот"]
|
||||
|
||||
annotation PBI_ProTooling = ["DaxQueryView_Desktop"]
|
||||
|
||||
ref table Номенклатура
|
||||
ref table Партнер
|
||||
ref table 'Стоимость МП'
|
||||
ref table DateTableTemplate_716ce6bb-e9bc-46ef-bfd4-865e74deaed5
|
||||
ref table LocalDateTable_67da7b50-915b-480b-9e3a-3a60739fb0c6
|
||||
ref table crm_company_uf
|
||||
ref table LocalDateTable_49b06afb-4254-4da6-9109-618106084862
|
||||
ref table LocalDateTable_c661d468-0044-4990-b9e8-723cda59cf51
|
||||
ref table '.Календарь'
|
||||
ref table Себестоимость
|
||||
ref table LocalDateTable_93d80160-0984-4e44-91de-316b6ab26727
|
||||
ref table 'Основной отчет'
|
||||
ref table Группы
|
||||
ref table Закупки
|
||||
ref table Остатки
|
||||
ref table 'Заявки на оплату'
|
||||
ref table LocalDateTable_729bf6db-04e4-4a26-9dce-b3837667cb92
|
||||
ref table 'Параметр цена продажи, %'
|
||||
ref table 'План продаж менеджеров'
|
||||
ref table 'План продаж по группам'
|
||||
ref table LocalDateTable_704570fc-e0c6-4914-97ab-ebb645a2ab6e
|
||||
ref table LocalDateTable_2b612047-5dcc-402e-b2ed-154636b18544
|
||||
ref table Организация
|
||||
ref table Менеджеры
|
||||
ref table 'mp остатки'
|
||||
ref table 'mp аналитика продаж'
|
||||
ref table ПРАЙСлист
|
||||
ref table LocalDateTable_e0374236-67f4-4331-b4f5-c977a3082bab
|
||||
ref table 'Отзывы клиентов'
|
||||
ref table 'Упущенные продажи'
|
||||
ref table LocalDateTable_2f146245-8120-4ed9-87dc-af8699bb0274
|
||||
ref table 'Расходы по годам'
|
||||
ref table 'Заказы все'
|
||||
ref table 'mp реклама'
|
||||
ref table LocalDateTable_1c75c57c-6ac4-4a07-ab45-b46636c3847c
|
||||
ref table 'План маркеты'
|
||||
ref table LocalDateTable_66d8bbba-35e3-44df-be7f-bb6fc44f271a
|
||||
ref table Резервы
|
||||
ref table LocalDateTable_588ed205-7c5f-41f0-9bd7-0d82b2484f09
|
||||
ref table 'Я.Директ расходы'
|
||||
ref table 'Я.Директ заказы'
|
||||
ref table 'mp узел'
|
||||
ref table 'mp оборот'
|
||||
|
||||
ref role 'Алова Елена'
|
||||
ref role 'Гладышева Ольга'
|
||||
ref role 'Кирилюк Юлия'
|
||||
ref role 'Ларина Татьяна'
|
||||
ref role 'Шевченко Антонина'
|
||||
ref role 'Иншакова Ксения'
|
||||
ref role 'Менеджер отдела закупок'
|
||||
ref role 'Ханоян Артем'
|
||||
ref role 'Менеджер отдела интернет-маркетинга'
|
||||
ref role 'Менеджер отдела продаж'
|
||||
ref role 'Эдуард Рахматуллин'
|
||||
|
||||
ref cultureInfo ru-RU
|
||||
|
||||
247
analytics/pbi/model/report/Model/relationships.tmdl
Normal file
247
analytics/pbi/model/report/Model/relationships.tmdl
Normal file
@ -0,0 +1,247 @@
|
||||
relationship 0c9c501a-fa6a-4c94-99ae-b825ee836e89
|
||||
fromColumn: 'Стоимость МП'.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship 70d8fb19-ce6e-4331-bdd5-c48b97661c3a
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: Партнер.ДатаРегистрации
|
||||
toColumn: LocalDateTable_67da7b50-915b-480b-9e3a-3a60739fb0c6.Date
|
||||
|
||||
relationship 34a39f02-5cb4-4c1b-b8e8-ea3ef9aafb4e
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: crm_company_uf.'Дата последнего звонка'
|
||||
toColumn: LocalDateTable_49b06afb-4254-4da6-9109-618106084862.Date
|
||||
|
||||
relationship b7780e24-ae05-4812-ad3f-b6d9dc7f50cc
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: Партнер.'Дата последнего звонка'
|
||||
toColumn: LocalDateTable_c661d468-0044-4990-b9e8-723cda59cf51.Date
|
||||
|
||||
relationship 8e2d6fc2-aec0-1ef2-5916-f2e35c465192
|
||||
fromColumn: 'Стоимость МП'.ПартнерКод
|
||||
toColumn: Партнер.'Код УТ'
|
||||
|
||||
relationship d56f34dd-d18a-4511-b10b-85895b67822c
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: Себестоимость.'Заказ закрыт'
|
||||
toColumn: LocalDateTable_93d80160-0984-4e44-91de-316b6ab26727.Date
|
||||
|
||||
relationship 355102b6-e291-2095-8fd4-32447366f728
|
||||
fromColumn: Себестоимость.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship 7505878b-5508-458a-653e-9360556cef53
|
||||
fromColumn: Себестоимость.PartnerId
|
||||
toColumn: Партнер.partner_id
|
||||
|
||||
relationship 5534460f-9c82-363b-9fe4-45f95118ac89
|
||||
crossFilteringBehavior: bothDirections
|
||||
fromColumn: Номенклатура._group_id
|
||||
toColumn: Группы.group_id
|
||||
|
||||
relationship AutoDetected_e288bde8-030d-4a1f-8a03-91f31dd9f651
|
||||
fromColumn: Остатки.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship 8208f512-c8a9-47d1-b47c-2bce30b6b8f8
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: 'Заявки на оплату'.date
|
||||
toColumn: LocalDateTable_729bf6db-04e4-4a26-9dce-b3837667cb92.Date
|
||||
|
||||
relationship 55297e27-cac1-ef2a-4ee1-6cc80b8a1167
|
||||
fromColumn: 'Заявки на оплату'.partner_id
|
||||
toColumn: Партнер.partner_id
|
||||
|
||||
relationship 6bdd8855-c6d2-4c21-b90f-cb9f0b0bd52e
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: 'План продаж по группам'.Месяц
|
||||
toColumn: LocalDateTable_704570fc-e0c6-4914-97ab-ebb645a2ab6e.Date
|
||||
|
||||
relationship 8afa5bd2-9707-4363-96f2-670a305dc4f3
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: Остатки.Дата
|
||||
toColumn: LocalDateTable_2b612047-5dcc-402e-b2ed-154636b18544.Date
|
||||
|
||||
relationship 7fecb2f9-fc49-b4a1-2fd5-41f2e1888950
|
||||
fromColumn: Себестоимость.Организация
|
||||
toColumn: Организация.Организация
|
||||
|
||||
relationship 32985c97-823f-ffbc-00fe-9f92ac1bae11
|
||||
fromColumn: 'Стоимость МП'.Организация
|
||||
toColumn: Организация.Организация
|
||||
|
||||
relationship AutoDetected_e9e769be-3122-4b9c-a4eb-06f97eba8eae
|
||||
fromColumn: 'План продаж менеджеров'.user_id
|
||||
toColumn: Менеджеры.user_id
|
||||
|
||||
relationship 02f6fe40-78b9-93d1-f010-564c9b543bfe
|
||||
fromColumn: Партнер.manager_id
|
||||
toColumn: Менеджеры.user_id
|
||||
|
||||
relationship f2e0ac1f-b839-4157-6c3e-57b88efa417c
|
||||
fromColumn: 'mp остатки'.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship 31cf1118-b7c5-7d77-48dd-1b589c984d03
|
||||
fromColumn: 'mp аналитика продаж'.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship AutoDetected_34ee49f1-fee2-4e8c-ae63-add84ec273df
|
||||
fromColumn: ПРАЙСлист.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship 306cff38-7ed9-4281-b26b-fdf3eb9b0316
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: '.Календарь'.Дата
|
||||
toColumn: LocalDateTable_e0374236-67f4-4331-b4f5-c977a3082bab.Date
|
||||
|
||||
relationship aeabbc3f-c05e-16a8-0814-e1504239b9c6
|
||||
fromColumn: 'Стоимость МП'.Период
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship 8be1b23d-e487-097c-bcee-1a32b231c1dc
|
||||
fromColumn: Себестоимость.Период
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship f67b410c-fe68-57c7-552d-861cd0a89a3e
|
||||
fromColumn: 'Заявки на оплату'.'Дата оплаты план'
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship 5e52a163-909c-6b8d-25bc-b035e9ac2da8
|
||||
fromColumn: 'План продаж менеджеров'.Период
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship dd599fe4-4d7d-02f0-ff23-c15949d273d6
|
||||
fromColumn: 'mp остатки'.'Дата обновления'
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship a9aa002f-ecc1-626a-3629-1649907a88ac
|
||||
fromColumn: 'mp аналитика продаж'.Дата
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship 60f5c804-9c9a-709a-3a69-c4fdd8d95032
|
||||
fromColumn: ПРАЙСлист.Дата
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship AutoDetected_3779c3ac-c497-4083-8eb0-ad86aaa8a771
|
||||
fromColumn: 'Упущенные продажи'.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship 4f365827-f1a2-9c34-5415-efb3452f5951
|
||||
fromColumn: 'Упущенные продажи'.Дата
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship 28a764af-4e8a-4c89-8ceb-304403c0d71a
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: 'Упущенные продажи'.'Дата первого поступления'
|
||||
toColumn: LocalDateTable_2f146245-8120-4ed9-87dc-af8699bb0274.Date
|
||||
|
||||
relationship 4d693140-48df-ebb1-5b1f-775c66de2412
|
||||
fromColumn: 'Заказы все'.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship 9178e59f-fd80-fe45-d854-b1b441024ce8
|
||||
isActive: false
|
||||
fromColumn: 'Заказы все'.partner_id
|
||||
toColumn: Партнер.partner_id
|
||||
|
||||
relationship 8229a93a-e14d-491e-ac57-cbab91627fdd
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: 'mp реклама'.'Дата начала'
|
||||
toColumn: LocalDateTable_1c75c57c-6ac4-4a07-ab45-b46636c3847c.Date
|
||||
|
||||
relationship c3cb1aca-d642-4ed3-d7a7-c54fe18f71d3
|
||||
fromColumn: 'mp реклама'.Дата
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship fae31430-95d8-f385-acf1-a2826f31846c
|
||||
fromColumn: 'mp реклама'.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship 381b6bd4-06f4-496e-9264-13deb45adbf2
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: 'План маркеты'.Месяц
|
||||
toColumn: LocalDateTable_66d8bbba-35e3-44df-be7f-bb6fc44f271a.Date
|
||||
|
||||
relationship f9bb46c5-d73a-2219-3f8a-07559a96a567
|
||||
fromColumn: Закупки.Период
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship e4537ee3-4045-38dc-b214-cb1c5de0b9e2
|
||||
fromColumn: Закупки.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship cf649bbe-1ad9-14ce-b264-dacef01746a7
|
||||
fromColumn: Закупки.Организация
|
||||
toColumn: Организация.Организация
|
||||
|
||||
relationship b3ea723a-e172-b759-0f23-bb851737fb34
|
||||
fromColumn: Закупки.partner_id
|
||||
toColumn: Партнер.partner_id
|
||||
|
||||
relationship AutoDetected_78bdb83b-79d3-4f5e-b7af-54227f9db024
|
||||
fromColumn: Резервы.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship e27252e4-5020-94c9-42db-b3a63806f34f
|
||||
fromColumn: Резервы.'Дата обновления'
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship 8171e79f-bfe6-4798-bb1a-98146553bada
|
||||
joinOnDateBehavior: datePartOnly
|
||||
fromColumn: Партнер.'Дата первого заказа'
|
||||
toColumn: LocalDateTable_588ed205-7c5f-41f0-9bd7-0d82b2484f09.Date
|
||||
|
||||
relationship 43da0466-6cb4-29cb-0624-f73171c1d064
|
||||
toCardinality: many
|
||||
fromColumn: 'Я.Директ расходы'.key_dir
|
||||
toColumn: 'Я.Директ заказы'.key_dir
|
||||
|
||||
relationship 634101f5-71e4-2d48-7d90-832b057647a3
|
||||
fromColumn: 'Я.Директ расходы'.Дата
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
relationship e1b1daf7-34c4-f072-2ead-53e97f931563
|
||||
fromColumn: Себестоимость.'Номер заказа'
|
||||
toColumn: 'Я.Директ заказы'.'ID покупки'
|
||||
|
||||
relationship AutoDetected_817d2b4f-98f1-49e0-870f-fdecc60d7626
|
||||
fromColumn: 'mp узел'.partner_id
|
||||
toColumn: Партнер.partner_id
|
||||
|
||||
relationship AutoDetected_42494399-5383-444c-8db6-3ff0012aa9c5
|
||||
fromColumn: 'mp остатки'.Узел
|
||||
toColumn: 'mp узел'.Узел
|
||||
|
||||
relationship AutoDetected_77d661d6-36fd-48d2-b282-4961d4b5d737
|
||||
fromColumn: 'mp аналитика продаж'.Узел
|
||||
toColumn: 'mp узел'.Узел
|
||||
|
||||
relationship AutoDetected_372b4703-5804-44e3-9c83-e56aea6514b2
|
||||
fromColumn: 'mp реклама'.Узел
|
||||
toColumn: 'mp узел'.Узел
|
||||
|
||||
relationship 706a676c-ec4a-005d-17ab-0073194ef5f8
|
||||
fromColumn: 'План продаж по группам'.group_id
|
||||
toColumn: Группы.group_id
|
||||
|
||||
relationship 13260857-b641-cb5b-b3cb-f14771c5cec6
|
||||
fromColumn: 'mp узел'.Организация
|
||||
toColumn: Организация.Организация
|
||||
|
||||
relationship AutoDetected_3bd74343-497b-4516-b07f-1d3c2d6b07b6
|
||||
fromColumn: 'mp оборот'.artic_id
|
||||
toColumn: Номенклатура._artic_id
|
||||
|
||||
relationship AutoDetected_db8d1849-dfff-4593-996d-4891727f496d
|
||||
fromColumn: 'mp оборот'.partner_id
|
||||
toColumn: Партнер.partner_id
|
||||
|
||||
relationship a388dedc-5e84-5967-96df-b8bae5c33891
|
||||
fromColumn: 'mp оборот'.Организация
|
||||
toColumn: Организация.Организация
|
||||
|
||||
relationship d0083c1d-7d13-e893-6081-a9eeae7c53f0
|
||||
fromColumn: 'mp оборот'.Дата
|
||||
toColumn: '.Календарь'.Дата
|
||||
|
||||
7
analytics/pbi/model/report/Model/roles/Алова Елена.tmdl
Normal file
7
analytics/pbi/model/report/Model/roles/Алова Елена.tmdl
Normal file
@ -0,0 +1,7 @@
|
||||
role 'Алова Елена'
|
||||
modelPermission: read
|
||||
|
||||
tablePermission Номенклатура = [Менеджер по закупкам] == "Алова Елена" || [РуководительНаправления] == "Алова Елена" || [Товарный менеджер] == "Алова Елена"
|
||||
|
||||
annotation PBI_Id = 232ba4e958694f06a7d05f870c7a2e09
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
role 'Гладышева Ольга'
|
||||
modelPermission: read
|
||||
|
||||
tablePermission Номенклатура = [Менеджер по закупкам] == "Гладышева Ольга" || [РуководительНаправления] == "Гладышева Ольга" || [Товарный менеджер] == "Гладышева Ольга"
|
||||
|
||||
annotation PBI_Id = 7c1c9d1f38744bf4a1bd941e24707af1
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
role 'Иншакова Ксения'
|
||||
modelPermission: read
|
||||
|
||||
tablePermission Номенклатура = [Менеджер по закупкам] == "Иншакова Ксения" || [РуководительНаправления] == "Иншакова Ксения" || [Товарный менеджер] == "Иншакова Ксения" || [Товарный менеджер] == "Дивеева Ирина"
|
||||
|
||||
annotation PBI_Id = 2b33c12aca5843adae941a60b22de032
|
||||
|
||||
7
analytics/pbi/model/report/Model/roles/Кирилюк Юлия.tmdl
Normal file
7
analytics/pbi/model/report/Model/roles/Кирилюк Юлия.tmdl
Normal file
@ -0,0 +1,7 @@
|
||||
role 'Кирилюк Юлия'
|
||||
modelPermission: read
|
||||
|
||||
tablePermission Номенклатура = [Менеджер по закупкам] == "Кирилюк Юлия" || [РуководительНаправления] == "Кирилюк Юлия" || [Товарный менеджер] == "Кирилюк Юлия"
|
||||
|
||||
annotation PBI_Id = 229e8df5eeb84976a4877b1f158b9061
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
role 'Ларина Татьяна'
|
||||
modelPermission: read
|
||||
|
||||
tablePermission Номенклатура = [Менеджер по закупкам] == "Ларина Татьяна" || [РуководительНаправления] == "Ларина Татьяна" || [Товарный менеджер] == "Ларина Татьяна"
|
||||
|
||||
annotation PBI_Id = 8e3b251c563a42249202718154a471e4
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
role 'Менеджер отдела закупок'
|
||||
modelPermission: read
|
||||
|
||||
annotation PBI_Id = 5c63de3d119c4466a367623e23f8c9e3
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
role 'Менеджер отдела интернет-маркетинга'
|
||||
modelPermission: read
|
||||
|
||||
annotation PBI_Id = 09735f8d6e7f4139929ac3460ed5829b
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
role 'Менеджер отдела продаж'
|
||||
modelPermission: read
|
||||
|
||||
annotation PBI_Id = 3e05b61dc5134a3f9ef8d14b2a0b742a
|
||||
|
||||
7
analytics/pbi/model/report/Model/roles/Ханоян Артем.tmdl
Normal file
7
analytics/pbi/model/report/Model/roles/Ханоян Артем.tmdl
Normal file
@ -0,0 +1,7 @@
|
||||
role 'Ханоян Артем'
|
||||
modelPermission: read
|
||||
|
||||
tablePermission Номенклатура = [Менеджер по закупкам] == "Ханоян Артем" || [РуководительНаправления] == "Ханоян Артем" || [Товарный менеджер] == "Ханоян Артем"
|
||||
|
||||
annotation PBI_Id = 2ae5566020ac4b96a50a5f1937670aee
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
role 'Шевченко Антонина'
|
||||
modelPermission: read
|
||||
|
||||
tablePermission Номенклатура = [Менеджер по закупкам] == "Шевченко Антонина" || [РуководительНаправления] == "Шевченко Антонина" || [Товарный менеджер] == "Шевченко Антонина"
|
||||
|
||||
annotation PBI_Id = 00514f80ab984abd9f6957c4a3df98ea
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
role 'Эдуард Рахматуллин'
|
||||
modelPermission: read
|
||||
|
||||
annotation PBI_Id = ffed27e83fa442788546be7bc067a933
|
||||
|
||||
36
analytics/pbi/model/report/Model/tables/.Календарь.tmdl
Normal file
36
analytics/pbi/model/report/Model/tables/.Календарь.tmdl
Normal file
@ -0,0 +1,36 @@
|
||||
table '.Календарь'
|
||||
|
||||
measure 'Курс TODAY-1, usd2' = CALCULATE(MAX('Себестоимость'[Курс usd2]), '.Календарь'[Дата] = TODAY() - 1)
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Дата
|
||||
formatString: m/d/yyyy
|
||||
summarizeBy: none
|
||||
sourceColumn: [Date]
|
||||
|
||||
variation Изменение
|
||||
isDefault
|
||||
relationship: 306cff38-7ed9-4281-b26b-fdf3eb9b0316
|
||||
defaultHierarchy: LocalDateTable_e0374236-67f4-4331-b4f5-c977a3082bab.'Иерархия дат'
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isDateTimeCustom":true}
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column 'Год неделя' = YEAR('.Календарь'[Дата]) & "-" & FORMAT(WEEKNUM('.Календарь'[Дата], 2), "00")
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition '.Календарь' = calculated
|
||||
mode: import
|
||||
source = ```
|
||||
CALENDAR(DATE(2018,01,01), TODAY())
|
||||
|
||||
```
|
||||
|
||||
annotation PBI_Id = 96f54ceb7af44a4682e4399eeac84d37
|
||||
|
||||
@ -0,0 +1,93 @@
|
||||
table DateTableTemplate_716ce6bb-e9bc-46ef-bfd4-865e74deaed5
|
||||
isHidden
|
||||
isPrivate
|
||||
|
||||
column Date
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition DateTableTemplate_716ce6bb-e9bc-46ef-bfd4-865e74deaed5-a50c2945-fdf8-4e06-908a-c3e9748445a8 = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(2015,1,1), Date(2015,1,1))
|
||||
|
||||
annotation __PBI_TemplateDateTable = true
|
||||
|
||||
annotation DefaultItem = DateHierarchy
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_1c75c57c-6ac4-4a07-ab45-b46636c3847c
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_1c75c57c-6ac4-4a07-ab45-b46636c3847c = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('mp реклама'[Дата начала])), 1, 1), Date(Year(MAX('mp реклама'[Дата начала])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_2b612047-5dcc-402e-b2ed-154636b18544
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_2b612047-5dcc-402e-b2ed-154636b18544 = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('Остатки'[Дата])), 1, 1), Date(Year(MAX('Остатки'[Дата])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_2f146245-8120-4ed9-87dc-af8699bb0274
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_2f146245-8120-4ed9-87dc-af8699bb0274 = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('Упущенные продажи'[Дата первого поступления])), 1, 1), Date(Year(MAX('Упущенные продажи'[Дата первого поступления])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_49b06afb-4254-4da6-9109-618106084862
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_49b06afb-4254-4da6-9109-618106084862 = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('crm_company_uf'[Дата последнего звонка])), 1, 1), Date(Year(MAX('crm_company_uf'[Дата последнего звонка])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_588ed205-7c5f-41f0-9bd7-0d82b2484f09
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_588ed205-7c5f-41f0-9bd7-0d82b2484f09 = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('Партнер'[Дата первого заказа])), 1, 1), Date(Year(MAX('Партнер'[Дата первого заказа])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_66d8bbba-35e3-44df-be7f-bb6fc44f271a
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_66d8bbba-35e3-44df-be7f-bb6fc44f271a = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('План маркеты'[Месяц])), 1, 1), Date(Year(MAX('План маркеты'[Месяц])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_67da7b50-915b-480b-9e3a-3a60739fb0c6
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_67da7b50-915b-480b-9e3a-3a60739fb0c6 = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('Партнер'[ДатаРегистрации])), 1, 1), Date(Year(MAX('Партнер'[ДатаРегистрации])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_704570fc-e0c6-4914-97ab-ebb645a2ab6e
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_704570fc-e0c6-4914-97ab-ebb645a2ab6e = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('План продаж по группам'[Месяц])), 1, 1), Date(Year(MAX('План продаж по группам'[Месяц])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_729bf6db-04e4-4a26-9dce-b3837667cb92
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_729bf6db-04e4-4a26-9dce-b3837667cb92 = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('Заявки на оплату'[date])), 1, 1), Date(Year(MAX('Заявки на оплату'[date])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_93d80160-0984-4e44-91de-316b6ab26727
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_93d80160-0984-4e44-91de-316b6ab26727 = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('Себестоимость'[Заказ закрыт])), 1, 1), Date(Year(MAX('Себестоимость'[Заказ закрыт])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_c661d468-0044-4990-b9e8-723cda59cf51
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_c661d468-0044-4990-b9e8-723cda59cf51 = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('Партнер'[Дата последнего звонка])), 1, 1), Date(Year(MAX('Партнер'[Дата последнего звонка])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
table LocalDateTable_e0374236-67f4-4331-b4f5-c977a3082bab
|
||||
isHidden
|
||||
showAsVariationsOnly
|
||||
|
||||
column Date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
dataCategory: PaddedDateTableDates
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Date]
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
column Год = YEAR([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: Years
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Year
|
||||
|
||||
column №Месяца = MONTH([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: MonthOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = MonthNumber
|
||||
|
||||
column Месяц = FORMAT([Date], "MMMM")
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Months
|
||||
summarizeBy: none
|
||||
sortByColumn: №Месяца
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Month
|
||||
|
||||
column №Квартала = INT(([№Месяца] + 2) / 3)
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: QuarterOfYear
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = QuarterNumber
|
||||
|
||||
column Квартал = "Кв. " & [№Квартала]
|
||||
dataType: string
|
||||
isHidden
|
||||
dataCategory: Quarters
|
||||
summarizeBy: none
|
||||
sortByColumn: №Квартала
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Quarter
|
||||
|
||||
column День = DAY([Date])
|
||||
dataType: int64
|
||||
isHidden
|
||||
dataCategory: DayOfMonth
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation TemplateId = Day
|
||||
|
||||
hierarchy 'Иерархия дат'
|
||||
|
||||
level Год
|
||||
column: Год
|
||||
|
||||
level Квартал
|
||||
column: Квартал
|
||||
|
||||
level Месяц
|
||||
column: Месяц
|
||||
|
||||
level День
|
||||
column: День
|
||||
|
||||
annotation TemplateId = DateHierarchy
|
||||
|
||||
partition LocalDateTable_e0374236-67f4-4331-b4f5-c977a3082bab = calculated
|
||||
mode: import
|
||||
source = Calendar(Date(Year(MIN('.Календарь'[Дата])), 1, 1), Date(Year(MAX('.Календарь'[Дата])), 12, 31))
|
||||
|
||||
annotation __PBI_LocalDateTable = true
|
||||
|
||||
60
analytics/pbi/model/report/Model/tables/crm_company_uf.tmdl
Normal file
60
analytics/pbi/model/report/Model/tables/crm_company_uf.tmdl
Normal file
@ -0,0 +1,60 @@
|
||||
table crm_company_uf
|
||||
isHidden
|
||||
|
||||
column bitrix_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: bitrix_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Дата последнего звонка'
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата последнего звонка
|
||||
|
||||
variation Изменение
|
||||
isDefault
|
||||
relationship: 34a39f02-5cb4-4c1b-b8e8-ea3ef9aafb4e
|
||||
defaultHierarchy: LocalDateTable_49b06afb-4254-4da6-9109-618106084862.'Иерархия дат'
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
partition crm_company_uf = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
raw_t = bx24_load_entity("crm_company_uf"),
|
||||
fixed_t = Table.TransformColumnTypes(raw_t,
|
||||
{
|
||||
{"COMPANY_ID", Int64.Type},
|
||||
|
||||
{"DATE_CREATE", type datetime}
|
||||
|
||||
//{"UF_CRM_12345", type text}
|
||||
|
||||
},
|
||||
"en-US"
|
||||
),
|
||||
#"Другие удаленные столбцы" = Table.SelectColumns(fixed_t,{"COMPANY_ID", "UF_CRM_LAST_CALL_DATE"}),
|
||||
#"Разделить столбец по разделителю" = Table.SplitColumn(#"Другие удаленные столбцы", "UF_CRM_LAST_CALL_DATE", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"UF_CRM_LAST_CALL_DATE.1", "UF_CRM_LAST_CALL_DATE.2"}),
|
||||
#"Измененный тип" = Table.TransformColumnTypes(#"Разделить столбец по разделителю",{{"UF_CRM_LAST_CALL_DATE.1", type date}, {"UF_CRM_LAST_CALL_DATE.2", type time}}),
|
||||
#"Удаленные столбцы" = Table.RemoveColumns(#"Измененный тип",{"UF_CRM_LAST_CALL_DATE.2"}),
|
||||
#"Переименованные столбцы" = Table.RenameColumns(#"Удаленные столбцы",{{"COMPANY_ID", "bitrix_id"}, {"UF_CRM_LAST_CALL_DATE.1", "Дата последнего звонка"}}),
|
||||
#"Измененный тип1" = Table.TransformColumnTypes(#"Переименованные столбцы",{{"bitrix_id", type text}})
|
||||
in
|
||||
#"Измененный тип1"
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
105
analytics/pbi/model/report/Model/tables/mp аналитика продаж.tmdl
Normal file
105
analytics/pbi/model/report/Model/tables/mp аналитика продаж.tmdl
Normal file
@ -0,0 +1,105 @@
|
||||
table 'mp аналитика продаж'
|
||||
|
||||
column Узел
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Узел
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Вид загрузки'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Вид загрузки
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Склад
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Склад
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Дата
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column artic_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: artic_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Область
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Область
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Страна
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Страна
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Регион
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Регион
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Продано, упак'
|
||||
dataType: int64
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Продано, упак
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Продано, руб'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Продано, руб
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'mp аналитика продаж' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
#"pbi_Внешние продажи" = Источник{[Schema="pbi",Item="Внешние продажи"]}[Data],
|
||||
#"Измененный тип" = Table.TransformColumnTypes(#"pbi_Внешние продажи",{{"Дата", type date}, {"Количество", Int64.Type}}),
|
||||
#"Переименованные столбцы" = Table.RenameColumns(#"Измененный тип",{{"Количество", "Продано, шт"}, {"Сумма", "Продано, руб"}}),
|
||||
#"Обрезанный текст" = Table.TransformColumns(#"Переименованные столбцы",{{"id_внешний", Text.Trim, type text}}),
|
||||
#"Удаленные столбцы" = Table.RemoveColumns(#"Обрезанный текст",{"id_внешний"}),
|
||||
#"Строки с примененным фильтром" = Table.SelectRows(#"Удаленные столбцы", each [Дата] >= #date(2024, 1, 1)),
|
||||
#"Переименованные столбцы1" = Table.RenameColumns(#"Строки с примененным фильтром",{{"Продано, шт", "Продано, упак"}})
|
||||
in
|
||||
#"Переименованные столбцы1"
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
147
analytics/pbi/model/report/Model/tables/mp оборот.tmdl
Normal file
147
analytics/pbi/model/report/Model/tables/mp оборот.tmdl
Normal file
@ -0,0 +1,147 @@
|
||||
table 'mp оборот'
|
||||
|
||||
measure 'Расходы к обороту, %' = ```
|
||||
|
||||
VAR _MinDate = DATE(2025, 1, 1)
|
||||
RETURN
|
||||
CALCULATE(
|
||||
VAR _Turnover =
|
||||
SUM('mp оборот'[Сумма оборот МП, руб])
|
||||
VAR _Sales =
|
||||
[Сумма продаж, руб]
|
||||
RETURN
|
||||
DIVIDE(
|
||||
_Turnover - _Sales,
|
||||
_Turnover,
|
||||
0
|
||||
),
|
||||
KEEPFILTERS(
|
||||
FILTER(
|
||||
'.Календарь',
|
||||
'.Календарь'[Дата] >= _MinDate
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure 'Расходы МП + РК + СПП, руб' = ```
|
||||
|
||||
VAR _MinDate = DATE(2025, 1, 1)
|
||||
RETURN
|
||||
CALCULATE(
|
||||
VAR _Turnover =
|
||||
SUM('mp оборот'[Сумма оборот МП, руб])
|
||||
VAR _Sales =
|
||||
[Сумма продаж, руб]
|
||||
RETURN
|
||||
|
||||
_Turnover - _Sales,
|
||||
|
||||
KEEPFILTERS(
|
||||
FILTER(
|
||||
'.Календарь',
|
||||
'.Календарь'[Дата] >= _MinDate
|
||||
)
|
||||
)
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
|
||||
measure 'НДС_20 по расходам, руб' = [Расходы МП + РК + СПП, руб] - [Расходы МП + РК + СПП, руб] / 1.2
|
||||
formatString: #,0
|
||||
|
||||
measure 'Расходы к учетной сумме, %' =
|
||||
|
||||
VAR _MinDate = DATE(2025, 1, 1)
|
||||
RETURN
|
||||
CALCULATE(
|
||||
VAR _Turnover =
|
||||
SUM('mp оборот'[Сумма оборот МП, руб])
|
||||
VAR _Sales =
|
||||
[Сумма учетная, руб]
|
||||
RETURN
|
||||
DIVIDE(
|
||||
_Turnover - _Sales,
|
||||
_Turnover,
|
||||
0
|
||||
),
|
||||
KEEPFILTERS(
|
||||
FILTER(
|
||||
'.Календарь',
|
||||
'.Календарь'[Дата] >= _MinDate
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Дата
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column artic_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: artic_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Организация
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Организация
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column partner_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: partner_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Сумма оборот МП, руб'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Сумма оборот МП, руб
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'mp оборот' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
#"pbi_Внешний оборот" = Источник{[Schema="pbi",Item="Внешний оборот"]}[Data],
|
||||
#"Измененный тип" = Table.TransformColumnTypes(#"pbi_Внешний оборот",{{"Дата", type date}})
|
||||
in
|
||||
#"Измененный тип"
|
||||
|
||||
changedProperty = Name
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
103
analytics/pbi/model/report/Model/tables/mp остатки.tmdl
Normal file
103
analytics/pbi/model/report/Model/tables/mp остатки.tmdl
Normal file
@ -0,0 +1,103 @@
|
||||
table 'mp остатки'
|
||||
|
||||
column Узел
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Узел
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Тип
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Тип
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Склад
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Склад
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Дата обновления'
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата обновления
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column artic_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: artic_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column id_внешний
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: id_внешний
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Остаток МП, упак'
|
||||
dataType: int64
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Остаток МП, упак
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Доступно, упак'
|
||||
dataType: int64
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Доступно, упак
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Остаток МП, шт'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Остаток МП, шт
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Остаток МП, руб' = 'mp остатки'[Остаток МП, шт] * RELATED('Номенклатура'[Цена учетная, руб])
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'mp остатки' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
#"pbi_Внешние остатки" = Источник{[Schema="pbi",Item="Внешние остатки"]}[Data],
|
||||
#"Измененный тип" = Table.TransformColumnTypes(#"pbi_Внешние остатки",{{"Дата обновления", type date}, {"Количество", Int64.Type}, {"Доступное кол-во", Int64.Type}}),
|
||||
#"Переименованные столбцы" = Table.RenameColumns(#"Измененный тип",{{"Количество", "Остаток, упак"}, {"Доступное кол-во", "Доступно, упак"}}),
|
||||
#"Обрезанный текст" = Table.TransformColumns(#"Переименованные столбцы",{{"id_внешний", Text.Trim, type text}}),
|
||||
#"Переименованные столбцы1" = Table.RenameColumns(#"Обрезанный текст",{{"Остаток, упак", "Остаток МП, упак"}})
|
||||
in
|
||||
#"Переименованные столбцы1"
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
209
analytics/pbi/model/report/Model/tables/mp реклама.tmdl
Normal file
209
analytics/pbi/model/report/Model/tables/mp реклама.tmdl
Normal file
@ -0,0 +1,209 @@
|
||||
table 'mp реклама'
|
||||
|
||||
measure 'ДРР заказы по рекламе, %' = ```
|
||||
DIVIDE(
|
||||
SUM('mp реклама'[Затраты РК, руб]),
|
||||
SUM('mp реклама'[Сумма заказов]), 1)
|
||||
```
|
||||
formatString: #,0%;-#,0%;#,0%
|
||||
|
||||
measure 'ДРР заказы все, %' =
|
||||
|
||||
DIVIDE(
|
||||
SUM('mp реклама'[Затраты РК, руб]),
|
||||
CALCULATE(
|
||||
SUM('mp аналитика продаж'[Продано, руб]),
|
||||
'mp аналитика продаж'[Вид загрузки] = "ЗаказыВС"
|
||||
),
|
||||
1
|
||||
)
|
||||
formatString: #,0%;-#,0%;#,0%
|
||||
|
||||
column Дата
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column Узел
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Узел
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column artic_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: artic_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Номер кампании'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Номер кампании
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Тип кампании'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Тип кампании
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Просмотры
|
||||
dataType: int64
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Просмотры
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Клики
|
||||
dataType: int64
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Клики
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'atbs кол-во добавлений в корзину'
|
||||
dataType: int64
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: atbs кол-во добавлений в корзину
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Затраты РК, руб'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Затраты РК, руб
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Стоимость клика, руб'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Стоимость клика, руб
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Количество заказов'
|
||||
dataType: int64
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Количество заказов
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Сумма заказов'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Сумма заказов
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Ставка поиск, %'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Ставка поиск, %
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Ставка поиск, руб'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Ставка поиск, руб
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Охват, %'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Охват, %
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'cr кол-во заказов / кол-во посещений'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: cr кол-во заказов / кол-во посещений
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Дата начала'
|
||||
dataType: dateTime
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата начала
|
||||
|
||||
variation Изменение
|
||||
isDefault
|
||||
relationship: 8229a93a-e14d-491e-ac57-cbab91627fdd
|
||||
defaultHierarchy: LocalDateTable_1c75c57c-6ac4-4a07-ab45-b46636c3847c.'Иерархия дат'
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column id_product
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: id_product
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Заказано товаров, упак'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Заказано товаров, упак
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Затраты РК, usd'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Затраты РК, usd
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'mp реклама' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_РекламаМаркетплейсы = Источник{[Schema="pbi",Item="РекламаМаркетплейсы"]}[Data],
|
||||
#"Измененный тип" = Table.TransformColumnTypes(pbi_РекламаМаркетплейсы,{{"Дата", type date}, {"Просмотры", Int64.Type}, {"Клики", Int64.Type}, {"atbs кол-во добавлений в корзину", Int64.Type}, {"Количество заказов", Int64.Type}, {"Дата начала", type date}}),
|
||||
#"Переименованные столбцы" = Table.RenameColumns(#"Измененный тип",{{"Затраты, руб", "Затраты РК, руб"}, {"Затраты, usd", "Затраты РК, usd"}})
|
||||
in
|
||||
#"Переименованные столбцы"
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
40
analytics/pbi/model/report/Model/tables/mp узел.tmdl
Normal file
40
analytics/pbi/model/report/Model/tables/mp узел.tmdl
Normal file
@ -0,0 +1,40 @@
|
||||
table 'mp узел'
|
||||
|
||||
column Узел
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Узел
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Организация
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Организация
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column partner_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: partner_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'mp узел' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_node_mp = Источник{[Schema="pbi",Item="node_mp"]}[Data]
|
||||
in
|
||||
pbi_node_mp
|
||||
|
||||
changedProperty = Name
|
||||
|
||||
138
analytics/pbi/model/report/Model/tables/Группы.tmdl
Normal file
138
analytics/pbi/model/report/Model/tables/Группы.tmdl
Normal file
@ -0,0 +1,138 @@
|
||||
table Группы
|
||||
|
||||
column _Description
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: _Description
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Группа
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Группа
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Подгруппа 1'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Подгруппа 1
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Подгруппа 2'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Подгруппа 2
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Подгруппа 3'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Подгруппа 3
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column group_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: group_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column _ParentIDRRef
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: _ParentIDRRef
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Уровень вложенности'
|
||||
dataType: int64
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Уровень вложенности
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Полный путь'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Полный путь
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column code
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: code
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column план
|
||||
dataType: double
|
||||
isHidden
|
||||
summarizeBy: sum
|
||||
sourceColumn: план
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'first group'
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: first group
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
hierarchy 'Группа Иерархия'
|
||||
|
||||
level Группа
|
||||
column: Группа
|
||||
|
||||
level 'Подгруппа 1'
|
||||
column: 'Подгруппа 1'
|
||||
|
||||
level 'Подгруппа 2'
|
||||
column: 'Подгруппа 2'
|
||||
|
||||
level 'Подгруппа 3'
|
||||
column: 'Подгруппа 3'
|
||||
|
||||
partition Группы = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Databases("prdsql"),
|
||||
mag_pbi = Источник{[Name="mag_pbi"]}[Data],
|
||||
pbi_groups = mag_pbi{[Schema="pbi",Item="groups"]}[Data],
|
||||
#"Переименованные столбцы" = Table.RenameColumns(pbi_groups,{{"g", "Группа"}, {"g1", "Подгруппа 1"}, {"g2", "Подгруппа 2"}, {"g3", "Подгруппа 3"}, {"path", "Полный путь"}, {"lvl", "Уровень вложенности"}})
|
||||
in
|
||||
#"Переименованные столбцы"
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
595
analytics/pbi/model/report/Model/tables/Заказы все.tmdl
Normal file
595
analytics/pbi/model/report/Model/tables/Заказы все.tmdl
Normal file
@ -0,0 +1,595 @@
|
||||
table 'Заказы все'
|
||||
|
||||
measure 'В производстве кол.' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Количество]),
|
||||
'Заказы все'[Статус] = "В производстве"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в производстве
|
||||
|
||||
measure 'В производстве объем, м3' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Объем, м3]),
|
||||
'Заказы все'[Статус] = "В производстве"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в производстве
|
||||
|
||||
measure 'В производстве сумма всего в usd2' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Сумма всего в usd2]),
|
||||
'Заказы все'[Статус] = "В производстве"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в производстве
|
||||
|
||||
measure 'В производстве сумма всего в руб' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Сумма всего в руб]),
|
||||
'Заказы все'[Статус] = "В производстве"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в производстве
|
||||
|
||||
measure 'В производстве упак.' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Кол. упаковок]),
|
||||
'Заказы все'[Статус] = "В производстве"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в производстве
|
||||
|
||||
measure 'Сумма в производстве, руб' = ```
|
||||
|
||||
CALCULATE(
|
||||
[В производстве сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "руб."
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в производстве
|
||||
|
||||
measure 'Сумма в производстве, cny' = ```
|
||||
|
||||
CALCULATE(
|
||||
[В производстве сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "CNY"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в производстве
|
||||
|
||||
measure 'Сумма в производстве, try' = ```
|
||||
|
||||
CALCULATE(
|
||||
[В производстве сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "TRY"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в производстве
|
||||
|
||||
measure 'Сумма в производстве, usd2' = ```
|
||||
|
||||
CALCULATE(
|
||||
[В производстве сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "USD2"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в производстве
|
||||
|
||||
measure 'В пути кол.' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Количество]),
|
||||
'Заказы все'[Статус] = "В пути"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в пути
|
||||
|
||||
measure 'В пути объем, м3' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Объем, м3]),
|
||||
'Заказы все'[Статус] = "В пути"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в пути
|
||||
|
||||
measure 'В пути сумма всего в usd2' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Сумма всего в usd2]),
|
||||
'Заказы все'[Статус] = "В пути"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в пути
|
||||
|
||||
measure 'В пути сумма всего в руб' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Сумма всего в руб]),
|
||||
'Заказы все'[Статус] = "В пути"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в пути
|
||||
|
||||
measure 'В пути упак.' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Кол. упаковок]),
|
||||
'Заказы все'[Статус] = "В пути"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в пути
|
||||
|
||||
measure 'Сумма в пути, руб' = ```
|
||||
|
||||
CALCULATE(
|
||||
[В пути сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "руб."
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в пути
|
||||
|
||||
measure 'Сумма в пути, cny' = ```
|
||||
|
||||
CALCULATE(
|
||||
[В пути сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "CNY"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в пути
|
||||
|
||||
measure 'Сумма в пути, try' = ```
|
||||
|
||||
CALCULATE(
|
||||
[В пути сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "TRY"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в пути
|
||||
|
||||
measure 'Сумма в пути, usd2' = ```
|
||||
|
||||
CALCULATE(
|
||||
[В пути сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "USD2"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы в пути
|
||||
|
||||
measure 'Тех заказ кол.' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Количество]),
|
||||
'Заказы все'[Статус] = "Тех. заказ"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы тех
|
||||
|
||||
measure 'Тех заказ объем, м3' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Объем, м3]),
|
||||
'Заказы все'[Статус] = "Тех. заказ"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы тех
|
||||
|
||||
measure 'Тех заказ сумма всего в usd2' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Сумма всего в usd2]),
|
||||
'Заказы все'[Статус] = "Тех. заказ"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы тех
|
||||
|
||||
measure 'Тех заказ сумма всего в руб' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Сумма всего в руб]),
|
||||
'Заказы все'[Статус] = "Тех. заказ"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы тех
|
||||
|
||||
measure 'Тех заказ упак.' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Кол. упаковок]),
|
||||
'Заказы все'[Статус] = "Тех. заказ"
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы тех
|
||||
|
||||
measure 'Сумма тех заказ, руб' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Тех заказ сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "руб."
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы тех
|
||||
|
||||
measure 'Сумма тех заказ, cny' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Тех заказ сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "CNY"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы тех
|
||||
|
||||
measure 'Сумма тех заказ, try' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Тех заказ сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "TRY"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы тех
|
||||
|
||||
measure 'Сумма тех заказ, usd2' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Тех заказ сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "USD2"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы тех
|
||||
|
||||
measure 'Согласование упак.' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Кол. упаковок]),
|
||||
FILTER('Заказы все', [Статус] IN {"На согласовании", "Согласован" })
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы согласование
|
||||
|
||||
measure 'Согласование кол.' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Количество]),
|
||||
FILTER('Заказы все', [Статус] IN {"На согласовании", "Согласован" })
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы согласование
|
||||
|
||||
measure 'Согласование объем, м3' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Объем, м3]),
|
||||
FILTER('Заказы все', [Статус] IN {"На согласовании", "Согласован" })
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы согласование
|
||||
|
||||
measure 'Согласование сумма всего в руб' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Сумма всего в руб]),
|
||||
FILTER('Заказы все', [Статус] IN {"На согласовании", "Согласован" })
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы согласование
|
||||
|
||||
measure 'Согласование сумма всего в usd2' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Сумма всего в usd2]),
|
||||
FILTER('Заказы все', [Статус] IN {"На согласовании", "Согласован" })
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы согласование
|
||||
|
||||
measure 'Сумма согласование, руб' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Согласование сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "руб."
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы согласование
|
||||
|
||||
measure 'Сумма согласование, cny' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Согласование сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "CNY"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы согласование
|
||||
|
||||
measure 'Сумма согласование, try' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Согласование сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "TRY"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы согласование
|
||||
|
||||
measure 'Сумма согласование, usd2' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Согласование сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "USD2"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы согласование
|
||||
|
||||
measure 'Выгружен на складе кол.' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Количество]),
|
||||
FILTER('Заказы все', [Статус] = "Выгружен на складе")
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы выгружены на складе
|
||||
|
||||
measure 'Выгружен на складе упак.' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Кол. упаковок]),
|
||||
FILTER('Заказы все', [Статус] = "Выгружен на складе")
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы выгружены на складе
|
||||
|
||||
measure 'Выгружен на складе объем, м3' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Объем, м3]),
|
||||
FILTER('Заказы все', [Статус] = "Выгружен на складе")
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы выгружены на складе
|
||||
|
||||
measure 'Выгружен на складе сумма всего в руб' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Сумма всего в руб]),
|
||||
FILTER('Заказы все', [Статус] = "Выгружен на складе")
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы выгружены на складе
|
||||
|
||||
measure 'Выгружен на складе сумма всего в usd2' =
|
||||
|
||||
CALCULATE(
|
||||
SUM('Заказы все'[Сумма всего в usd2]),
|
||||
FILTER('Заказы все', [Статус] = "Выгружен на складе")
|
||||
)
|
||||
formatString: #,0
|
||||
displayFolder: Заказы выгружены на складе
|
||||
|
||||
measure 'Сумма выгружен на складе, руб' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Выгружен на складе сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "руб."
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы выгружены на складе
|
||||
|
||||
measure 'Сумма выгружен на складе, cny' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Выгружен на складе сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "CNY"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы выгружены на складе
|
||||
|
||||
measure 'Сумма выгружен на складе, try' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Выгружен на складе сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "TRY"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы выгружены на складе
|
||||
|
||||
measure 'Сумма выгружен на складе, usd2' = ```
|
||||
|
||||
CALCULATE(
|
||||
[Выгружен на складе сумма всего в usd2],
|
||||
'Заказы все'[Валюта] = "USD2"
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: Заказы выгружены на складе
|
||||
|
||||
column 'Дата заказа поставщику'
|
||||
dataType: dateTime
|
||||
formatString: Long Date
|
||||
sourceProviderType: date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата заказа поставщику
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column 'Номер заказа поставщику'
|
||||
dataType: string
|
||||
isNullable: false
|
||||
sourceProviderType: nchar
|
||||
summarizeBy: none
|
||||
sourceColumn: Номер заказа поставщику
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column partner_id
|
||||
dataType: string
|
||||
isHidden
|
||||
sourceProviderType: nvarchar(36)
|
||||
summarizeBy: none
|
||||
sourceColumn: partner_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Контрагент
|
||||
dataType: string
|
||||
sourceProviderType: nvarchar(100)
|
||||
summarizeBy: none
|
||||
sourceColumn: Контрагент
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Статус
|
||||
dataType: string
|
||||
isNullable: false
|
||||
sourceProviderType: varchar(15)
|
||||
summarizeBy: none
|
||||
sourceColumn: Статус
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column artic_id
|
||||
dataType: string
|
||||
isHidden
|
||||
sourceProviderType: nvarchar(36)
|
||||
summarizeBy: none
|
||||
sourceColumn: artic_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Количество
|
||||
dataType: double
|
||||
isNullable: false
|
||||
sourceProviderType: decimal(15, 3)
|
||||
summarizeBy: sum
|
||||
sourceColumn: Количество
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Кол. упаковок'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
sourceProviderType: decimal(10, 2)
|
||||
summarizeBy: sum
|
||||
sourceColumn: Кол. упаковок
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
column 'Объем, м3'
|
||||
dataType: double
|
||||
sourceProviderType: decimal(38, 13)
|
||||
summarizeBy: sum
|
||||
sourceColumn: Объем, м3
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Цена
|
||||
dataType: double
|
||||
sourceProviderType: decimal(20, 12)
|
||||
summarizeBy: sum
|
||||
sourceColumn: Цена
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Сумма
|
||||
dataType: double
|
||||
isHidden
|
||||
sourceProviderType: decimal(20, 7)
|
||||
summarizeBy: sum
|
||||
sourceColumn: Сумма
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Валюта
|
||||
dataType: string
|
||||
sourceProviderType: nvarchar(10)
|
||||
summarizeBy: none
|
||||
sourceColumn: Валюта
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Сумма всего в руб'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
sourceProviderType: decimal(31, 11)
|
||||
summarizeBy: sum
|
||||
sourceColumn: Сумма всего в руб
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
column Партнер
|
||||
dataType: string
|
||||
sourceProviderType: nvarchar(100)
|
||||
summarizeBy: none
|
||||
sourceColumn: Партнер
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Сумма всего в usd2'
|
||||
dataType: double
|
||||
formatString: #,0.00
|
||||
sourceProviderType: decimal(38, 14)
|
||||
summarizeBy: sum
|
||||
sourceColumn: Сумма всего в usd2
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'Заказы все' = m
|
||||
mode: directQuery
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_Заказы = Источник{[Schema="pbi",Item="Заказы"]}[Data],
|
||||
#"Измененный тип" = Table.TransformColumnTypes(pbi_Заказы,{{"Дата заказа поставщику", type date}}),
|
||||
#"Строки с примененным фильтром" = Table.SelectRows(#"Измененный тип", each ([Статус] <> "Закрыт" and [Статус] <> "Неизвестно" and [Статус] <> "Подтвержден")),
|
||||
#"Строки с примененным фильтром1" = Table.SelectRows(#"Строки с примененным фильтром", each [Дата заказа поставщику] >= #date(2024, 1, 1)),
|
||||
Округлено = Table.TransformColumns(#"Строки с примененным фильтром1",{{"Сумма всего, usd2", each Number.Round(_, 7), type number}}),
|
||||
#"Переименованные столбцы" = Table.RenameColumns(Округлено,{{"Сумма в руб.", "Сумма всего в руб"}, {"Сумма всего, usd2", "Сумма всего в usd2"}})
|
||||
in
|
||||
#"Переименованные столбцы"
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
261
analytics/pbi/model/report/Model/tables/Закупки.tmdl
Normal file
261
analytics/pbi/model/report/Model/tables/Закупки.tmdl
Normal file
@ -0,0 +1,261 @@
|
||||
table Закупки
|
||||
|
||||
measure 'Сумма закупки, руб' = ```
|
||||
|
||||
SUM('Закупки'[Закуп.Закупка, руб]) +
|
||||
SUM('Закупки'[Закуп.Таможня, руб]) +
|
||||
SUM('Закупки'[Закуп.Доставка, руб]) +
|
||||
SUM('Закупки'[Закуп.НДС, руб]) +
|
||||
SUM('Закупки'[Закуп.Производство, руб]) -
|
||||
SUM('Закупки'[Закуп.Доп расходы, руб])
|
||||
```
|
||||
formatString: #,0
|
||||
|
||||
measure 'Сумма закупки, usd' = ```
|
||||
|
||||
SUM('Закупки'[Закуп.Закупка, usd]) +
|
||||
SUM('Закупки'[Закуп.Таможня, usd]) +
|
||||
SUM('Закупки'[Закуп.Доставка, usd]) +
|
||||
SUM('Закупки'[Закуп.НДС, usd]) +
|
||||
SUM('Закупки'[Закуп.Производство, usd]) -
|
||||
SUM('Закупки'[Закуп.Доп расходы, usd])
|
||||
```
|
||||
formatString: #,0
|
||||
|
||||
measure 'Цена учетная по закупкам, руб' = ```
|
||||
|
||||
|
||||
SUMX('Номенклатура',
|
||||
DIVIDE(
|
||||
[Сумма закупки, руб],
|
||||
SUM('Закупки'[Кол-во закупка, шт]), 0
|
||||
|
||||
)
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Период
|
||||
isHidden
|
||||
formatString: General Date
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Период]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column artic_id
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [artic_id]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Организация
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Организация]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Контрагент
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Контрагент]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Менеджер
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Менеджер]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.Закупка, руб'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.Закупка, руб]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.Закупка, usd'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.Закупка, usd]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Валюта документа'
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Валюта документа]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.Доставка, руб'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.Доставка, руб]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.Доставка, usd'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.Доставка, usd]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.Таможня, руб'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.Таможня, руб]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.Таможня, usd'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.Таможня, usd]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.НДС, руб'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.НДС, руб]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.НДС, usd'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.НДС, usd]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.Производство, руб'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.Производство, руб]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.Производство, usd'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.Производство, usd]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Статья
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [Статья]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column partner_id
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: [partner_id]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.Доп расходы, руб'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.Доп расходы, руб]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закуп.Доп расходы, usd'
|
||||
formatString: #,0
|
||||
displayFolder: Учет закупка
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Закуп.Доп расходы, usd]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Кол-во закупка, шт'
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Кол-во закупка, шт]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Кол-во закупка, упак'
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
isNameInferred
|
||||
sourceColumn: [Кол-во закупка, упак]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition Закупки = calculated
|
||||
mode: import
|
||||
source = ```
|
||||
|
||||
var tbl = FILTER(
|
||||
'Себестоимость',
|
||||
'Себестоимость'[Вид операции]="Приход" && ('Себестоимость'[Статья] = "Закупка"
|
||||
|| 'Себестоимость'[Статья] = "Ввод начальных остатков" || 'Себестоимость'[Статья] = "Производство товара"
|
||||
|| 'Себестоимость'[Статья] = "Доставка контейнера ВЭД" || 'Себестоимость'[Статья] = "НДС" || 'Себестоимость'[Статья] = "Доп расходы" || 'Себестоимость'[Статья] = "Оприходование излишков товара"
|
||||
))
|
||||
return SELECTCOLUMNS(tbl
|
||||
, "Период", 'Себестоимость'[Период]
|
||||
, "artic_id", 'Себестоимость'[artic_id]
|
||||
, "Кол-во закупка, шт", 'Себестоимость'[Количество]
|
||||
, "Кол-во закупка, упак", 'Себестоимость'[КоличествоУпаковок]
|
||||
, "Организация", 'Себестоимость'[Организация]
|
||||
, "Контрагент", 'Себестоимость'[Контрагент]
|
||||
, "Менеджер", 'Себестоимость'[Менеджер]
|
||||
, "partner_id", 'Себестоимость'[PartnerId]
|
||||
, "Валюта документа", 'Себестоимость'[Валюта документа]
|
||||
, "Статья", 'Себестоимость'[Статья]
|
||||
, "Закуп.Закупка, руб", 'Себестоимость'[Закупка]
|
||||
, "Закуп.Закупка, usd", 'Себестоимость'[Закупка, usd2]
|
||||
, "Закуп.Доставка, руб", 'Себестоимость'[Доставка]
|
||||
, "Закуп.Доставка, usd", 'Себестоимость'[Доставка, usd]
|
||||
, "Закуп.Таможня, руб", 'Себестоимость'[Таможня]
|
||||
, "Закуп.Таможня, usd", 'Себестоимость'[Таможня, usd]
|
||||
, "Закуп.НДС, руб", 'Себестоимость'[НДС]
|
||||
, "Закуп.НДС, usd", 'Себестоимость'[НДС, usd]
|
||||
, "Закуп.Производство, руб", 'Себестоимость'[Производство]
|
||||
, "Закуп.Производство, usd", 'Себестоимость'[Производство, usd]
|
||||
, "Закуп.Доп расходы, руб", 'Себестоимость'[Доп расходы]
|
||||
, "Закуп.Доп расходы, usd", 'Себестоимость'[Доп расходы USD2+2]
|
||||
)
|
||||
```
|
||||
|
||||
annotation PBI_Id = ebfb73925d604adf81607d1026029df9
|
||||
|
||||
110
analytics/pbi/model/report/Model/tables/Заявки на оплату.tmdl
Normal file
110
analytics/pbi/model/report/Model/tables/Заявки на оплату.tmdl
Normal file
@ -0,0 +1,110 @@
|
||||
table 'Заявки на оплату'
|
||||
|
||||
column date
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: date
|
||||
|
||||
variation Изменение
|
||||
isDefault
|
||||
relationship: 8208f512-c8a9-47d1-b47c-2bce30b6b8f8
|
||||
defaultHierarchy: LocalDateTable_729bf6db-04e4-4a26-9dce-b3837667cb92.'Иерархия дат'
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column 'Номер заявки'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Номер заявки
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Статус
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Статус
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Сумма
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: Сумма
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Валюта документа'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Валюта документа
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column partner_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: partner_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Партнер
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Партнер
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Получатель
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Получатель
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Комментарий
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Комментарий
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Дата оплаты план'
|
||||
dataType: dateTime
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата оплаты план
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column 'Статья ДДС'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Статья ДДС
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'Заявки на оплату' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_Заявки_на_оплату = Источник{[Schema="pbi",Item="Заявки_на_оплату"]}[Data],
|
||||
#"Измененный тип" = Table.TransformColumnTypes(pbi_Заявки_на_оплату,{{"date", type date}, {"Дата оплаты план", type date}})
|
||||
in
|
||||
#"Измененный тип"
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
49
analytics/pbi/model/report/Model/tables/Менеджеры.tmdl
Normal file
49
analytics/pbi/model/report/Model/tables/Менеджеры.tmdl
Normal file
@ -0,0 +1,49 @@
|
||||
table Менеджеры
|
||||
|
||||
column user_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: user_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Менеджер
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Менеджер
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Подразделение
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Подразделение
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Вышестоящее подразделение'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Вышестоящее подразделение
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition Менеджеры = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_users_1C = Источник{[Schema="pbi",Item="users_1C"]}[Data],
|
||||
#"Переименованные столбцы" = Table.RenameColumns(pbi_users_1C,{{"podr", "Подразделение"}, {"user", "Менеджер"}}),
|
||||
#"Строки с примененным фильтром" = Table.SelectRows(#"Переименованные столбцы", each ([Подразделение] = "<Подразделение по умолчанию>" or [Подразделение] = "Cash&Carry" or [Подразделение] = "Бухгалтерия" or [Подразделение] = "Дедовск2" or [Подразделение] = "Маркетплейс" or [Подразделение] = "МРК" or [Подразделение] = "Операторы" or [Подразделение] = "Оптовый отдел" or [Подразделение] = "Отдел закупок" or [Подразделение] = "Отдел продаж" or [Подразделение] = "Региональный отдел" or [Подразделение] = "Сельскохозяйственная")),
|
||||
#"Переименованные столбцы1" = Table.RenameColumns(#"Строки с примененным фильтром",{{"higher_podr", "Вышестоящее подразделение"}})
|
||||
in
|
||||
#"Переименованные столбцы1"
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
1174
analytics/pbi/model/report/Model/tables/Номенклатура.tmdl
Normal file
1174
analytics/pbi/model/report/Model/tables/Номенклатура.tmdl
Normal file
File diff suppressed because one or more lines are too long
15
analytics/pbi/model/report/Model/tables/Организация.tmdl
Normal file
15
analytics/pbi/model/report/Model/tables/Организация.tmdl
Normal file
@ -0,0 +1,15 @@
|
||||
table Организация
|
||||
|
||||
column Организация
|
||||
summarizeBy: none
|
||||
isNameInferred
|
||||
sourceColumn: Себестоимость[Организация]
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition Организация = calculated
|
||||
mode: import
|
||||
source = VALUES('Себестоимость'[Организация])
|
||||
|
||||
annotation PBI_Id = edae5abbb56b4e8dba63758043b0a407
|
||||
|
||||
1436
analytics/pbi/model/report/Model/tables/Основной отчет.tmdl
Normal file
1436
analytics/pbi/model/report/Model/tables/Основной отчет.tmdl
Normal file
File diff suppressed because it is too large
Load Diff
100
analytics/pbi/model/report/Model/tables/Остатки.tmdl
Normal file
100
analytics/pbi/model/report/Model/tables/Остатки.tmdl
Normal file
@ -0,0 +1,100 @@
|
||||
table Остатки
|
||||
|
||||
column artic_id
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: artic_id
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Code
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Code
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column sklad
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: sklad
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Категория склада'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Категория склада
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column upakovok
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: upakovok
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column quantity
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: quantity
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column upakovka
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: upakovka
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Дата
|
||||
dataType: dateTime
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата
|
||||
|
||||
variation Изменение
|
||||
isDefault
|
||||
relationship: 8afa5bd2-9707-4363-96f2-670a305dc4f3
|
||||
defaultHierarchy: LocalDateTable_2b612047-5dcc-402e-b2ed-154636b18544.'Иерархия дат'
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column 'quantity в руб' = [quantity] * RELATED('Номенклатура'[Цена учетная, руб])
|
||||
formatString: #,0.00000
|
||||
summarizeBy: sum
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'quantity в usd' = [quantity] * RELATED('Номенклатура'[Цена учетная, usd])
|
||||
formatString: #,0.0000000
|
||||
summarizeBy: sum
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition Остатки = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_ostatki_short = Источник{[Schema="pbi",Item="ostatki_short"]}[Data],
|
||||
#"Переименованные столбцы" = Table.RenameColumns(pbi_ostatki_short,{{"date", "Дата"}}),
|
||||
#"Измененный тип" = Table.TransformColumnTypes(#"Переименованные столбцы",{{"Дата", type date}}),
|
||||
#"Удаленные столбцы" = Table.RemoveColumns(#"Измененный тип",{"Учетная цена, старое"})
|
||||
in
|
||||
#"Удаленные столбцы"
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
132
analytics/pbi/model/report/Model/tables/Отзывы клиентов.tmdl
Normal file
132
analytics/pbi/model/report/Model/tables/Отзывы клиентов.tmdl
Normal file
@ -0,0 +1,132 @@
|
||||
table 'Отзывы клиентов'
|
||||
|
||||
column feedback_id
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: feedback_id
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column order_id
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: order_id
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Номер заказа'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Номер заказа
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column user_id
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: user_id
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Имя пользователя'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Имя пользователя
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Телефон
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Телефон
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column email
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: email
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Работа менеджера'
|
||||
dataType: int64
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Работа менеджера
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Скорость сборки'
|
||||
dataType: int64
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Скорость сборки
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Качество сборки'
|
||||
dataType: int64
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Качество сборки
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Качество упаковки'
|
||||
dataType: int64
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Качество упаковки
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Скорость доставки'
|
||||
dataType: int64
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Скорость доставки
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Готов рекомендовать'
|
||||
dataType: int64
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Готов рекомендовать
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Другие замечания'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Другие замечания
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'Отзывы клиентов' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Json.Document(Web.Contents("https://magok.ru/api/v2/ApiControllerSurveys/get_order_reports/")),
|
||||
#"Преобразовано в таблицу" = Table.FromRecords({Источник}),
|
||||
#"Развернутый элемент data" = Table.ExpandListColumn(#"Преобразовано в таблицу", "data"),
|
||||
#"Развернутый элемент data1" = Table.ExpandRecordColumn(#"Развернутый элемент data", "data", {"ID", "UF_ORDER_ID", "UF_ORDER_CODE", "UF_USER_ID", "UF_TIME", "UF_ORDER_DATE", "UF_USER_NAME", "UF_USER_PHONE", "UF_USER_EMAIL", "UF_Q1_MNG", "UF_Q2_SKSB", "UF_Q3_QTSB", "UF_Q4_QTUP", "UF_Q5_SKDS", "UF_Q6_RECM", "UF_Q7_OTHER", "UF_DATE_SEND"}, {"data.ID", "data.UF_ORDER_ID", "data.UF_ORDER_CODE", "data.UF_USER_ID", "data.UF_TIME", "data.UF_ORDER_DATE", "data.UF_USER_NAME", "data.UF_USER_PHONE", "data.UF_USER_EMAIL", "data.UF_Q1_MNG", "data.UF_Q2_SKSB", "data.UF_Q3_QTSB", "data.UF_Q4_QTUP", "data.UF_Q5_SKDS", "data.UF_Q6_RECM", "data.UF_Q7_OTHER", "data.UF_DATE_SEND"}),
|
||||
#"Измененный тип" = Table.TransformColumnTypes(#"Развернутый элемент data1",{{"status", type text}, {"message", type any}, {"data.ID", Int64.Type}, {"data.UF_ORDER_ID", Int64.Type}, {"data.UF_ORDER_CODE", type text}, {"data.UF_USER_ID", Int64.Type}, {"data.UF_TIME", type any}, {"data.UF_ORDER_DATE", type any}, {"data.UF_USER_NAME", type text}, {"data.UF_USER_PHONE", type text}, {"data.UF_USER_EMAIL", type text}, {"data.UF_Q1_MNG", Int64.Type}, {"data.UF_Q2_SKSB", Int64.Type}, {"data.UF_Q3_QTSB", Int64.Type}, {"data.UF_Q4_QTUP", Int64.Type}, {"data.UF_Q5_SKDS", Int64.Type}, {"data.UF_Q6_RECM", Int64.Type}, {"data.UF_Q7_OTHER", type text}, {"data.UF_DATE_SEND", type any}}),
|
||||
#"Удаленные столбцы" = Table.RemoveColumns(#"Измененный тип",{"status", "message"}),
|
||||
#"Измененный тип1" = Table.TransformColumnTypes(#"Удаленные столбцы",{{"data.ID", type text}}),
|
||||
#"Переименованные столбцы" = Table.RenameColumns(#"Измененный тип1",{{"data.ID", "feedback_id"}, {"data.UF_ORDER_ID", "order_id"}}),
|
||||
#"Измененный тип2" = Table.TransformColumnTypes(#"Переименованные столбцы",{{"order_id", type text}}),
|
||||
#"Переименованные столбцы1" = Table.RenameColumns(#"Измененный тип2",{{"data.UF_ORDER_CODE", "Номер заказа"}, {"data.UF_USER_ID", "user_id"}}),
|
||||
#"Измененный тип3" = Table.TransformColumnTypes(#"Переименованные столбцы1",{{"user_id", type text}}),
|
||||
#"Удаленные столбцы1" = Table.RemoveColumns(#"Измененный тип3",{"data.UF_TIME", "data.UF_ORDER_DATE"}),
|
||||
#"Переименованные столбцы2" = Table.RenameColumns(#"Удаленные столбцы1",{{"data.UF_USER_NAME", "Имя пользователя"}, {"data.UF_USER_PHONE", "Телефон"}, {"data.UF_USER_EMAIL", "email"}}),
|
||||
#"Удаленные столбцы2" = Table.RemoveColumns(#"Переименованные столбцы2",{"data.UF_DATE_SEND"}),
|
||||
#"Переименованные столбцы3" = Table.RenameColumns(#"Удаленные столбцы2",{{"data.UF_Q1_MNG", "Работа менеджера"}, {"data.UF_Q2_SKSB", "Скорость сборки"}, {"data.UF_Q3_QTSB", "Качество сборки"}, {"data.UF_Q4_QTUP", "Качество упаковки"}, {"data.UF_Q5_SKDS", "Скорость доставки"}, {"data.UF_Q6_RECM", "Готов рекомендовать"}, {"data.UF_Q7_OTHER", "Другие замечания"}})
|
||||
in
|
||||
#"Переименованные столбцы3"
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
187
analytics/pbi/model/report/Model/tables/ПРАЙСлист.tmdl
Normal file
187
analytics/pbi/model/report/Model/tables/ПРАЙСлист.tmdl
Normal file
@ -0,0 +1,187 @@
|
||||
table ПРАЙСлист
|
||||
|
||||
measure 'Цена инвойс (вал)' = ```
|
||||
|
||||
VAR MaxDate = MAX('.Календарь'[Дата]) // Находим последнюю дату, где есть цена
|
||||
|
||||
VAR LastKnowDate =
|
||||
CALCULATE(
|
||||
MAX('Прайслист'[Дата]), // Находим последнюю дату, где есть цена
|
||||
'Прайслист'[Дата] <= MaxDate,
|
||||
'Прайслист'[Вид цены] = "Цена Инвойс (вал)",
|
||||
REMOVEFILTERS('.Календарь') // Убираем влияние фильтра на даты
|
||||
)
|
||||
|
||||
RETURN
|
||||
CALCULATE(
|
||||
SELECTEDVALUE('Прайслист'[Цена]), // Берем цену для найденной последней даты
|
||||
'Прайслист'[Дата] = LastKnowDate,
|
||||
'Прайслист'[Вид цены] = "Цена Инвойс (вал)",
|
||||
REMOVEFILTERS('.Календарь')
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure 'Цена отпускная (руб)' = ```
|
||||
|
||||
VAR MaxDate = MAX('.Календарь'[Дата]) // Находим последнюю дату, где есть цена
|
||||
|
||||
VAR LastKnowDate =
|
||||
CALCULATE(
|
||||
MAX('Прайслист'[Дата]), // Находим последнюю дату, где есть цена
|
||||
'Прайслист'[Дата] <= MaxDate,
|
||||
'Прайслист'[Вид цены] = "Цена отпускная (руб)",
|
||||
REMOVEFILTERS('.Календарь') // Убираем влияние фильтра на даты
|
||||
)
|
||||
|
||||
RETURN
|
||||
CALCULATE(
|
||||
SELECTEDVALUE('Прайслист'[Цена]), // Берем цену для найденной последней даты
|
||||
'Прайслист'[Дата] = LastKnowDate,
|
||||
'Прайслист'[Вид цены] = "Цена отпускная (руб)",
|
||||
REMOVEFILTERS('.Календарь')
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure 'Цена отпускная вал в руб' = ```
|
||||
|
||||
VAR MaxDate = MAX('.Календарь'[Дата]) // Находим последнюю дату, где есть цена
|
||||
|
||||
VAR LastKnowDate =
|
||||
CALCULATE(
|
||||
MAX('Прайслист'[Дата]), // Находим последнюю дату, где есть цена
|
||||
'Прайслист'[Дата] <= MaxDate,
|
||||
'Прайслист'[Вид цены] = "Цена отпускная вал в руб",
|
||||
REMOVEFILTERS('.Календарь') // Убираем влияние фильтра на даты
|
||||
)
|
||||
|
||||
RETURN
|
||||
CALCULATE(
|
||||
SELECTEDVALUE('Прайслист'[Цена]), // Берем цену для найденной последней даты
|
||||
'Прайслист'[Дата] = LastKnowDate,
|
||||
'Прайслист'[Вид цены] = "Цена отпускная вал в руб",
|
||||
REMOVEFILTERS('.Календарь')
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure 'Учетная цена (руб)' = ```
|
||||
|
||||
VAR nowdate = MAX('.Календарь'[Дата])
|
||||
VAR MaxDate = MAX('.Календарь'[Дата]) // Находим последнюю дату, где есть цена
|
||||
|
||||
VAR LastKnowDate =
|
||||
CALCULATE(
|
||||
MAX('Прайслист'[Дата]), // Находим последнюю дату, где есть цена
|
||||
'Прайслист'[Дата] <= MaxDate,
|
||||
'Прайслист'[Вид цены] = "Учетная цена (руб)",
|
||||
REMOVEFILTERS('.Календарь') // Убираем влияние фильтра на даты
|
||||
)
|
||||
|
||||
RETURN
|
||||
CALCULATE(
|
||||
SELECTEDVALUE('Прайслист'[Цена]), // Берем цену для найденной последней даты
|
||||
'Прайслист'[Дата] = LastKnowDate,
|
||||
'Прайслист'[Вид цены] = "Учетная цена (руб)",
|
||||
REMOVEFILTERS('.Календарь')
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure 'Учетная цена (вал)' = ```
|
||||
|
||||
VAR MaxDate = MAX('.Календарь'[Дата]) // Находим последнюю дату, где есть цена
|
||||
|
||||
VAR LastKnowDate =
|
||||
CALCULATE(
|
||||
MAX('Прайслист'[Дата]), // Находим последнюю дату, где есть цена
|
||||
'Прайслист'[Дата] <= MaxDate,
|
||||
'Прайслист'[Вид цены] = "Учетная цена (вал)",
|
||||
REMOVEFILTERS('.Календарь') // Убираем влияние фильтра на даты
|
||||
)
|
||||
|
||||
RETURN
|
||||
CALCULATE(
|
||||
SELECTEDVALUE('Прайслист'[Цена]), // Берем цену для найденной последней даты
|
||||
'Прайслист'[Дата] = LastKnowDate,
|
||||
'Прайслист'[Вид цены] = "Учетная цена (вал)",
|
||||
REMOVEFILTERS('.Календарь')
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure 'Цена отпускная упак все в руб' = IF(MAX('Номенклатура'[Ценовая группа]) = "Валютная", [Цена отпускная вал в руб], [Цена отпускная (руб)]) * MAX('Номенклатура'[Базовая упаковка])
|
||||
formatString: #,0
|
||||
|
||||
column Цена
|
||||
dataType: double
|
||||
isHidden
|
||||
summarizeBy: sum
|
||||
sourceColumn: Цена
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Вид цены'
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Вид цены
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column artic_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: artic_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Дата
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
partition ПРАЙСлист = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_pricelist = Источник{[Schema="pbi",Item="pricelist"]}[Data],
|
||||
#"Измененный тип" = Table.TransformColumnTypes(pbi_pricelist,{{"Дата", type date}}),
|
||||
#"Удаленные столбцы" = Table.RemoveColumns(#"Измененный тип",{"1c_id", "_Period"}),
|
||||
#"Строки с примененным фильтром" = Table.SelectRows(#"Удаленные столбцы", each [Вид цены] = "Учетная цена (руб)" or [Вид цены] = "Цена отпускная (руб)" or [Вид цены] = "Учетная цена (вал)" or [Вид цены] = "Цена отпускная вал в руб" or [Вид цены] = "Цена Инвойс (вал)")
|
||||
in
|
||||
#"Строки с примененным фильтром"
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
table 'Параметр цена продажи, %'
|
||||
|
||||
measure 'Значение Параметр цена продажи, %' = SELECTEDVALUE('Параметр цена продажи, %'[Параметр цена продажи, %], 0)
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Параметр цена продажи, %'
|
||||
summarizeBy: none
|
||||
sourceColumn: [Value]
|
||||
|
||||
extendedProperty ParameterMetadata =
|
||||
{
|
||||
"version": 0
|
||||
}
|
||||
|
||||
annotation SummarizationSetBy = User
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
partition 'Параметр цена продажи, %' = calculated
|
||||
mode: import
|
||||
source = GENERATESERIES(-20, 20, 0.5)
|
||||
|
||||
annotation PBI_Id = b90d31cda7104f04bc1706ba6701fc53
|
||||
|
||||
275
analytics/pbi/model/report/Model/tables/Партнер.tmdl
Normal file
275
analytics/pbi/model/report/Model/tables/Партнер.tmdl
Normal file
@ -0,0 +1,275 @@
|
||||
table Партнер
|
||||
|
||||
measure 'ABC Class dynamic' =
|
||||
|
||||
IF (
|
||||
HASONEVALUE ( 'Партнер'[partner_id] ),
|
||||
VAR SalesByPartner =
|
||||
CALCULATETABLE (
|
||||
ADDCOLUMNS (
|
||||
SUMMARIZE ( 'Партнер', 'Партнер'[partner_id] ),
|
||||
"@PartnerSales", [Сумма продаж + РК, руб]
|
||||
),
|
||||
ALLSELECTED ( 'Партнер' )
|
||||
)
|
||||
VAR AllSales =
|
||||
CALCULATE (
|
||||
[Сумма продаж + РК, руб],
|
||||
ALLSELECTED ( 'Партнер' )
|
||||
)
|
||||
VAR CurrentSalesAmt = [Сумма продаж + РК, руб]
|
||||
VAR CumulatedSales =
|
||||
FILTER (
|
||||
SalesByPartner,
|
||||
[@PartnerSales] >= CurrentSalesAmt
|
||||
)
|
||||
VAR CumulatedSalesAmount =
|
||||
SUMX (
|
||||
CumulatedSales,
|
||||
[@PartnerSales]
|
||||
)
|
||||
VAR CurrentCumulatedPct =
|
||||
DIVIDE (
|
||||
CumulatedSalesAmount,
|
||||
AllSales
|
||||
)
|
||||
VAR Result =
|
||||
SWITCH (
|
||||
TRUE,
|
||||
ISBLANK ( CurrentCumulatedPct ), BLANK (),
|
||||
CurrentCumulatedPct <= 0.8, "A",
|
||||
CurrentCumulatedPct <= 0.95, "B",
|
||||
"C"
|
||||
)
|
||||
RETURN
|
||||
Result
|
||||
)
|
||||
|
||||
column partner_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: partner_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Партнер
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Партнер
|
||||
|
||||
changedProperty = SortByColumn
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Регион
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Регион
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column manager_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: manager_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Да/Нет Клиент'
|
||||
dataType: int64
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Да/Нет Клиент
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Да/Нет Поставщик'
|
||||
dataType: int64
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Да/Нет Поставщик
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Да/Нет Конкурент'
|
||||
dataType: int64
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Да/Нет Конкурент
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Код УТ'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Код УТ
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Основной менеджер'
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Основной менеджер
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Направление деятельности'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Направление деятельности
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column bitrix_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: bitrix_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column ДатаРегистрации
|
||||
dataType: dateTime
|
||||
formatString: General Date
|
||||
summarizeBy: none
|
||||
sourceColumn: ДатаРегистрации
|
||||
|
||||
variation Изменение
|
||||
isDefault
|
||||
relationship: 70d8fb19-ce6e-4331-bdd5-c48b97661c3a
|
||||
defaultHierarchy: LocalDateTable_67da7b50-915b-480b-9e3a-3a60739fb0c6.'Иерархия дат'
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Сегмент
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Сегмент
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Дата последнего звонка'
|
||||
dataType: dateTime
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата последнего звонка
|
||||
|
||||
variation Изменение
|
||||
isDefault
|
||||
relationship: b7780e24-ae05-4812-ad3f-b6d9dc7f50cc
|
||||
defaultHierarchy: LocalDateTable_c661d468-0044-4990-b9e8-723cda59cf51.'Иерархия дат'
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column partner_link
|
||||
dataType: string
|
||||
dataCategory: WebUrl
|
||||
summarizeBy: none
|
||||
sourceColumn: partner_link
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Область
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Область
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Округ
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Округ
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Что шьют?'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Что шьют?
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Категория
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Категория
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Статус партнера'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Статус партнера
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Дата первого заказа'
|
||||
dataType: dateTime
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата первого заказа
|
||||
|
||||
variation Изменение
|
||||
isDefault
|
||||
relationship: 8171e79f-bfe6-4798-bb1a-98146553bada
|
||||
defaultHierarchy: LocalDateTable_588ed205-7c5f-41f0-9bd7-0d82b2484f09.'Иерархия дат'
|
||||
|
||||
changedProperty = DataType
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column Когорта = FORMAT('Партнер'[Дата первого заказа], "YYYY-MM")
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Статус по динамике 2025/2024'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Статус по динамике 2025/2024
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Статус по обороту 2025'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Статус по обороту 2025
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition Партнер-974763bd-dd7f-47ca-b4b6-800173f04370 = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
sales_w_partners = Источник{[Schema="pbi",Item="Партнеры"]}[Data],
|
||||
#"Переименованные столбцы" = Table.RenameColumns(sales_w_partners,{{"partner", "Партнер"}, {"region", "Регион"}, {"konkurent", "Да/Нет Конкурент"}, {"client", "Да/Нет Клиент"}, {"supplier", "Да/Нет Поставщик"}, {"_Code", "Код УТ"}}),
|
||||
#"Объединенные запросы" = Table.NestedJoin(#"Переименованные столбцы", {"bitrix_id"}, crm_company_uf, {"bitrix_id"}, "crm_company_uf", JoinKind.LeftOuter),
|
||||
#"Развернутый элемент crm_company_uf" = Table.ExpandTableColumn(#"Объединенные запросы", "crm_company_uf", {"Дата последнего звонка"}, {"Дата последнего звонка"}),
|
||||
#"Вставлено: объединенный столбец" = Table.AddColumn(#"Развернутый элемент crm_company_uf", "Сведено", each Text.Combine({"https://magok.bitrix24.ru/crm/company/details/", [bitrix_id], "/"}), type text),
|
||||
#"Переименованные столбцы1" = Table.RenameColumns(#"Вставлено: объединенный столбец",{{"Сведено", "partner_link"}, {"oblast", "Область"}, {"okrug", "Округ"}, {"Category", "Категория"}})
|
||||
in
|
||||
#"Переименованные столбцы1"
|
||||
|
||||
annotation PBI_QueryRelationships = {"columnCount":10,"keyColumnNames":[],"queryRelationships":[],"columnIdentities":["Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{1c_id,0}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{partner_id,1}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{partner,2}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{region,3}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{1c_manager_id,4}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{manager_id,5}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{napravlenie,6}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{client,7}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{supplier,8}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{konkurent,9}"],"ColumnCount":10,"KeyColumnNames":[],"ColumnIdentities":["Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{1c_id,0}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{partner_id,1}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{partner,2}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{region,3}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{1c_manager_id,4}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{manager_id,5}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{napravlenie,6}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{client,7}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{supplier,8}","Server.Database\\/2/SQL/1cnew;mag_reports/sales/sales.w_partners.{konkurent,9}"],"RelationshipInfo":[]}
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
159
analytics/pbi/model/report/Model/tables/План маркеты.tmdl
Normal file
159
analytics/pbi/model/report/Model/tables/План маркеты.tmdl
Normal file
@ -0,0 +1,159 @@
|
||||
table 'План маркеты'
|
||||
|
||||
measure 'План Ozon, руб' = ```
|
||||
|
||||
|
||||
VAR PlanGroups =
|
||||
SUMMARIZE(
|
||||
'Номенклатура',
|
||||
'Номенклатура'[Менеджер OZON]
|
||||
)
|
||||
|
||||
VAR FilterPlanGroups =
|
||||
TREATAS(
|
||||
PlanGroups,
|
||||
'План маркеты'[Менеджер]
|
||||
)
|
||||
|
||||
VAR Result =
|
||||
CALCULATE(
|
||||
SUM('План маркеты'[План]), KEEPFILTERS(FilterPlanGroups),
|
||||
FILTER('План маркеты',MONTH('План маркеты'[Месяц]) = MONTH(MAX('.Календарь'[Дата]))),
|
||||
FILTER('План маркеты',YEAR('План маркеты'[Месяц]) = YEAR(MAX('.Календарь'[Дата]))),
|
||||
FILTER('План маркеты', 'План маркеты'[Маркетплейс] = "OZON")
|
||||
|
||||
)
|
||||
|
||||
RETURN Result
|
||||
```
|
||||
formatString: #,0
|
||||
|
||||
measure 'План WB, руб' = ```
|
||||
|
||||
|
||||
VAR PlanGroups =
|
||||
SUMMARIZE(
|
||||
'Номенклатура',
|
||||
'Номенклатура'[Менеджер WB]
|
||||
)
|
||||
|
||||
VAR FilterPlanGroups =
|
||||
TREATAS(
|
||||
PlanGroups,
|
||||
'План маркеты'[Менеджер]
|
||||
)
|
||||
|
||||
VAR Result =
|
||||
CALCULATE(
|
||||
SUM('План маркеты'[План]), KEEPFILTERS(FilterPlanGroups),
|
||||
FILTER('План маркеты',MONTH('План маркеты'[Месяц]) = MONTH(MAX('.Календарь'[Дата]))),
|
||||
FILTER('План маркеты',YEAR('План маркеты'[Месяц]) = YEAR(MAX('.Календарь'[Дата]))),
|
||||
FILTER('План маркеты', 'План маркеты'[Маркетплейс] = "WB")
|
||||
)
|
||||
|
||||
RETURN Result
|
||||
```
|
||||
formatString: #,0
|
||||
|
||||
measure 'Осталось до плана Ozon' =
|
||||
IF(
|
||||
[План Ozon, руб] > [Сумма продаж + РК, руб],
|
||||
[План Ozon, руб] - [Сумма продаж + РК, руб], 0
|
||||
)
|
||||
formatString: #,0
|
||||
|
||||
measure 'Осталось до плана WB' =
|
||||
IF(
|
||||
[План WB, руб] > [Сумма продаж + РК, руб],
|
||||
[План WB, руб] - [Сумма продаж + РК, руб], 0
|
||||
)
|
||||
formatString: #,0
|
||||
|
||||
measure '% плана Ozon' = ```
|
||||
DIVIDE(
|
||||
[Сумма продаж + РК, руб], [План Ozon, руб])
|
||||
```
|
||||
formatString: 0%;-0%;0%
|
||||
|
||||
measure '% плана WB' = ```
|
||||
DIVIDE(
|
||||
[Сумма продаж + РК, руб], [План WB, руб])
|
||||
```
|
||||
formatString: 0%;-0%;0%
|
||||
|
||||
measure 'Аппроксим. Ozon, %' = ```
|
||||
|
||||
DIVIDE(
|
||||
[Аппроксимация месяц, руб], [План Ozon, руб]
|
||||
)
|
||||
```
|
||||
formatString: 0%;-0%;0%
|
||||
|
||||
measure 'Аппроксим. WB, %' = ```
|
||||
|
||||
DIVIDE(
|
||||
[Аппроксимация месяц, руб], [План WB, руб]
|
||||
)
|
||||
```
|
||||
formatString: 0%;-0%;0%
|
||||
|
||||
column Маркетплейс
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Маркетплейс
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Менеджер
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Менеджер
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Месяц
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Месяц
|
||||
|
||||
variation Изменение
|
||||
isDefault
|
||||
relationship: 381b6bd4-06f4-496e-9264-13deb45adbf2
|
||||
defaultHierarchy: LocalDateTable_66d8bbba-35e3-44df-be7f-bb6fc44f271a.'Иерархия дат'
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column План
|
||||
dataType: int64
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: План
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'План маркеты' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = GoogleSheets.Contents("https://docs.google.com/spreadsheets/d/1bf0nQKoZaTlIlj86tRrAarHdg5dSsXH4xwgOdJc2lqQ/edit?usp=sharing"),
|
||||
Маркеты_Table = Источник{[name="Маркеты",ItemKind="Table"]}[Data],
|
||||
#"Повышенные заголовки" = Table.PromoteHeaders(Маркеты_Table, [PromoteAllScalars=true]),
|
||||
#"Измененный тип" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"Маркетплейс", type text}, {"Менеджер", type text}, {"Месяц", type date}, {"План", Int64.Type}})
|
||||
in
|
||||
#"Измененный тип"
|
||||
|
||||
changedProperty = Name
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
@ -0,0 +1,168 @@
|
||||
table 'План продаж менеджеров'
|
||||
|
||||
measure 'Актуальный план, руб' =
|
||||
CALCULATE(
|
||||
SUM('План продаж менеджеров'[план продаж]),
|
||||
STARTOFMONTH('.Календарь'[Дата])
|
||||
)
|
||||
formatString: #,0
|
||||
|
||||
measure '% плана' =
|
||||
DIVIDE(
|
||||
[Сумма продаж + РК, руб],
|
||||
'План продаж менеджеров'[Актуальный план, руб]
|
||||
)
|
||||
formatString: 0%;-0%;0%
|
||||
|
||||
measure '% премии' =
|
||||
IF(
|
||||
[% плана]< 0.8,
|
||||
1.8,
|
||||
IF(
|
||||
[% плана]<0.9,
|
||||
2.2,
|
||||
IF (
|
||||
[% плана]<=1.01,
|
||||
2.6,
|
||||
3
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure 'Аппроксимация месяц, руб' = ```
|
||||
|
||||
VAR CySales = [Сумма продаж + РК, руб]
|
||||
VAR LastSalesDay = DAY(LASTNONBLANK('.Календарь'[Дата], [Сумма продаж + РК, руб] > 0))
|
||||
VAR MonthDays = DAY(EOMONTH(MAX('.Календарь'[Дата]), 0))
|
||||
VAR Approx =
|
||||
IF(
|
||||
NOT ISBLANK ( CySales ),
|
||||
DIVIDE(
|
||||
'Основной отчет'[MTD Сумма продаж с начала месяца, руб] * MonthDays ,
|
||||
LastSalesDay
|
||||
)
|
||||
)
|
||||
RETURN Approx
|
||||
```
|
||||
formatString: #,0
|
||||
|
||||
measure 'Аппроксимация год, руб' = ```
|
||||
|
||||
VAR CySales = [Сумма продаж + РК, руб]
|
||||
|
||||
VAR LastSalesDay =
|
||||
INT(
|
||||
LASTNONBLANK('.Календарь'[Дата], [Сумма продаж + РК, руб] > 0) -
|
||||
STARTOFYEAR('.Календарь'[Дата].[Date])
|
||||
) + 1
|
||||
|
||||
|
||||
VAR YearDays =
|
||||
INT(
|
||||
ENDOFYEAR('.Календарь'[Дата].[Date]) - STARTOFYEAR('.Календарь'[Дата].[Date])
|
||||
) + 1
|
||||
|
||||
VAR Approx =
|
||||
IF(
|
||||
NOT ISBLANK ( CySales ),
|
||||
DIVIDE(
|
||||
'Основной отчет'[YTD Сумма продаж с начала года, руб] * YearDays ,
|
||||
LastSalesDay
|
||||
)
|
||||
)
|
||||
RETURN Approx
|
||||
```
|
||||
formatString: #,0
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
measure 'Аппроксим. месяц руб, %' = ```
|
||||
|
||||
DIVIDE(
|
||||
[Аппроксимация месяц, руб], SUM('План продаж менеджеров'[план продаж])
|
||||
)
|
||||
```
|
||||
formatString: 0%;-0%;0%
|
||||
|
||||
measure 'Осталось до плана, руб' = [Актуальный план, руб] - [Сумма продаж + РК, руб]
|
||||
formatString: #,0
|
||||
|
||||
measure 'План продаж в день, руб' = DIVIDE('План продаж менеджеров'[Актуальный план, руб],21.5)
|
||||
formatString: #,0
|
||||
|
||||
measure 'План продаж менеджеров год, руб' = ```
|
||||
|
||||
CALCULATE(
|
||||
SUM('План продаж менеджеров'[план продаж]),
|
||||
ALLEXCEPT('.Календарь', '.Календарь'[Дата].[Год])
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
|
||||
measure '% годового плана' =
|
||||
DIVIDE(
|
||||
[Сумма продаж + РК, руб],
|
||||
'План продаж менеджеров'[План продаж менеджеров год, руб]
|
||||
)
|
||||
formatString: 0%;-0%;0%
|
||||
|
||||
column Период
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Период
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column user_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: user_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'план продаж'
|
||||
dataType: double
|
||||
isHidden
|
||||
summarizeBy: sum
|
||||
sourceColumn: план продаж
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Менеджер
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Менеджер
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'План продаж менеджеров' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_ПланПродажМенеджеров = Источник{[Schema="pbi",Item="ПланПродажМенеджеров"]}[Data],
|
||||
#"Измененный тип" = Table.TransformColumnTypes(pbi_ПланПродажМенеджеров,{{"_Fld27878", type date}}),
|
||||
#"Переименованные столбцы" = Table.RenameColumns(#"Измененный тип",{{"_Fld27878", "Период"}})
|
||||
in
|
||||
#"Переименованные столбцы"
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
@ -0,0 +1,436 @@
|
||||
table 'План продаж по группам'
|
||||
|
||||
measure 'План продаж месяц, usd' = ```
|
||||
|
||||
|
||||
VAR PlanGroups =
|
||||
SUMMARIZE(
|
||||
'Номенклатура',
|
||||
'Группы'[first group],
|
||||
'Номенклатура'[Менеджер по закупкам],
|
||||
'Номенклатура'[Товарный менеджер]
|
||||
)
|
||||
|
||||
VAR FilterPlanGroups =
|
||||
TREATAS(
|
||||
PlanGroups,
|
||||
'План продаж по группам'[group_id],
|
||||
'План продаж по группам'[Менеджер по закупкам],
|
||||
'План продаж по группам'[Товарный менеджер]
|
||||
)
|
||||
|
||||
VAR Result =
|
||||
CALCULATE(
|
||||
SUM('План продаж по группам'[План продаж, usd]), KEEPFILTERS(FilterPlanGroups),
|
||||
FILTER('План продаж по группам',MONTH('План продаж по группам'[Месяц]) = MONTH(MAX('.Календарь'[Дата]))),
|
||||
FILTER('План продаж по группам',YEAR('План продаж по группам'[Месяц]) = YEAR(MAX('.Календарь'[Дата])))
|
||||
)
|
||||
|
||||
RETURN Result
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: План по группам usd
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
measure 'План год, usd' = ```
|
||||
|
||||
|
||||
VAR PlanGroups =
|
||||
SUMMARIZE(
|
||||
'Номенклатура',
|
||||
'Группы'[first group],
|
||||
'Номенклатура'[Менеджер по закупкам],
|
||||
'Номенклатура'[Товарный менеджер]
|
||||
)
|
||||
|
||||
VAR FilterPlanGroups =
|
||||
TREATAS(
|
||||
PlanGroups,
|
||||
'План продаж по группам'[group_id],
|
||||
'План продаж по группам'[Менеджер по закупкам],
|
||||
'План продаж по группам'[Товарный менеджер]
|
||||
)
|
||||
|
||||
VAR Result =
|
||||
CALCULATE(
|
||||
SUM('План продаж по группам'[План продаж, usd]), KEEPFILTERS(FilterPlanGroups),
|
||||
FILTER('План продаж по группам',YEAR('План продаж по группам'[Месяц]) = YEAR(MAX('.Календарь'[Дата])))
|
||||
)
|
||||
|
||||
RETURN Result
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: План по группам usd
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
measure '% план год' = ```
|
||||
|
||||
DIVIDE (
|
||||
[Сумма продаж + РК, usd], [План год, usd], BLANK()
|
||||
)
|
||||
```
|
||||
formatString: 0.00%;-0.00%;0.00%
|
||||
displayFolder: План по группам usd
|
||||
|
||||
measure '% план месяц' = ```
|
||||
|
||||
DIVIDE (
|
||||
[Сумма продаж + РК, usd], [План продаж месяц, usd], BLANK()
|
||||
)
|
||||
```
|
||||
formatString: 0.00%;-0.00%;0.00%
|
||||
displayFolder: План по группам usd
|
||||
|
||||
measure 'Аппроксимация год, usd' = ```
|
||||
|
||||
VAR CySales = [Сумма продаж + РК, usd]
|
||||
|
||||
VAR LastSalesDay =
|
||||
INT(
|
||||
LASTNONBLANK('.Календарь'[Дата], [Сумма продаж + РК, usd] > 0) -
|
||||
STARTOFYEAR('.Календарь'[Дата].[Date])
|
||||
) + 1
|
||||
|
||||
|
||||
VAR YearDays =
|
||||
INT(
|
||||
ENDOFYEAR('.Календарь'[Дата].[Date]) - STARTOFYEAR('.Календарь'[Дата].[Date])
|
||||
) + 1
|
||||
|
||||
VAR Approx =
|
||||
IF(
|
||||
NOT ISBLANK ( CySales ),
|
||||
DIVIDE(
|
||||
'Основной отчет'[YTD Сумма продаж с начала года, usd] * YearDays ,
|
||||
LastSalesDay
|
||||
)
|
||||
)
|
||||
RETURN Approx
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: План по группам usd
|
||||
|
||||
measure 'Аппроксимация месяц, usd' = ```
|
||||
|
||||
VAR CySales = [Сумма продаж + РК, usd]
|
||||
VAR LastSalesDay = DAY(LASTNONBLANK('.Календарь'[Дата], [Сумма продаж + РК, usd] > 0))
|
||||
VAR MonthDays = DAY(EOMONTH(MAX('.Календарь'[Дата]), 0))
|
||||
VAR Approx =
|
||||
IF(
|
||||
NOT ISBLANK ( CySales ),
|
||||
DIVIDE(
|
||||
'Основной отчет'[MTD Сумма продаж с начала месяца, usd] * MonthDays ,
|
||||
LastSalesDay
|
||||
)
|
||||
)
|
||||
RETURN Approx
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: План по группам usd
|
||||
|
||||
measure 'Аппроксим. год usd, %' = ```
|
||||
|
||||
DIVIDE(
|
||||
[Аппроксимация год, usd], [План год, usd]
|
||||
)
|
||||
```
|
||||
formatString: 0.00%;-0.00%;0.00%
|
||||
displayFolder: План по группам usd
|
||||
|
||||
measure 'Аппроксим. месяц usd, %' = ```
|
||||
|
||||
DIVIDE(
|
||||
[Аппроксимация месяц, usd], [План продаж месяц, usd]
|
||||
)
|
||||
```
|
||||
formatString: 0.00%;-0.00%;0.00%
|
||||
displayFolder: План по группам usd
|
||||
|
||||
measure 'Аппроксимация год, шт' = ```
|
||||
|
||||
VAR CySales = [Количество продаж, шт]
|
||||
|
||||
VAR LastSalesDay =
|
||||
INT(
|
||||
LASTNONBLANK('.Календарь'[Дата], [Количество продаж, шт] > 0) -
|
||||
STARTOFYEAR('.Календарь'[Дата].[Date])
|
||||
) + 1
|
||||
|
||||
|
||||
VAR YearDays =
|
||||
INT(
|
||||
ENDOFYEAR('.Календарь'[Дата].[Date]) - STARTOFYEAR('.Календарь'[Дата].[Date])
|
||||
) + 1
|
||||
|
||||
VAR Approx =
|
||||
IF(
|
||||
NOT ISBLANK ( CySales ),
|
||||
DIVIDE(
|
||||
'Основной отчет'[YTD Сумма продаж с начала года, шт] * YearDays ,
|
||||
LastSalesDay
|
||||
)
|
||||
)
|
||||
RETURN Approx
|
||||
```
|
||||
formatString: #,0
|
||||
|
||||
measure 'План закупки ост. период, шт' = ```
|
||||
|
||||
[Аппроксимация год, шт]
|
||||
- [YTD Сумма продаж с начала года, шт]
|
||||
- 'Заказы все'[В производстве кол.]
|
||||
- 'Заказы все'[В пути кол.]
|
||||
- [Остаток - МП конец, шт]
|
||||
+ [Остаток - МП средний, шт]
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: План закупки
|
||||
|
||||
measure 'План закупки ост. период, руб' =
|
||||
|
||||
SUMX('Номенклатура',
|
||||
[Учетная цена (руб)] * [План закупки ост. период, шт] / 1000)
|
||||
formatString: #,0
|
||||
displayFolder: План закупки
|
||||
|
||||
measure 'План закупки ост. период, usd' =
|
||||
|
||||
DIVIDE([План закупки ост. период, руб], [Курс TODAY-1, usd2], 0)
|
||||
formatString: #,0
|
||||
displayFolder: План закупки
|
||||
|
||||
measure 'План год, руб' = ```
|
||||
|
||||
|
||||
VAR PlanGroups =
|
||||
SUMMARIZE(
|
||||
'Номенклатура',
|
||||
'Группы'[first group],
|
||||
'Номенклатура'[Менеджер по закупкам],
|
||||
'Номенклатура'[Товарный менеджер]
|
||||
)
|
||||
|
||||
VAR FilterPlanGroups =
|
||||
TREATAS(
|
||||
PlanGroups,
|
||||
'План продаж по группам'[group_id],
|
||||
'План продаж по группам'[Менеджер по закупкам],
|
||||
'План продаж по группам'[Товарный менеджер]
|
||||
)
|
||||
|
||||
VAR Result =
|
||||
CALCULATE(
|
||||
SUM('План продаж по группам'[План продаж, руб]), KEEPFILTERS(FilterPlanGroups),
|
||||
FILTER('План продаж по группам',YEAR('План продаж по группам'[Месяц]) = YEAR(MAX('.Календарь'[Дата])))
|
||||
)
|
||||
|
||||
RETURN Result
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: План по группам руб
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
measure 'План продаж месяц, руб' = ```
|
||||
|
||||
|
||||
VAR PlanGroups =
|
||||
SUMMARIZE(
|
||||
'Номенклатура',
|
||||
'Группы'[first group],
|
||||
'Номенклатура'[Менеджер по закупкам],
|
||||
'Номенклатура'[Товарный менеджер]
|
||||
)
|
||||
|
||||
VAR FilterPlanGroups =
|
||||
TREATAS(
|
||||
PlanGroups,
|
||||
'План продаж по группам'[group_id],
|
||||
'План продаж по группам'[Менеджер по закупкам],
|
||||
'План продаж по группам'[Товарный менеджер]
|
||||
)
|
||||
|
||||
VAR Result =
|
||||
CALCULATE(
|
||||
SUM('План продаж по группам'[План продаж, руб]), KEEPFILTERS(FilterPlanGroups),
|
||||
FILTER('План продаж по группам',MONTH('План продаж по группам'[Месяц]) = MONTH(MAX('.Календарь'[Дата]))),
|
||||
FILTER('План продаж по группам',YEAR('План продаж по группам'[Месяц]) = YEAR(MAX('.Календарь'[Дата])))
|
||||
)
|
||||
|
||||
RETURN Result
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: План по группам руб
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
measure '% план год (р)' = ```
|
||||
|
||||
DIVIDE (
|
||||
[Сумма продаж + РК, руб], [План год, руб], BLANK()
|
||||
)
|
||||
```
|
||||
formatString: 0.00%;-0.00%;0.00%
|
||||
displayFolder: План по группам руб
|
||||
|
||||
measure '% план месяц (р)' = ```
|
||||
|
||||
DIVIDE (
|
||||
[Сумма продаж + РК, руб], [План продаж месяц, руб], BLANK()
|
||||
)
|
||||
```
|
||||
formatString: 0.00%;-0.00%;0.00%
|
||||
displayFolder: План по группам руб
|
||||
|
||||
measure 'Аппроксимация год по группам, руб' = ```
|
||||
|
||||
VAR CySales = [Сумма продаж + РК, руб]
|
||||
|
||||
VAR LastSalesDay =
|
||||
INT(
|
||||
LASTNONBLANK('.Календарь'[Дата], [Сумма продаж + РК, руб] > 0) -
|
||||
STARTOFYEAR('.Календарь'[Дата].[Date])
|
||||
) + 1
|
||||
|
||||
|
||||
VAR YearDays =
|
||||
INT(
|
||||
ENDOFYEAR('.Календарь'[Дата].[Date]) - STARTOFYEAR('.Календарь'[Дата].[Date])
|
||||
) + 1
|
||||
|
||||
VAR Approx =
|
||||
IF(
|
||||
NOT ISBLANK ( CySales ),
|
||||
DIVIDE(
|
||||
'Основной отчет'[YTD Сумма продаж с начала года, руб] * YearDays ,
|
||||
LastSalesDay
|
||||
)
|
||||
)
|
||||
RETURN Approx
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: План по группам руб
|
||||
|
||||
measure 'Аппроксимация месяц по группам, руб' = ```
|
||||
|
||||
VAR CySales = [Сумма продаж + РК, руб]
|
||||
VAR LastSalesDay = DAY(LASTNONBLANK('.Календарь'[Дата], [Сумма продаж + РК, руб] > 0))
|
||||
VAR MonthDays = DAY(EOMONTH(MAX('.Календарь'[Дата]), 0))
|
||||
VAR Approx =
|
||||
IF(
|
||||
NOT ISBLANK ( CySales ),
|
||||
DIVIDE(
|
||||
'Основной отчет'[MTD Сумма продаж с начала месяца, руб] * MonthDays ,
|
||||
LastSalesDay
|
||||
)
|
||||
)
|
||||
RETURN Approx
|
||||
```
|
||||
formatString: #,0
|
||||
displayFolder: План по группам руб
|
||||
|
||||
measure 'Аппроксим. год по группам руб, %' = ```
|
||||
|
||||
DIVIDE(
|
||||
[Аппроксимация год по группам, руб], [План год, руб]
|
||||
)
|
||||
```
|
||||
formatString: 0.00%;-0.00%;0.00%
|
||||
displayFolder: План по группам руб
|
||||
|
||||
measure 'Аппроксим. месяц по группам руб, %' = ```
|
||||
|
||||
DIVIDE(
|
||||
[Аппроксимация месяц по группам, руб], [План продаж месяц, руб]
|
||||
)
|
||||
```
|
||||
formatString: 0.00%;-0.00%;0.00%
|
||||
displayFolder: План по группам руб
|
||||
|
||||
column Месяц
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Месяц
|
||||
|
||||
variation Изменение
|
||||
isDefault
|
||||
relationship: 6bdd8855-c6d2-4c21-b90f-cb9f0b0bd52e
|
||||
defaultHierarchy: LocalDateTable_704570fc-e0c6-4914-97ab-ebb645a2ab6e.'Иерархия дат'
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column 'План продаж, usd'
|
||||
dataType: double
|
||||
isHidden
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: План продаж, usd
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
column group_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: group_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Товарный менеджер'
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Товарный менеджер
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Менеджер по закупкам'
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Менеджер по закупкам
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'План продаж, руб' = 'План продаж по группам'[План продаж, usd] * 102
|
||||
isHidden
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
partition 'План продаж по группам' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_ПланыПродажПоГруппам = Источник{[Schema="pbi",Item="ПланыПродажПоГруппам"]}[Data],
|
||||
#"Измененный тип" = Table.TransformColumnTypes(pbi_ПланыПродажПоГруппам,{{"Месяц", type date}}),
|
||||
#"Переименованные столбцы" = Table.RenameColumns(#"Измененный тип",{{"План продаж", "План продаж, usd"}})
|
||||
in
|
||||
#"Переименованные столбцы"
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
220
analytics/pbi/model/report/Model/tables/Расходы по годам.tmdl
Normal file
220
analytics/pbi/model/report/Model/tables/Расходы по годам.tmdl
Normal file
@ -0,0 +1,220 @@
|
||||
table 'Расходы по годам'
|
||||
isHidden
|
||||
|
||||
measure '% от выручки 2024' = ```
|
||||
|
||||
VAR summa =
|
||||
CALCULATE(
|
||||
SUM('Расходы по годам'[Сумма]),
|
||||
'Расходы по годам'[Категория] IN { "Реклама", "Платежи в бюджет", "Расходы", "Ведение р/счета", "Прочие выплаты", "Канцелярия", "Питание", "Хозяйственные расходы", "Оргтехника и IT"
|
||||
} && 'Расходы по годам'[Год] = 2024
|
||||
)
|
||||
RETURN
|
||||
DIVIDE(
|
||||
//[Платежи в бюджет 2024] + [Аренда 2024] + [Прочие расходы 2024],
|
||||
summa,
|
||||
CALCULATE(
|
||||
'Основной отчет'[Сумма продаж + РК, руб],
|
||||
FILTER( ALL('.Календарь'), '.Календарь'[Дата].[Год] = 2024 ),
|
||||
ALL('Себестоимость')
|
||||
)
|
||||
) *
|
||||
CALCULATE(
|
||||
'Основной отчет'[Сумма продаж + РК, руб],
|
||||
FILTER('.Календарь', '.Календарь'[Дата].[Год]=2024)
|
||||
)
|
||||
|
||||
```
|
||||
formatString: #,0
|
||||
isHidden
|
||||
displayFolder: расчеты 2024
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
measure 'Расходы на строку 2024' = ```
|
||||
|
||||
VAR summa =
|
||||
5/8 * CALCULATE(
|
||||
SUM('Расходы по годам'[Сумма]),
|
||||
'Расходы по годам'[Категория] = "Зарплата"
|
||||
&& 'Расходы по годам'[Год] = 2024
|
||||
) +
|
||||
1/2 * CALCULATE(
|
||||
SUM('Расходы по годам'[Сумма]),
|
||||
'Расходы по годам'[Категория] IN { "Транспортные расходы", "Аренда"}
|
||||
&& 'Расходы по годам'[Год] = 2024
|
||||
)
|
||||
|
||||
RETURN
|
||||
DIVIDE(
|
||||
summa,
|
||||
CALCULATE(
|
||||
'Основной отчет'[Количество строк],
|
||||
FILTER( ALL('.Календарь'), '.Календарь'[Дата].[Год] = 2024 ),
|
||||
ALL('Себестоимость')
|
||||
)
|
||||
) *
|
||||
CALCULATE(
|
||||
'Основной отчет'[Количество строк],
|
||||
FILTER('.Календарь', '.Календарь'[Дата].[Год]=2024)
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
isHidden
|
||||
displayFolder: расчеты 2024
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
measure 'Расходы на упаковку 2024' = ```
|
||||
|
||||
VAR summa =
|
||||
3/8 * CALCULATE(
|
||||
SUM('Расходы по годам'[Сумма]),
|
||||
'Расходы по годам'[Категория] = "Зарплата"
|
||||
&& 'Расходы по годам'[Год] = 2024
|
||||
) +
|
||||
CALCULATE(
|
||||
SUM('Расходы по годам'[Сумма]),
|
||||
'Расходы по годам'[Категория] = "Содержание офиса и складов"
|
||||
&& 'Расходы по годам'[Год] = 2024
|
||||
) +
|
||||
1/2 * CALCULATE(
|
||||
SUM('Расходы по годам'[Сумма]),
|
||||
'Расходы по годам'[Категория] IN { "Транспортные расходы", "Аренда"}
|
||||
&& 'Расходы по годам'[Год] = 2024
|
||||
)
|
||||
|
||||
RETURN
|
||||
DIVIDE(
|
||||
summa,
|
||||
CALCULATE(
|
||||
'Основной отчет'[Количество продаж, упак],
|
||||
FILTER( ALL('.Календарь'), '.Календарь'[Дата].[Год] = 2024 ),
|
||||
ALL('Себестоимость')
|
||||
)
|
||||
) *
|
||||
CALCULATE(
|
||||
'Основной отчет'[Количество продаж, упак],
|
||||
FILTER('.Календарь', '.Календарь'[Дата].[Год]=2024)
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
isHidden
|
||||
displayFolder: расчеты 2024
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
measure 'Чистая прибыль 2024' = ```
|
||||
|
||||
CALCULATE(
|
||||
'Основной отчет'[Сумма продаж + РК, руб] - 'Основной отчет'[Сумма учетная, руб]
|
||||
- ( [% от выручки 2024] + [Расходы на строку 2024] + [Расходы на упаковку 2024] ),
|
||||
FILTER('.Календарь', '.Календарь'[Дата].[Год] = 2024)
|
||||
)
|
||||
/*CALCULATE(
|
||||
'Основной отчет'[Сумма продаж, руб] - 'Основной отчет'[Сумма учетная, руб] -
|
||||
([Расходы на упаковку 2024] * 'Основной отчет'[Количество продаж, упак]) -
|
||||
([Расходы на строку 2024] * 'Основной отчет'[Количество строк]) -
|
||||
[Расходы через выручку 2024],
|
||||
FILTER('.Календарь', '.Календарь'[Дата].[Год] = 2024)
|
||||
)
|
||||
*/
|
||||
|
||||
|
||||
```
|
||||
formatString: #,0
|
||||
isHidden
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
measure 'Расходы на заказы 2024' = ```
|
||||
|
||||
VAR summa =
|
||||
5/12 * CALCULATE(
|
||||
SUM('Расходы по годам'[Сумма]),
|
||||
'Расходы по годам'[Категория] = "Зарплата"
|
||||
&& 'Расходы по годам'[Год] = 2024
|
||||
) +
|
||||
CALCULATE(
|
||||
SUM('Расходы по годам'[Сумма]),
|
||||
'Расходы по годам'[Категория] IN { "Транспортные расходы", "Аренда" }
|
||||
&& 'Расходы по годам'[Год] = 2024
|
||||
)
|
||||
|
||||
RETURN
|
||||
DIVIDE(
|
||||
summa,
|
||||
CALCULATE(
|
||||
'Основной отчет'[Количество заказов],
|
||||
FILTER( ALL('.Календарь'), '.Календарь'[Дата].[Год] = 2024 ),
|
||||
ALL('Себестоимость')
|
||||
)
|
||||
) *
|
||||
CALCULATE(
|
||||
'Основной отчет'[Количество заказов],
|
||||
FILTER('.Календарь', '.Календарь'[Дата].[Год]=2024)
|
||||
)
|
||||
```
|
||||
formatString: #,0
|
||||
isHidden
|
||||
displayFolder: расчеты 2024
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
column Категория
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Категория
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Сумма
|
||||
dataType: double
|
||||
isHidden
|
||||
summarizeBy: sum
|
||||
sourceColumn: Сумма
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Год
|
||||
dataType: int64
|
||||
isHidden
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Год
|
||||
|
||||
changedProperty = DataType
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'Расходы по годам' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Databases("prdsql"),
|
||||
mag_pbi = Источник{[Name="mag_pbi"]}[Data],
|
||||
#"pbi_Расходы по годам" = mag_pbi{[Schema="pbi",Item="Расходы по годам"]}[Data]
|
||||
in
|
||||
#"pbi_Расходы по годам"
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
68
analytics/pbi/model/report/Model/tables/Резервы.tmdl
Normal file
68
analytics/pbi/model/report/Model/tables/Резервы.tmdl
Normal file
@ -0,0 +1,68 @@
|
||||
table Резервы
|
||||
|
||||
column artic_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: artic_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'В резерве всего, шт'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: В резерве всего, шт
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'В резерве всего, упак'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: В резерве всего, упак
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Склад
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Склад
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'В резерве всего, руб' = 'Резервы'[В резерве всего, шт] * RELATED('Номенклатура'[Цена учетная, руб])
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Дата обновления'
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата обновления
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
partition Резервы = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_Резервы = Источник{[Schema="pbi",Item="Резервы"]}[Data],
|
||||
#"Измененный тип" = Table.TransformColumnTypes(pbi_Резервы,{{"Склад", type text}})
|
||||
in
|
||||
#"Измененный тип"
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
463
analytics/pbi/model/report/Model/tables/Себестоимость.tmdl
Normal file
463
analytics/pbi/model/report/Model/tables/Себестоимость.tmdl
Normal file
@ -0,0 +1,463 @@
|
||||
table Себестоимость
|
||||
|
||||
column Период
|
||||
dataType: dateTime
|
||||
formatString: General Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Период
|
||||
|
||||
changedProperty = DataType
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Статья
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Статья
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Вид операции'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Вид операции
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Организация
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Организация
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Контрагент
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Контрагент
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Менеджер
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Менеджер
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Номер документа'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Номер документа
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Валюта документа'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Валюта документа
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column artic_id
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: artic_id
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Количество
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: Количество
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Сумма plus МП, руб'
|
||||
dataType: double
|
||||
formatString: #,0.00
|
||||
summarizeBy: sum
|
||||
sourceColumn: Сумма plus МП, руб
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Закупка
|
||||
dataType: double
|
||||
formatString: #,0.00000
|
||||
summarizeBy: sum
|
||||
sourceColumn: Закупка
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Закупка, usd2'
|
||||
dataType: double
|
||||
formatString: 0.0000000
|
||||
summarizeBy: sum
|
||||
sourceColumn: Закупка, usd2
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Курс usd2'
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: Курс usd2
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Курс usd'
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: Курс usd
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Таможня
|
||||
dataType: double
|
||||
formatString: 0.00000
|
||||
summarizeBy: sum
|
||||
sourceColumn: Таможня
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column ЕАЭС
|
||||
dataType: double
|
||||
formatString: 0.00000
|
||||
summarizeBy: sum
|
||||
sourceColumn: ЕАЭС
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Учетная цена'
|
||||
dataType: double
|
||||
formatString: 0.00000
|
||||
summarizeBy: sum
|
||||
sourceColumn: Учетная цена
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Учетная цена USD2+2'
|
||||
dataType: double
|
||||
formatString: 0.0000000
|
||||
summarizeBy: sum
|
||||
sourceColumn: Учетная цена USD2+2
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Заказ закрыт'
|
||||
dataType: dateTime
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Заказ закрыт
|
||||
|
||||
variation Variation
|
||||
isDefault
|
||||
relationship: d56f34dd-d18a-4511-b10b-85895b67822c
|
||||
defaultHierarchy: LocalDateTable_93d80160-0984-4e44-91de-316b6ab26727.'Иерархия дат'
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column Маркетинг
|
||||
dataType: double
|
||||
formatString: 0.00000
|
||||
summarizeBy: sum
|
||||
sourceColumn: Маркетинг
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Доставка
|
||||
dataType: double
|
||||
formatString: 0.00000
|
||||
summarizeBy: sum
|
||||
sourceColumn: Доставка
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column НДС
|
||||
dataType: double
|
||||
formatString: 0.00000
|
||||
summarizeBy: sum
|
||||
sourceColumn: НДС
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column ЗатратыМП
|
||||
dataType: double
|
||||
formatString: 0.00000
|
||||
summarizeBy: sum
|
||||
sourceColumn: ЗатратыМП
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column PartnerId
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: PartnerId
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Доставка, usd' = ```
|
||||
|
||||
DIVIDE('Себестоимость'[Доставка], 'Себестоимость'[Курс usd2], 0)
|
||||
|
||||
```
|
||||
formatString: 0.0000000
|
||||
summarizeBy: sum
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'НДС, usd' = ```
|
||||
|
||||
DIVIDE('Себестоимость'[НДС], 'Себестоимость'[Курс usd2], 0)
|
||||
|
||||
```
|
||||
formatString: 0.0000000
|
||||
summarizeBy: sum
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Таможня, usd' = ```
|
||||
|
||||
DIVIDE('Себестоимость'[Таможня], 'Себестоимость'[Курс usd2], 0)
|
||||
|
||||
```
|
||||
formatString: 0.0000000
|
||||
summarizeBy: sum
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Производство, usd' = ```
|
||||
|
||||
DIVIDE('Себестоимость'[Производство], 'Себестоимость'[Курс usd2], 0)
|
||||
|
||||
```
|
||||
formatString: 0.0000000
|
||||
summarizeBy: sum
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column ЗатратыСкладХранение
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: ЗатратыСкладХранение
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'ЗатратыСкладХранение, usd' = ```
|
||||
|
||||
DIVIDE('Себестоимость'[ЗатратыСкладХранение], 'Себестоимость'[Курс usd2], 0)
|
||||
|
||||
```
|
||||
summarizeBy: sum
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Сумма учетная' = ```
|
||||
-1 * (
|
||||
'Себестоимость'[Закупка] + 'Себестоимость'[Доставка] +
|
||||
'Себестоимость'[НДС] + 'Себестоимость'[Таможня] +
|
||||
'Себестоимость'[Производство] - 'Себестоимость'[Доп расходы])
|
||||
```
|
||||
isHidden
|
||||
formatString: #,0.00000
|
||||
summarizeBy: sum
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Сумма учетная, usd' = ```
|
||||
-1 * (
|
||||
'Себестоимость'[Закупка, usd2] + 'Себестоимость'[Доставка, usd] +
|
||||
'Себестоимость'[НДС, usd] + 'Себестоимость'[Таможня, usd] +
|
||||
'Себестоимость'[Производство, usd] - 'Себестоимость'[Доп расходы USD2+2])
|
||||
```
|
||||
isHidden
|
||||
summarizeBy: sum
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Номер заказа'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Номер заказа
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Хоз операция'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Хоз операция
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Приемка
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: Приемка
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column АтсМаркировка
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: АтсМаркировка
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column ВремяВыполненияМинут
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: ВремяВыполненияМинут
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column СборкаЗаказа
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: СборкаЗаказа
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Производство
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: Производство
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column КоличествоУпаковок
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: КоличествоУпаковок
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Учетная сумма, руб'
|
||||
dataType: double
|
||||
formatString: 0.00000
|
||||
summarizeBy: sum
|
||||
sourceColumn: Учетная сумма, руб
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Учетная сумма, usd'
|
||||
dataType: double
|
||||
formatString: 0.0000000
|
||||
summarizeBy: sum
|
||||
sourceColumn: Учетная сумма, usd
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Сумма скидки'
|
||||
dataType: double
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Сумма скидки
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
column 'Доп расходы'
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: Доп расходы
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Доп расходы USD2+2'
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: Доп расходы USD2+2
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Сумма plus МП, usd'
|
||||
dataType: double
|
||||
formatString: #,0.00
|
||||
summarizeBy: sum
|
||||
sourceColumn: Сумма plus МП, usd
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition Себестоимость = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbiProd_СебестоимостьСводныйОт2022 = Источник{[Schema="pbiProd",Item="СводныйСебестоимость Для PBI"]}[Data],
|
||||
#"Changed Type" = Table.TransformColumnTypes(pbiProd_СебестоимостьСводныйОт2022,{{"Период", type date}}),
|
||||
#"Переименованные столбцы" = Table.RenameColumns(#"Changed Type",{{"Сумма", "Сумма, руб"}}),
|
||||
Округлено = Table.TransformColumns(#"Переименованные столбцы",{{"Сумма, руб", each Number.Round(_, 5), type number}}),
|
||||
Округлено1 = Table.TransformColumns(Округлено,{{"СуммаБезНДС", each Number.Round(_, 5), type number}}),
|
||||
Округлено2 = Table.TransformColumns(Округлено1,{{"Закупка", each Number.Round(_, 5), type number}}),
|
||||
Округлено3 = Table.TransformColumns(Округлено2,{{"СуммаРучнойСкидки", each Number.Round(_, 5), type number}}),
|
||||
Округлено4 = Table.TransformColumns(Округлено3,{{"СуммаАвтоСкидки", each Number.Round(_, 5), type number}}),
|
||||
Округлено5 = Table.TransformColumns(Округлено4,{{"Закупка, usd2", each Number.Round(_, 7), type number}}),
|
||||
Округлено6 = Table.TransformColumns(Округлено5,{{"Таможня", each Number.Round(_, 5), type number}}),
|
||||
Округлено7 = Table.TransformColumns(Округлено6,{{"ЕАЭС", each Number.Round(_, 5), type number}}),
|
||||
Округлено8 = Table.TransformColumns(Округлено7,{{"Учетная цена", each Number.Round(_, 5), type number}}),
|
||||
Округлено9 = Table.TransformColumns(Округлено8,{{"Учетная цена USD2+2", each Number.Round(_, 7), type number}}),
|
||||
Округлено10 = Table.TransformColumns(Округлено9,{{"Маркетинг", each Number.Round(_, 5), type number}}),
|
||||
Округлено11 = Table.TransformColumns(Округлено10,{{"Доставка", each Number.Round(_, 5), type number}}),
|
||||
Округлено12 = Table.TransformColumns(Округлено11,{{"НДС", each Number.Round(_, 5), type number}}),
|
||||
Округлено13 = Table.TransformColumns(Округлено12,{{"Производство", each Number.Round(_, 5), type number}}),
|
||||
Округлено14 = Table.TransformColumns(Округлено13,{{"ЗатратыМП", each Number.Round(_, 5), type number}}),
|
||||
Округлено15 = Table.TransformColumns(Округлено14,{{"Учетная стоимость", each Number.Round(_, 5), type number}}),
|
||||
Округлено16 = Table.TransformColumns(Округлено15,{{"Учетная стоимость USD2+2", each Number.Round(_, 7), type number}}),
|
||||
#"Переименованные столбцы1" = Table.RenameColumns(Округлено16,{{"Сумма, руб", "Сумма plus МП, руб"}}),
|
||||
#"Удаленные столбцы" = Table.RemoveColumns(#"Переименованные столбцы1",{"id", "Code", "Ценовая группа", "Учетная стоимость", "Учетная стоимость USD2+2", "СуммаАвтоСкидки", "СуммаБезНДС", "СуммаРучнойСкидки", "Тип документа", "Номер регистратора"}),
|
||||
#"Замененное значение" = Table.ReplaceValue(#"Удаленные столбцы","-","",Replacer.ReplaceText,{"Номер заказа"}),
|
||||
#"Замененное значение1" = Table.ReplaceValue(#"Замененное значение"," ","",Replacer.ReplaceText,{"Номер заказа"}),
|
||||
#"Замененное значение2" = Table.ReplaceValue(#"Замененное значение1",null,"-",Replacer.ReplaceValue,{"Организация"}),
|
||||
#"Удаленные столбцы1" = Table.RemoveColumns(#"Замененное значение2",{"Партнер", "Сумма скидки USD2+2"}),
|
||||
Округлено17 = Table.TransformColumns(#"Удаленные столбцы1",{{"АтсМаркировка", each Number.Round(_, 5), type number}}),
|
||||
Округлено18 = Table.TransformColumns(Округлено17,{{"Приемка", each Number.Round(_, 5), type number}}),
|
||||
Округлено19 = Table.TransformColumns(Округлено18,{{"СборкаЗаказа", each Number.Round(_, 5), type number}}),
|
||||
#"Измененный тип" = Table.TransformColumnTypes(Округлено19,{{"Заказ закрыт", type date}}),
|
||||
#"Замененное значение3" = Table.ReplaceValue(#"Измененный тип","Супер пупер","АНТУРАЖ ЛТД ООО",Replacer.ReplaceText,{"Организация"}),
|
||||
#"Добавлен пользовательский объект" = Table.AddColumn(#"Замененное значение3", "Пользовательский", each [#"Сумма plus МП, руб"]/[Курс usd2]),
|
||||
#"Измененный тип1" = Table.TransformColumnTypes(#"Добавлен пользовательский объект",{{"Пользовательский", type number}}),
|
||||
#"Переименованные столбцы2" = Table.RenameColumns(#"Измененный тип1",{{"Пользовательский", "Сумма plus МП, usd"}})
|
||||
in
|
||||
#"Переименованные столбцы2"
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
114
analytics/pbi/model/report/Model/tables/Стоимость МП.tmdl
Normal file
114
analytics/pbi/model/report/Model/tables/Стоимость МП.tmdl
Normal file
@ -0,0 +1,114 @@
|
||||
table 'Стоимость МП'
|
||||
|
||||
column Период
|
||||
dataType: dateTime
|
||||
formatString: m/d/yyyy
|
||||
summarizeBy: none
|
||||
sourceColumn: Период
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
annotation PBI_FormatHint = {"isDateTimeCustom":true}
|
||||
|
||||
column 'Номер отчета комиссионера'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Номер отчета комиссионера
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column artic_id
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: artic_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Статья себестоимости'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Статья себестоимости
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Расходы МП, руб'
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: Расходы МП, руб
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Организация
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Организация
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Партнер
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: Партнер
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Курс
|
||||
dataType: double
|
||||
isHidden
|
||||
summarizeBy: sum
|
||||
sourceColumn: Курс
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column ПартнерКод
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: ПартнерКод
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Расходы МП, usd'
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: Расходы МП, usd
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
partition 'Стоимость МП-9505004b-b265-4a48-bb15-0e21468f67fc' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
#"sales_Стоимость обработки заказа" = Источник{[Schema="pbi",Item="Стоимость обработки заказа"]}[Data],
|
||||
#"Переименованные столбцы" = Table.RenameColumns(#"sales_Стоимость обработки заказа",{{"date", "Период"}}),
|
||||
#"Измененный тип" = Table.TransformColumnTypes(#"Переименованные столбцы",{{"Период", type date}}),
|
||||
#"Переименованные столбцы1" = Table.RenameColumns(#"Измененный тип",{{"Сумма", "Расходы МП, руб"}}),
|
||||
Округлено = Table.TransformColumns(#"Переименованные столбцы1",{{"Расходы МП, руб", each Number.Round(_, 5), type number}}),
|
||||
Округлено1 = Table.TransformColumns(Округлено,{{"Расходы МП, usd", each Number.Round(_, 7), type number}})
|
||||
in
|
||||
Округлено1
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
171
analytics/pbi/model/report/Model/tables/Упущенные продажи.tmdl
Normal file
171
analytics/pbi/model/report/Model/tables/Упущенные продажи.tmdl
Normal file
@ -0,0 +1,171 @@
|
||||
table 'Упущенные продажи'
|
||||
|
||||
measure '_Упущ. продажи, руб' = ```
|
||||
DIVIDE(
|
||||
CALCULATE(
|
||||
'Основной отчет'[Сумма продаж + РК, руб], FILTER('.Календарь', '.Календарь'[Дата] > DATE(2023,01,01))
|
||||
),
|
||||
SUM('Упущенные продажи'[Дней в продаже]), 0) * SUM('Упущенные продажи'[Дней отсутствия в продаже]
|
||||
)
|
||||
```
|
||||
isHidden
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure '_Упущ. продажи, usd' = ```
|
||||
DIVIDE(
|
||||
CALCULATE(
|
||||
'Основной отчет'[Сумма продаж + РК, usd], FILTER('.Календарь', '.Календарь'[Дата] > DATE(2023,01,01))
|
||||
),
|
||||
SUM('Упущенные продажи'[Дней в продаже]), 0) * SUM('Упущенные продажи'[Дней отсутствия в продаже]
|
||||
)
|
||||
```
|
||||
isHidden
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure '_Упущ. учетная, руб' = ```
|
||||
DIVIDE(
|
||||
CALCULATE(
|
||||
'Основной отчет'[Сумма учетная, руб], FILTER('.Календарь', '.Календарь'[Дата] > DATE(2023,01,01))
|
||||
),
|
||||
SUM('Упущенные продажи'[Дней в продаже]), 0) * SUM('Упущенные продажи'[Дней отсутствия в продаже]
|
||||
)
|
||||
```
|
||||
isHidden
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure '_Упущ. учетная, usd' = ```
|
||||
DIVIDE(
|
||||
CALCULATE(
|
||||
'Основной отчет'[Сумма учетная, usd], FILTER('.Календарь', '.Календарь'[Дата] > DATE(2023,01,01))
|
||||
),
|
||||
SUM('Упущенные продажи'[Дней в продаже]), 0) * SUM('Упущенные продажи'[Дней отсутствия в продаже]
|
||||
)
|
||||
```
|
||||
isHidden
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure 'Упущ. сумма учетная, руб' = SUMX('Номенклатура', [_Упущ. учетная, руб])
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure 'Упущ. сумма учетная, USD' = SUMX('Номенклатура', [_Упущ. учетная, USD])
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
measure 'Упущ. торг. надбавка, руб' = ```
|
||||
[Упущ. сумма продаж, руб] - [Упущ. сумма учетная, руб]
|
||||
```
|
||||
formatString: #,0
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
measure 'Упущ. торг. надбавка, USD' = ```
|
||||
[Упущ. сумма продаж, USD] - [Упущ. сумма учетная, USD]
|
||||
```
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column Дата
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column artic_id
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: artic_id
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Дней в продаже'
|
||||
dataType: int64
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Дней в продаже
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isDecimal":true}
|
||||
|
||||
column 'Дата первого поступления' = FIRSTDATE('Остатки'[Дата])
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
|
||||
variation Изменение
|
||||
isDefault
|
||||
relationship: 28a764af-4e8a-4c89-8ceb-304403c0d71a
|
||||
defaultHierarchy: LocalDateTable_2f146245-8120-4ed9-87dc-af8699bb0274.'Иерархия дат'
|
||||
|
||||
changedProperty = DataType
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column 'Дней отсутствия в продаже' = IF( AND ([Дней в продаже] = 0, 'Упущенные продажи'[Дата] > [Дата первого поступления]), 1, 0)
|
||||
isHidden
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column minAvailableQty
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: minAvailableQty
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column sellable_stock
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: sellable_stock
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
partition 'Упущенные продажи' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Databases("prdsql"),
|
||||
mag_pbi = Источник{[Name="mag_pbi"]}[Data],
|
||||
sales_w_ostatok_da_net = mag_pbi{[Schema="pbi",Item="w_ostatok_da_net"]}[Data],
|
||||
#"Переименованные столбцы" = Table.RenameColumns(sales_w_ostatok_da_net,{{"dt", "Дата"}, {"ostatok", "Дней в продаже"}})
|
||||
in
|
||||
#"Переименованные столбцы"
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
112
analytics/pbi/model/report/Model/tables/Я.Директ заказы.tmdl
Normal file
112
analytics/pbi/model/report/Model/tables/Я.Директ заказы.tmdl
Normal file
@ -0,0 +1,112 @@
|
||||
table 'Я.Директ заказы'
|
||||
|
||||
measure 'Торг. надбавка - расходы директ, руб' = CALCULATE([Торг. надбавка, руб] - SUM('Я.Директ расходы'[Расходы, руб]))
|
||||
formatString: #,0
|
||||
|
||||
measure 'Торг. надбавка директ - расходы директ, руб' =
|
||||
CALCULATE(
|
||||
[Сумма продаж + МП + РК, руб] - [Сумма учетная, руб] - SUM('Я.Директ расходы'[Расходы, руб]),
|
||||
FILTER(
|
||||
ALL('Я.Директ заказы'),
|
||||
NOT ISBLANK('Я.Директ заказы'[ID покупки])
|
||||
)
|
||||
)
|
||||
formatString: #,0
|
||||
|
||||
measure 'Торг. надбавка директ, руб' =
|
||||
CALCULATE(
|
||||
[Сумма продаж + МП + РК, руб] - [Сумма учетная, руб],
|
||||
FILTER(
|
||||
ALL('Я.Директ заказы'),
|
||||
NOT ISBLANK('Я.Директ заказы'[ID покупки])
|
||||
)
|
||||
)
|
||||
formatString: #,0
|
||||
|
||||
measure 'Сумма продаж директ, руб' =
|
||||
CALCULATE(
|
||||
[Сумма продаж + МП + РК, руб],
|
||||
FILTER(
|
||||
ALL('Я.Директ заказы'),
|
||||
NOT ISBLANK('Я.Директ заказы'[ID покупки])
|
||||
)
|
||||
)
|
||||
formatString: #,0
|
||||
|
||||
column 'Условия показа'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Условия показа
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'ID покупки'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: ID покупки
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Количество покупок'
|
||||
dataType: int64
|
||||
isHidden
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Количество покупок
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column key_dir
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: key_dir
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Сумма заказов директ, руб'
|
||||
dataType: double
|
||||
isHidden
|
||||
summarizeBy: sum
|
||||
sourceColumn: Сумма заказов директ, руб
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Группа директ' = FIRSTNONBLANK('Я.Директ расходы'[Группа], 'Я.Директ расходы'[Группа])
|
||||
summarizeBy: none
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
partition 'Я.Директ заказы' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_direct_orders = Источник{[Schema="pbi",Item="direct_orders"]}[Data],
|
||||
#"Разделить столбец по разделителю" = Table.SplitColumn(pbi_direct_orders, "Кампания", Splitter.SplitTextByDelimiter("N-", QuoteStyle.Csv), {"Кампания.1", "Кампания.2"}),
|
||||
#"Измененный тип" = Table.TransformColumnTypes(#"Разделить столбец по разделителю",{{"Кампания.1", type text}, {"Кампания.2", type text}}),
|
||||
#"Удаленные столбцы" = Table.RemoveColumns(#"Измененный тип",{"Кампания.1"}),
|
||||
#"Замененное значение" = Table.ReplaceValue(#"Удаленные столбцы",")","",Replacer.ReplaceText,{"Кампания.2"}),
|
||||
#"Разделить столбец по разделителю1" = Table.SplitColumn(#"Замененное значение", "Группа", Splitter.SplitTextByEachDelimiter({"("}, QuoteStyle.Csv, true), {"Группа.1", "Группа.2"}),
|
||||
#"Измененный тип1" = Table.TransformColumnTypes(#"Разделить столбец по разделителю1",{{"Группа.1", type text}, {"Группа.2", type text}}),
|
||||
#"Удаленные столбцы1" = Table.RemoveColumns(#"Измененный тип1",{"Группа.1"}),
|
||||
#"Замененное значение1" = Table.ReplaceValue(#"Удаленные столбцы1",")","",Replacer.ReplaceText,{"Группа.2"}),
|
||||
#"Вставлено: объединенный столбец" = Table.AddColumn(#"Замененное значение1", "key_dir", each Text.Combine({Text.Trim([Кампания.2]), "-", Text.Trim([Группа.2])}), type text),
|
||||
#"Добавлен пользовательский объект" = Table.AddColumn(#"Вставлено: объединенный столбец", "Доход директ, руб", each [#"Доход, руб"]/1000),
|
||||
#"Удаленные столбцы2" = Table.RemoveColumns(#"Добавлен пользовательский объект",{"Доход, руб"}),
|
||||
#"Измененный тип2" = Table.TransformColumnTypes(#"Удаленные столбцы2",{{"Доход директ, руб", type number}}),
|
||||
#"Удаленные столбцы3" = Table.RemoveColumns(#"Измененный тип2",{"Группа.2", "Кампания.2"}),
|
||||
#"Замененное значение2" = Table.ReplaceValue(#"Удаленные столбцы3","-","",Replacer.ReplaceText,{"ID покупки"}),
|
||||
#"Переименованные столбцы" = Table.RenameColumns(#"Замененное значение2",{{"Доход директ, руб", "Сумма заказов директ, руб"}})
|
||||
in
|
||||
#"Переименованные столбцы"
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
133
analytics/pbi/model/report/Model/tables/Я.Директ расходы.tmdl
Normal file
133
analytics/pbi/model/report/Model/tables/Я.Директ расходы.tmdl
Normal file
@ -0,0 +1,133 @@
|
||||
table 'Я.Директ расходы'
|
||||
|
||||
measure 'Клики директ' = CALCULATE(SUM('Я.Директ расходы'[Клики]), ALL('Я.Директ заказы'[ID покупки]))
|
||||
formatString: #,0
|
||||
|
||||
measure 'Показы директ' = CALCULATE(SUM('Я.Директ расходы'[Показы]), ALL('Я.Директ заказы'[ID покупки]))
|
||||
formatString: #,0
|
||||
|
||||
measure 'Расходы директ, руб' = CALCULATE(SUM('Я.Директ расходы'[Расходы, руб]), ALL('Я.Директ заказы'[ID покупки]))
|
||||
formatString: #,0
|
||||
|
||||
column Дата
|
||||
dataType: dateTime
|
||||
isHidden
|
||||
formatString: Long Date
|
||||
summarizeBy: none
|
||||
sourceColumn: Дата
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation UnderlyingDateTimeDataType = Date
|
||||
|
||||
column Кампания
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Кампания
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Группа
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Группа
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Условия показа'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: Условия показа
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'N условия показа'
|
||||
dataType: string
|
||||
summarizeBy: none
|
||||
sourceColumn: N условия показа
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Показы
|
||||
dataType: int64
|
||||
isHidden
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Показы
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column Клики
|
||||
dataType: int64
|
||||
isHidden
|
||||
formatString: 0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Клики
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'CTR, %'
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: CTR, %
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
column 'Расходы, руб'
|
||||
dataType: double
|
||||
isHidden
|
||||
formatString: #,0
|
||||
summarizeBy: sum
|
||||
sourceColumn: Расходы, руб
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column key_dir
|
||||
dataType: string
|
||||
isHidden
|
||||
summarizeBy: none
|
||||
sourceColumn: key_dir
|
||||
|
||||
changedProperty = IsHidden
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
column 'Ср. цена клика, руб'
|
||||
dataType: double
|
||||
summarizeBy: sum
|
||||
sourceColumn: Ср. цена клика, руб
|
||||
|
||||
annotation SummarizationSetBy = Automatic
|
||||
|
||||
annotation PBI_FormatHint = {"isGeneralNumber":true}
|
||||
|
||||
partition 'Я.Директ расходы' = m
|
||||
mode: import
|
||||
source =
|
||||
let
|
||||
Источник = Sql.Database("prdsql", "mag_pbi"),
|
||||
pbi_direct_adv_costs = Источник{[Schema="pbi",Item="direct_adv_costs"]}[Data],
|
||||
#"Измененный тип" = Table.TransformColumnTypes(pbi_direct_adv_costs,{{"Дата", type date}}),
|
||||
#"Добавлен пользовательский объект" = Table.AddColumn(#"Измененный тип", "Пользовательский", each [#"Расход, руб"]/1000),
|
||||
#"Переименованные столбцы" = Table.RenameColumns(#"Добавлен пользовательский объект",{{"Пользовательский", "Расходы, руб"}}),
|
||||
#"Удаленные столбцы" = Table.RemoveColumns(#"Переименованные столбцы",{"Расход, руб"}),
|
||||
#"Вставлено: объединенный столбец" = Table.AddColumn(#"Удаленные столбцы", "key_dir", each Text.Combine({[N кампании], "-", [N группы]}), type text),
|
||||
#"Удаленные столбцы2" = Table.RemoveColumns(#"Вставлено: объединенный столбец",{"N кампании", "N группы"}),
|
||||
#"Измененный тип1" = Table.TransformColumnTypes(#"Удаленные столбцы2",{{"Расходы, руб", type number}})
|
||||
in
|
||||
#"Измененный тип1"
|
||||
|
||||
annotation PBI_NavigationStepName = Навигация
|
||||
|
||||
annotation PBI_ResultType = Table
|
||||
|
||||
66
analytics/pbi/model/report/Report/config.json
Normal file
66
analytics/pbi/model/report/Report/config.json
Normal file
@ -0,0 +1,66 @@
|
||||
{
|
||||
"version": "5.66",
|
||||
"themeCollection": {
|
||||
"baseTheme": {
|
||||
"name": "CY20SU09",
|
||||
"type": 2,
|
||||
"version": {
|
||||
"visual": "1.8.53",
|
||||
"report": "2.0.53",
|
||||
"page": "1.3.53"
|
||||
}
|
||||
}
|
||||
},
|
||||
"activeSectionIndex": 9,
|
||||
"defaultDrillFilterOtherVisuals": true,
|
||||
"slowDataSourceSettings": {
|
||||
"isCrossHighlightingDisabled": false,
|
||||
"isSlicerSelectionsButtonEnabled": false,
|
||||
"isFilterSelectionsButtonEnabled": false,
|
||||
"isFieldWellButtonEnabled": false,
|
||||
"isApplyAllButtonEnabled": false
|
||||
},
|
||||
"linguisticSchemaSyncVersion": 2,
|
||||
"settings": {
|
||||
"useNewFilterPaneExperience": true,
|
||||
"allowChangeFilterTypes": true,
|
||||
"useStylableVisualContainerHeader": true,
|
||||
"exportDataMode": 1,
|
||||
"useEnhancedTooltips": true
|
||||
},
|
||||
"objects": {
|
||||
"section": [
|
||||
{
|
||||
"properties": {
|
||||
"verticalAlignment": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "'Top'"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"outspacePane": [
|
||||
{
|
||||
"properties": {
|
||||
"expanded": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "false"
|
||||
}
|
||||
}
|
||||
},
|
||||
"visible": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "true"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
1
analytics/pbi/model/report/Report/filters.json
Normal file
1
analytics/pbi/model/report/Report/filters.json
Normal file
@ -0,0 +1 @@
|
||||
[]
|
||||
35
analytics/pbi/model/report/Report/report.json
Normal file
35
analytics/pbi/model/report/Report/report.json
Normal file
@ -0,0 +1,35 @@
|
||||
{
|
||||
"id": 22443069,
|
||||
"layoutOptimization": 0,
|
||||
"pods": [
|
||||
{
|
||||
"boundSection": "ReportSection1ae8f92a5273f14462dd",
|
||||
"config": "{}",
|
||||
"id": 112399774,
|
||||
"name": "Pod",
|
||||
"objectId": "1cd74b08-f926-4a57-b91a-4be5e0bb83ac"
|
||||
}
|
||||
],
|
||||
"publicCustomVisuals": [],
|
||||
"reportId": 2058200,
|
||||
"resourcePackages": [
|
||||
{
|
||||
"resourcePackage": {
|
||||
"disabled": false,
|
||||
"id": 23531593,
|
||||
"items": [
|
||||
{
|
||||
"id": 139019140,
|
||||
"name": "CY20SU09",
|
||||
"path": "BaseThemes/CY20SU09.json",
|
||||
"resourcePackageId": 23531593,
|
||||
"type": 202
|
||||
}
|
||||
],
|
||||
"name": "SharedResources",
|
||||
"reportId": 2058200,
|
||||
"type": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
{
|
||||
"objects": {
|
||||
"outspacePane": [
|
||||
{
|
||||
"properties": {
|
||||
"width": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "191L"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
[]
|
||||
@ -0,0 +1,8 @@
|
||||
{
|
||||
"displayName": "Себестоимость для сверки",
|
||||
"displayOption": 1,
|
||||
"height": 720,
|
||||
"name": "ReportSection1ae8f92a5273f14462dd",
|
||||
"ordinal": 1,
|
||||
"width": 1280
|
||||
}
|
||||
@ -0,0 +1,551 @@
|
||||
{
|
||||
"name": "942443c8a4be384462a8",
|
||||
"layouts": [
|
||||
{
|
||||
"id": 0,
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": 292.24327018943171,
|
||||
"z": 1000,
|
||||
"width": 1280,
|
||||
"height": 292.24327018943171,
|
||||
"tabOrder": 1000
|
||||
}
|
||||
}
|
||||
],
|
||||
"singleVisual": {
|
||||
"visualType": "pivotTable",
|
||||
"projections": {
|
||||
"Rows": [
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.Год",
|
||||
"active": true
|
||||
},
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.Квартал"
|
||||
},
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.Месяц"
|
||||
},
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.День"
|
||||
}
|
||||
],
|
||||
"Values": [
|
||||
{
|
||||
"queryRef": "Основной отчет.Сумма плюс МП, usd"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Сумма minus Расходы МП, usd"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Торг. надбавка, usd"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Сумма учетная, usd"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Закупка, usd"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Доставка, usd"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.НДС, usd"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Таможня, usd"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Учет.Доп расходы, usd"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Сборка, usd"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Сборка из других товаров, usd"
|
||||
}
|
||||
]
|
||||
},
|
||||
"prototypeQuery": {
|
||||
"Version": 2,
|
||||
"From": [
|
||||
{
|
||||
"Name": "о",
|
||||
"Entity": "Основной отчет",
|
||||
"Type": 0
|
||||
},
|
||||
{
|
||||
"Name": "к",
|
||||
"Entity": ".Календарь",
|
||||
"Type": 0
|
||||
}
|
||||
],
|
||||
"Select": [
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Сумма продаж + РК, usd"
|
||||
},
|
||||
"Name": "Основной отчет.Сумма minus Расходы МП, usd",
|
||||
"NativeReferenceName": "Сумма, usd"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Сумма учетная, usd"
|
||||
},
|
||||
"Name": "Основной отчет.Сумма учетная, usd",
|
||||
"NativeReferenceName": "Сумма учетная, usd"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Учет.Закупка, usd"
|
||||
},
|
||||
"Name": "Основной отчет.Закупка, usd",
|
||||
"NativeReferenceName": "Закупка, usd"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Учет.Доставка, usd"
|
||||
},
|
||||
"Name": "Основной отчет.Доставка, usd",
|
||||
"NativeReferenceName": "Доставка, usd"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Учет.НДС, usd"
|
||||
},
|
||||
"Name": "Основной отчет.НДС, usd",
|
||||
"NativeReferenceName": "НДС, usd"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Учет.Таможня, usd"
|
||||
},
|
||||
"Name": "Основной отчет.Таможня, usd",
|
||||
"NativeReferenceName": "Таможня, usd"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Сборка в другие товары, usd"
|
||||
},
|
||||
"Name": "Основной отчет.Сборка, usd",
|
||||
"NativeReferenceName": "Сборка, usd"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Сборка из других товаров, usd"
|
||||
},
|
||||
"Name": "Основной отчет.Сборка из других товаров, usd",
|
||||
"NativeReferenceName": "Сборка из других товаров, usd"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Сумма продаж + МП + РК, usd"
|
||||
},
|
||||
"Name": "Основной отчет.Сумма плюс МП, usd",
|
||||
"NativeReferenceName": "Сумма плюс МП, usd"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Торг. надбавка, usd"
|
||||
},
|
||||
"Name": "Основной отчет.Торг. надбавка, usd",
|
||||
"NativeReferenceName": "Торг. надбавка, usd"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "Год"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.Год",
|
||||
"NativeReferenceName": "Дата Год"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "Квартал"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.Квартал",
|
||||
"NativeReferenceName": "Дата Квартал"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "Месяц"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.Месяц",
|
||||
"NativeReferenceName": "Дата Месяц"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "День"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.День",
|
||||
"NativeReferenceName": "Дата День"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Учет.Доп расходы, usd"
|
||||
},
|
||||
"Name": "Основной отчет.Учет.Доп расходы, usd",
|
||||
"NativeReferenceName": "Учет.Доп расходы, usd"
|
||||
}
|
||||
]
|
||||
},
|
||||
"expansionStates": [
|
||||
{
|
||||
"roles": [
|
||||
"Rows"
|
||||
],
|
||||
"levels": [
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.Год"
|
||||
],
|
||||
"isCollapsed": true,
|
||||
"identityKeys": [
|
||||
{
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Entity": "LocalDateTable_e0374236-67f4-4331-b4f5-c977a3082bab"
|
||||
}
|
||||
},
|
||||
"Property": "Год"
|
||||
}
|
||||
}
|
||||
],
|
||||
"isPinned": true
|
||||
},
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.Квартал"
|
||||
],
|
||||
"isCollapsed": true,
|
||||
"isPinned": true
|
||||
},
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.Месяц"
|
||||
],
|
||||
"isCollapsed": true
|
||||
},
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.День"
|
||||
],
|
||||
"isCollapsed": true
|
||||
}
|
||||
],
|
||||
"root": {
|
||||
"identityValues": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"drillFilterOtherVisuals": true,
|
||||
"objects": {
|
||||
"columnWidth": [
|
||||
{
|
||||
"properties": {
|
||||
"value": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "135.78525513679273D"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Сумма minus Расходы МП, usd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"value": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "115.96065779167289D"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Сборка, usd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"value": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "140.8768874231215D"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Сборка из других товаров, usd"
|
||||
}
|
||||
}
|
||||
],
|
||||
"columnFormatting": [
|
||||
{
|
||||
"properties": {
|
||||
"labelPrecision": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "2L"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Торг. надбавка, usd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"labelPrecision": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "2L"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Сумма minus Расходы МП, usd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"labelPrecision": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "2L"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Сумма плюс МП, usd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"labelPrecision": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "2L"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Сумма учетная, usd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"labelPrecision": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "2L"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Закупка, usd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"labelPrecision": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "2L"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Доставка, usd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"labelPrecision": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "2L"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.НДС, usd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"labelPrecision": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "2L"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Таможня, usd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"labelPrecision": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "2L"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Сборка, usd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"labelPrecision": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "2L"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Сборка из других товаров, usd"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
[
|
||||
{
|
||||
"name": "Filter064e79cb305a69cb0d82",
|
||||
"expression": {
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Entity": "Себестоимость"
|
||||
}
|
||||
},
|
||||
"Property": "Вид операции"
|
||||
}
|
||||
},
|
||||
"type": "Categorical",
|
||||
"howCreated": 1,
|
||||
"objects": {}
|
||||
}
|
||||
]
|
||||
@ -0,0 +1,8 @@
|
||||
{
|
||||
"height": 292.24,
|
||||
"id": 5853011910,
|
||||
"width": 1280,
|
||||
"x": 0,
|
||||
"y": 292.24,
|
||||
"z": 1000
|
||||
}
|
||||
@ -0,0 +1,476 @@
|
||||
{
|
||||
"name": "a77c8acaaa486ec307d9",
|
||||
"layouts": [
|
||||
{
|
||||
"id": 0,
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"width": 1280,
|
||||
"height": 292.64169068203654,
|
||||
"tabOrder": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"singleVisual": {
|
||||
"visualType": "pivotTable",
|
||||
"projections": {
|
||||
"Rows": [
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.Год",
|
||||
"active": true
|
||||
},
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.Квартал"
|
||||
},
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.Месяц"
|
||||
},
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.День"
|
||||
}
|
||||
],
|
||||
"Values": [
|
||||
{
|
||||
"queryRef": "Основной отчет.Сумма плюс МП, руб"
|
||||
},
|
||||
{
|
||||
"queryRef": "pbi СебестоимостьСводныйОт2022.Сумма minus Расходы МП, руб"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Торг. надбавка, руб"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Сумма учетная, руб"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Закупка, руб"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Доставка, руб"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.НДС, руб"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Таможня, руб"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Учет.Доп расходы, руб"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Сборка, руб"
|
||||
},
|
||||
{
|
||||
"queryRef": "Основной отчет.Сборка из других товаров, руб"
|
||||
}
|
||||
]
|
||||
},
|
||||
"prototypeQuery": {
|
||||
"Version": 2,
|
||||
"From": [
|
||||
{
|
||||
"Name": "о",
|
||||
"Entity": "Основной отчет",
|
||||
"Type": 0
|
||||
},
|
||||
{
|
||||
"Name": "к",
|
||||
"Entity": ".Календарь",
|
||||
"Type": 0
|
||||
}
|
||||
],
|
||||
"Select": [
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Сумма продаж + РК, руб"
|
||||
},
|
||||
"Name": "pbi СебестоимостьСводныйОт2022.Сумма minus Расходы МП, руб",
|
||||
"NativeReferenceName": "Сумма, руб"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Сумма учетная, руб"
|
||||
},
|
||||
"Name": "Основной отчет.Сумма учетная, руб",
|
||||
"NativeReferenceName": "Сумма учетная, руб"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Учет.Закупка, руб"
|
||||
},
|
||||
"Name": "Основной отчет.Закупка, руб",
|
||||
"NativeReferenceName": "Закупка, руб"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Учет.НДС, руб"
|
||||
},
|
||||
"Name": "Основной отчет.НДС, руб",
|
||||
"NativeReferenceName": "НДС, руб"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Учет.Таможня, руб"
|
||||
},
|
||||
"Name": "Основной отчет.Таможня, руб",
|
||||
"NativeReferenceName": "Таможня, руб"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Учет.Доставка, руб"
|
||||
},
|
||||
"Name": "Основной отчет.Доставка, руб",
|
||||
"NativeReferenceName": "Доставка, руб"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Сборка в другие товары, руб"
|
||||
},
|
||||
"Name": "Основной отчет.Сборка, руб",
|
||||
"NativeReferenceName": "Сборка, руб"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Сборка из других товаров, руб"
|
||||
},
|
||||
"Name": "Основной отчет.Сборка из других товаров, руб",
|
||||
"NativeReferenceName": "Сборка из других товаров, руб"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Сумма продаж + МП + РК, руб"
|
||||
},
|
||||
"Name": "Основной отчет.Сумма плюс МП, руб",
|
||||
"NativeReferenceName": "Сумма плюс МП, руб"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Торг. надбавка, руб"
|
||||
},
|
||||
"Name": "Основной отчет.Торг. надбавка, руб",
|
||||
"NativeReferenceName": "Торг. надбавка, руб"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "Год"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.Год",
|
||||
"NativeReferenceName": "Дата Год"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "Квартал"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.Квартал",
|
||||
"NativeReferenceName": "Дата Квартал"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "Месяц"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.Месяц",
|
||||
"NativeReferenceName": "Дата Месяц"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "День"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.День",
|
||||
"NativeReferenceName": "Дата День"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "о"
|
||||
}
|
||||
},
|
||||
"Property": "Учет.Доп расходы, руб"
|
||||
},
|
||||
"Name": "Основной отчет.Учет.Доп расходы, руб",
|
||||
"NativeReferenceName": "Учет.Доп расходы, руб"
|
||||
}
|
||||
],
|
||||
"OrderBy": [
|
||||
{
|
||||
"Direction": 1,
|
||||
"Expression": {
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "Год"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"expansionStates": [
|
||||
{
|
||||
"roles": [
|
||||
"Rows"
|
||||
],
|
||||
"levels": [
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.Год"
|
||||
],
|
||||
"isCollapsed": true,
|
||||
"identityKeys": [
|
||||
{
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Entity": "LocalDateTable_e0374236-67f4-4331-b4f5-c977a3082bab"
|
||||
}
|
||||
},
|
||||
"Property": "Год"
|
||||
}
|
||||
}
|
||||
],
|
||||
"isPinned": true
|
||||
},
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.Квартал"
|
||||
],
|
||||
"isCollapsed": true,
|
||||
"identityKeys": [
|
||||
{
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Entity": "LocalDateTable_e0374236-67f4-4331-b4f5-c977a3082bab"
|
||||
}
|
||||
},
|
||||
"Property": "Квартал"
|
||||
}
|
||||
}
|
||||
],
|
||||
"isPinned": true
|
||||
},
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.Месяц"
|
||||
],
|
||||
"isCollapsed": true,
|
||||
"isPinned": true
|
||||
},
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.День"
|
||||
],
|
||||
"isCollapsed": true
|
||||
}
|
||||
],
|
||||
"root": {
|
||||
"identityValues": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"drillFilterOtherVisuals": true,
|
||||
"objects": {
|
||||
"columnWidth": [
|
||||
{
|
||||
"properties": {
|
||||
"value": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "124.16443540679295D"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "pbi СебестоимостьСводныйОт2022.Сумма minus Расходы МП, руб"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"value": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "121.30268199233717D"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Сборка, руб"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"value": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "124.47509578544062D"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Сборка из других товаров, руб"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"value": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "127.2452097095206D"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.Доставка, руб"
|
||||
}
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"value": {
|
||||
"expr": {
|
||||
"Literal": {
|
||||
"Value": "100.68875966533231D"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"metadata": "Основной отчет.НДС, руб"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
[
|
||||
{
|
||||
"name": "Filter064e79cb305a69cb0d82",
|
||||
"expression": {
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Entity": "Себестоимость"
|
||||
}
|
||||
},
|
||||
"Property": "Вид операции"
|
||||
}
|
||||
},
|
||||
"type": "Categorical",
|
||||
"howCreated": 1,
|
||||
"objects": {}
|
||||
}
|
||||
]
|
||||
@ -0,0 +1,8 @@
|
||||
{
|
||||
"height": 292.64,
|
||||
"id": 5853011911,
|
||||
"width": 1280,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
{}
|
||||
@ -0,0 +1 @@
|
||||
[]
|
||||
@ -0,0 +1,8 @@
|
||||
{
|
||||
"displayName": "Закупка для сверки",
|
||||
"displayOption": 1,
|
||||
"height": 720,
|
||||
"name": "754c9d1730b0f20a23b9",
|
||||
"ordinal": 2,
|
||||
"width": 1280
|
||||
}
|
||||
@ -0,0 +1,333 @@
|
||||
{
|
||||
"name": "721f5f03ab0fa208a447",
|
||||
"layouts": [
|
||||
{
|
||||
"id": 0,
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": 360.35668789808915,
|
||||
"z": 1000,
|
||||
"width": 1200.1019108280254,
|
||||
"height": 256,
|
||||
"tabOrder": 1000
|
||||
}
|
||||
}
|
||||
],
|
||||
"singleVisual": {
|
||||
"visualType": "pivotTable",
|
||||
"projections": {
|
||||
"Values": [
|
||||
{
|
||||
"queryRef": "Закупки.Сумма закупки, usd"
|
||||
},
|
||||
{
|
||||
"queryRef": "Sum(Закупки.Закуп.Закупка, usd)"
|
||||
},
|
||||
{
|
||||
"queryRef": "Sum(Закупки.Закуп.Доставка, usd)"
|
||||
},
|
||||
{
|
||||
"queryRef": "Sum(Закупки.Закуп.Таможня, usd)"
|
||||
},
|
||||
{
|
||||
"queryRef": "Sum(Закупки.Закуп.НДС, usd)"
|
||||
},
|
||||
{
|
||||
"queryRef": "Sum(Закупки.Закуп.Производство, usd)"
|
||||
},
|
||||
{
|
||||
"queryRef": "Sum(Закупки.Закуп.Доп расходы, usd)"
|
||||
}
|
||||
],
|
||||
"Rows": [
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.Год",
|
||||
"active": true
|
||||
},
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.Квартал"
|
||||
},
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.Месяц"
|
||||
},
|
||||
{
|
||||
"queryRef": ".Календарь.Дата.Изменение.Иерархия дат.День"
|
||||
}
|
||||
]
|
||||
},
|
||||
"prototypeQuery": {
|
||||
"Version": 2,
|
||||
"From": [
|
||||
{
|
||||
"Name": "з",
|
||||
"Entity": "Закупки",
|
||||
"Type": 0
|
||||
},
|
||||
{
|
||||
"Name": "к",
|
||||
"Entity": ".Календарь",
|
||||
"Type": 0
|
||||
}
|
||||
],
|
||||
"Select": [
|
||||
{
|
||||
"Aggregation": {
|
||||
"Expression": {
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "з"
|
||||
}
|
||||
},
|
||||
"Property": "Закуп.Закупка, usd"
|
||||
}
|
||||
},
|
||||
"Function": 0
|
||||
},
|
||||
"Name": "Sum(Закупки.Закуп.Закупка, usd)",
|
||||
"NativeReferenceName": "Закуп.Закупка, usd"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "Год"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.Год",
|
||||
"NativeReferenceName": "Дата Год"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "Квартал"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.Квартал",
|
||||
"NativeReferenceName": "Дата Квартал"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "Месяц"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.Месяц",
|
||||
"NativeReferenceName": "Дата Месяц"
|
||||
},
|
||||
{
|
||||
"HierarchyLevel": {
|
||||
"Expression": {
|
||||
"Hierarchy": {
|
||||
"Expression": {
|
||||
"PropertyVariationSource": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "к"
|
||||
}
|
||||
},
|
||||
"Name": "Изменение",
|
||||
"Property": "Дата"
|
||||
}
|
||||
},
|
||||
"Hierarchy": "Иерархия дат"
|
||||
}
|
||||
},
|
||||
"Level": "День"
|
||||
},
|
||||
"Name": ".Календарь.Дата.Изменение.Иерархия дат.День",
|
||||
"NativeReferenceName": "Дата День"
|
||||
},
|
||||
{
|
||||
"Aggregation": {
|
||||
"Expression": {
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "з"
|
||||
}
|
||||
},
|
||||
"Property": "Закуп.Доставка, usd"
|
||||
}
|
||||
},
|
||||
"Function": 0
|
||||
},
|
||||
"Name": "Sum(Закупки.Закуп.Доставка, usd)",
|
||||
"NativeReferenceName": "Закуп.Доставка, usd"
|
||||
},
|
||||
{
|
||||
"Aggregation": {
|
||||
"Expression": {
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "з"
|
||||
}
|
||||
},
|
||||
"Property": "Закуп.Таможня, usd"
|
||||
}
|
||||
},
|
||||
"Function": 0
|
||||
},
|
||||
"Name": "Sum(Закупки.Закуп.Таможня, usd)",
|
||||
"NativeReferenceName": "Закуп.Таможня, usd"
|
||||
},
|
||||
{
|
||||
"Aggregation": {
|
||||
"Expression": {
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "з"
|
||||
}
|
||||
},
|
||||
"Property": "Закуп.НДС, usd"
|
||||
}
|
||||
},
|
||||
"Function": 0
|
||||
},
|
||||
"Name": "Sum(Закупки.Закуп.НДС, usd)",
|
||||
"NativeReferenceName": "Закуп.НДС, usd"
|
||||
},
|
||||
{
|
||||
"Aggregation": {
|
||||
"Expression": {
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "з"
|
||||
}
|
||||
},
|
||||
"Property": "Закуп.Производство, usd"
|
||||
}
|
||||
},
|
||||
"Function": 0
|
||||
},
|
||||
"Name": "Sum(Закупки.Закуп.Производство, usd)",
|
||||
"NativeReferenceName": "Закуп.Производство, usd"
|
||||
},
|
||||
{
|
||||
"Measure": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "з"
|
||||
}
|
||||
},
|
||||
"Property": "Сумма закупки, usd"
|
||||
},
|
||||
"Name": "Закупки.Сумма закупки, usd",
|
||||
"NativeReferenceName": "Сумма закупки, usd"
|
||||
},
|
||||
{
|
||||
"Aggregation": {
|
||||
"Expression": {
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Source": "з"
|
||||
}
|
||||
},
|
||||
"Property": "Закуп.Доп расходы, usd"
|
||||
}
|
||||
},
|
||||
"Function": 0
|
||||
},
|
||||
"Name": "Sum(Закупки.Закуп.Доп расходы, usd)",
|
||||
"NativeReferenceName": "Закуп.Доп расходы, usd"
|
||||
}
|
||||
]
|
||||
},
|
||||
"expansionStates": [
|
||||
{
|
||||
"roles": [
|
||||
"Rows"
|
||||
],
|
||||
"levels": [
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.Год"
|
||||
],
|
||||
"isCollapsed": true,
|
||||
"identityKeys": [
|
||||
{
|
||||
"Column": {
|
||||
"Expression": {
|
||||
"SourceRef": {
|
||||
"Entity": "LocalDateTable_e0374236-67f4-4331-b4f5-c977a3082bab"
|
||||
}
|
||||
},
|
||||
"Property": "Год"
|
||||
}
|
||||
}
|
||||
],
|
||||
"isPinned": true
|
||||
},
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.Квартал"
|
||||
],
|
||||
"isCollapsed": true,
|
||||
"isPinned": true
|
||||
},
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.Месяц"
|
||||
],
|
||||
"isCollapsed": true
|
||||
},
|
||||
{
|
||||
"queryRefs": [
|
||||
".Календарь.Дата.Изменение.Иерархия дат.День"
|
||||
],
|
||||
"isCollapsed": true
|
||||
}
|
||||
],
|
||||
"root": {
|
||||
"identityValues": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"drillFilterOtherVisuals": true
|
||||
}
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
[]
|
||||
@ -0,0 +1,8 @@
|
||||
{
|
||||
"height": 256,
|
||||
"id": 5853011909,
|
||||
"width": 1200.1,
|
||||
"x": 0,
|
||||
"y": 360.36,
|
||||
"z": 1000
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user