Урок 13 · 15 мин чтения

Знаки и сворачивание — почему SUM врёт

Дебет и кредит, нормальное сальдо и контрарные счета превращают наивный SUM по сумме проводок в бессмыслицу. Как задать знак в измерении статей, свернуть обороты в читаемый P&L через SUMX и собрать подытоги с переворотом знака расходов — на DAX.

Самая частая и самая незаметная ошибка в финансовом дашборде — просуммировать колонку «Сумма» из проводок. Результат выглядит как число, отчёт собирается, никто не спорит — а цифра неверна. Разберём, почему, и как сворачивать финансовые данные правильно.

Идея урока

Понять, почему знак суммы зависит от стороны счёта и его типа, и освоить технику: знак как атрибут измерения статей + агрегация через SUMX с учётом знака. Это превращает сырые обороты в читаемый отчёт с корректными подытогами.

Почему наивный SUM бессмысленен

Вспомним урок 06: в проводке Дт счёт — Кт счёт — сумма одна и та же сумма означает противоположное для двух счетов. Выручка живёт по кредиту 90.01, себестоимость — по дебету 90.02. В выгрузке оборотов это могут быть строки с положительной «суммой» по обеим — но экономически одна прибавляет, другая вычитает.

`SUM(Обороты[Сумма])` складывает несложимое

Если просто сложить «Сумму» по всем оборотам счёта 90, вы сложите выручку с себестоимостью как однознаковые числа — получится бессмыслица, а не прибыль. То же с балансом: сложить дебетовые сальдо активов с кредитовыми сальдо пассивов «в лоб» нельзя. Знак операции определяется типом счёта и стороной (дебет/кредит), а не присутствует в колонке суммы. Поэтому финансовую агрегацию строят не на SUM, а на сумме произведений «сумма × знак».

Знак как атрибут измерения

Решение — хранить знак в справочнике статей (из прошлого урока), а не вычислять на лету. Каждой статье отчёта приписан Знак (+1 для того, что увеличивает результат; −1 для того, что уменьшает):

СтатьяЗнак
Выручка+1
Себестоимость−1
Коммерческие расходы−1
Управленческие расходы−1
Прочие доходы+1
Проценты к уплате−1

Базовая мера P&L сворачивает обороты с учётом знака:

Результат P&L =
SUMX (
    Обороты,
    Обороты[Сумма] * RELATED ( Статьи[Знак] )
)
SUMX строка-за-строкой, а не SUM по колонке

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 — следующий урок.

Почему финансовую прибыль считают через SUMX(Обороты, Сумма × Знак), а не через SUM(Сумма)?
В проводках сумма хранится модулем, а экономический знак (доход +, расход −, контрарный счёт −) определяется типом статьи. SUMX умножает сумму каждой строки на знак из измерения статей и складывает — получая корректный результат на любом уровне. Обычный SUM сложил бы несложимое и дал бессмыслицу.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

Нужно внедрить
это в компании?

Соберём DWH, модель и дашборды под ваши данные. Бесплатная консультация — 30 минут.

Телефон+7 918 042 34 43