Вот точка, где сходятся два мира курса. Слева — план счетов, проводки и обороты из учёта. Справа — звезда, меры и иерархии в Power BI. Аналитик, который не умеет навести этот мост, либо строит технически грамотную модель на неверно понятых данных, либо знает финансы, но не может уложить их в модель. Этот урок — собственно мост.
Спроектировать финансовую модель данных: факт-таблица из оборотов/остатков, измерение «статья» как parent-child иерархия, субконто как измерения. И понять ключевое: отчётная иерархия P&L — это не план счетов, её строят отдельно.
Что является фактом, а что измерением
Источник — выгрузка проводок или оборотно-сальдовая ведомость с аналитикой. Раскладываем её по схеме «звезда»:
Факт — это движение: одна строка = дата + счёт (+ субконто) + сумма оборота (или остаток на дату). Мера — сумма. Измерения — это контекст движения: календарь, статья/счёт, контрагент, номенклатура, подразделение, сценарий (факт/план). Субконто из учёта (см. урок 06) становятся ключами измерений. Звезда: в центре факт оборотов, вокруг — справочники.
Минимальная финансовая модель:
Календарь Сценарий (Факт/План/Прошлый год)
| |
v v
[ Факт: Обороты ] -- дата, КодСчёта, КодКонтрагента,
^ ^ КодНоменклатуры, Сценарий, Сумма
| |
ПланСчетов Контрагенты ... (прочие субконто)
(parent-child)
Из урока 06: баланс — это остатки (сальдо на дату), ОФР и ДДС — обороты за период. Это разная природа: остаток не суммируется по времени (нельзя сложить остаток на январь и февраль), оборот — суммируется. В модели их держат либо разными факт-таблицами, либо одной с признаком типа, но никогда не агрегируют одной и той же мерой по времени без разбора. Остаток по периодам берут как «значение на конец» (последнее), оборот — как сумму.
План счетов — это parent-child иерархия
Счета вложены: 90 «Продажи» → 90.01 «Выручка», 90.02 «Себестоимость», 90.03 «НДС». 01, 02, 41 — сами по себе. Это классическая иерархия родитель-потомок (parent-child): у каждого счёта есть родитель, глубина переменная.
В Power BI parent-child разворачивают функциями PATH. Допустим, в измерении ПланСчетов есть КодСчёта и КодРодителя:
Путь =
PATH ( ПланСчетов[КодСчёта], ПланСчетов[КодРодителя] )
Уровень1 = PATHITEM ( ПланСчетов[Путь], 1 )
Уровень2 = PATHITEM ( ПланСчетов[Путь], 2 )
Уровень3 = PATHITEM ( ПланСчетов[Путь], 3 )
ГлубинаСчёта = PATHLENGTH ( ПланСчетов[Путь] )
Колонки Уровень1..N дают иерархию для матрицы, а PATHCONTAINS позволяет в мере собрать все обороты по счёту вместе с дочерними. Но для финансовой отчётности этого мало — и вот почему.
Главное: отчётная иерархия ≠ план счетов
План счетов сделан для бухгалтерии, а не для управленческого отчёта. В ОФР строки идут в своём порядке (Выручка → Себестоимость → Валовая прибыль → Коммерческие → …), с промежуточными итогами, которых в плане счетов нет, и со сменой знака. Поэтому профессиональная модель содержит отдельное измерение «Статья отчёта» — управленческую карту, которая сопоставляет каждый счёт/субсчёт со строкой отчёта, её порядком, уровнем и знаком. Это таблица-мэппинг, и она — сердце финансовой модели.
Пример строк такого справочника статей:
| КодСчёта | Статья отчёта | Порядок | Уровень | Знак | Тип |
|---|---|---|---|---|---|
| 90.01 | Выручка | 10 | 1 | +1 | оборот |
| 90.02 | Себестоимость | 20 | 1 | −1 | оборот |
| (итог) | Валовая прибыль | 30 | 0 | подытог | |
| 44 | Коммерческие расходы | 40 | 1 | −1 | оборот |
| 26 | Управленческие расходы | 50 | 1 | −1 | оборот |
| (итог) | Прибыль от продаж | 60 | 0 | подытог |
Если строки отчёта сортировать по алфавиту (как Power BI делает по умолчанию для текста), «Выручка» окажется в середине, а не сверху. Управленческий отчёт требует смыслового порядка. Поэтому в справочнике статей всегда есть числовая колонка «Порядок сортировки», по которой настраивают Sort by column. Это мелочь, которую забывают, и отчёт выглядит сломанным.
Что взять оборотом, что остатком — по отчётам
- ОФР (P&L): обороты счетов 90, 91 (за вычетом внутренних) → строки доходов и расходов. Знак: доходы +, расходы −.
- Баланс: конечные сальдо постоянных счетов (01, 02, 10, 41, 60, 62, 80, 84…), в нетто-оценке (контрарные вычитаются). Берётся как «остаток на конец периода», не сумма.
- ДДС: обороты денежных счетов (50, 51, 52) с разбивкой по корзинам (операц./инвест./фин.) — либо прямым методом из аналитики платежей, либо косвенным из ΔБаланса.
Минимальный набор измерений финансовой модели
- Календарь — обязательно отдельная таблица дат (для time intelligence).
- Статья отчёта — управленческая карта статей (порядок, уровень, знак, тип).
- План счетов — parent-child, если нужен «бухгалтерский» разрез.
- Сценарий — Факт / План / Прошлый год / Прогноз (для план-факта).
- Субконто — Контрагент, Номенклатура, Подразделение, ЦФО — то, что есть в источнике.
Повторим из урока 06: если в учёте не вели аналитику по нужному разрезу (например, по каналам продаж), ни одна модель его не восстановит. Аудит доступной аналитики — первый шаг проекта, до проектирования звезды.
Что дальше
Мы упомянули знак (+1/−1) у статей мимоходом — но это отдельная большая тема. Почему обычный SUM по финансовым данным почти всегда врёт, как переворот знака расходов превращает план счетов в читаемый P&L, и как сворачивать обороты корректно — следующий урок.