Самая частая и самая незаметная ошибка в финансовом дашборде — просуммировать колонку «Сумма» из проводок. Результат выглядит как число, отчёт собирается, никто не спорит — а цифра неверна. Разберём, почему, и как сворачивать финансовые данные правильно.
Понять, почему знак суммы зависит от стороны счёта и его типа, и освоить технику: знак как атрибут измерения статей + агрегация через SUMX с учётом знака. Это превращает сырые обороты в читаемый отчёт с корректными подытогами.
Почему наивный SUM бессмысленен
Вспомним урок 06: в проводке Дт счёт — Кт счёт — сумма одна и та же сумма означает противоположное для двух счетов. Выручка живёт по кредиту 90.01, себестоимость — по дебету 90.02. В выгрузке оборотов это могут быть строки с положительной «суммой» по обеим — но экономически одна прибавляет, другая вычитает.
Если просто сложить «Сумму» по всем оборотам счёта 90, вы сложите выручку с себестоимостью как однознаковые числа — получится бессмыслица, а не прибыль. То же с балансом: сложить дебетовые сальдо активов с кредитовыми сальдо пассивов «в лоб» нельзя. Знак операции определяется типом счёта и стороной (дебет/кредит), а не присутствует в колонке суммы. Поэтому финансовую агрегацию строят не на SUM, а на сумме произведений «сумма × знак».
Знак как атрибут измерения
Решение — хранить знак в справочнике статей (из прошлого урока), а не вычислять на лету. Каждой статье отчёта приписан Знак (+1 для того, что увеличивает результат; −1 для того, что уменьшает):
| Статья | Знак |
|---|---|
| Выручка | +1 |
| Себестоимость | −1 |
| Коммерческие расходы | −1 |
| Управленческие расходы | −1 |
| Прочие доходы | +1 |
| Проценты к уплате | −1 |
Базовая мера P&L сворачивает обороты с учётом знака:
Результат P&L =
SUMX (
Обороты,
Обороты[Сумма] * RELATED ( Статьи[Знак] )
)
SUMX проходит каждую строку оборотов, умножает сумму на знак её статьи и складывает. Выручка входит с +, расходы с − — и на любом уровне иерархии (статья, группа, итог) получается корректный результат. Это и есть «переворот знака расходов»: в данных всё лежит модулем, а знак подтягивается из измерения. Один раз настроили справочник — и все подытоги считаются верно автоматически.
Контрарные счета — тот же приём
Амортизация (02), резерв по дебиторке (63), резерв под запасы (14) — контрарные: они уменьшают связанный актив. В балансовой модели им задают знак −1 относительно их «хозяина», и нетто-стоимость собирается тем же SUMX:
Балансовая стоимость =
SUMX (
Остатки,
Остатки[Сальдо] * RELATED ( Статьи[Знак] )
)
Так ОС показываются как 01 − 02, дебиторка как 62 − 63, запасы как склад − 14 — без ручных вычитаний в каждом визуале.
Подытоги и переворот знака — без жёстко зашитых формул
Наивный подход к подытогам — писать отдельные меры: [Валовая прибыль] = [Выручка] - [Себестоимость], [Прибыль от продаж] = [Валовая] - [Коммерч] - [Управл]. Это работает, но плохо масштабируется и ломается при изменении структуры отчёта.
Если знак зашит в измерение, а статьи упорядочены (колонка «Порядок» из прошлого урока), то одна мера [Результат P&L] на матрице с иерархией статей сама даёт правильные значения на каждом уровне: на строке «Выручка» — выручку, на «Себестоимость» — со знаком минус, на группе «Валовая прибыль» — их сумму. Промежуточные итоги-«заголовки» (валовая прибыль, прибыль от продаж) добавляют в справочник как строки-подытоги с признаком уровня. Это устойчивее, чем десяток ручных мер, и переживает изменение структуры отчёта.
Для нарастающих подытогов сверху вниз (каждая строка = всё, что выше) используют накопление по порядку:
Накопленный итог P&L =
VAR ТекПорядок = MAX ( Статьи[Порядок] )
RETURN
CALCULATE (
[Результат P&L],
FILTER ( ALL ( Статьи ), Статьи[Порядок] <= ТекПорядок )
)
Знаки в визуале: показываем по-человечески
В данных расход хранится со знаком −1, но руководителю расходы обычно показывают положительным числом в колонке «Расходы», а минус используют только в водопадах и подытогах. Это вопрос форматирования и раскладки, а не данных: модель считает со знаком, а визуал решает, как его отрисовать (цветом, скобками, направлением столбца водопада).
Соблазн — в одном визуале умножить на −1 «руками», потому что «тут не так смотрится». Так знаки расходятся между визуалами, и сходимость отчёта (баланс, прибыль→капитал из урока 05) ломается. Знак живёт в одном месте — в измерении статей. Если где-то «не так смотрится», правят справочник или формат, а не отдельный визуал.
Как это проверить
Тот самый встроенный тест из урока 05: если знаки заданы верно, мера [Результат P&L] на уровне «Чистая прибыль» совпадёт с приростом нераспределённой прибыли (за вычетом дивидендов), а сумма активов по балансовой мере сойдётся с суммой пассивов. Не сходится — почти всегда перепутан знак или контрарный счёт посчитан как обычный.
Что дальше
Знаки и сворачивание — фундамент. Над ним строятся собственно финансовые меры: план-факт и отклонения, динамика к прошлому периоду, нарастающий итог и — отдельная больная тема — почему проценты и маржу нельзя суммировать. Всё это на DAX — следующий урок.