Русский
Русский
English
Статистика
Реклама

Бюджетирование

Семейный бюджет, Google sheets и Python

24.02.2021 10:16:44 | Автор: admin

Привет Хабр!

Сегодня расскажу еще одну историю из своей жизни - в этот раз не про свой чудо-сервер в двух частях, а про что-то более приземленное, но так или иначе связанное с технологиями. По моему субъективному мнению подсчет личных финансов крайне полезное занятие и я очень надеюсь, что данная статья замотивирует вас или поможет вам начать считать деньги и не влезать в кредиты и т.п.

Собственно речь пойдет о том, как мы с супругой ведем семейный бюджет, как к этому пришли и о планах на будущее.

Стоит сразу написать, что я не претендую на роль финансиста, программиста, бухгалтера и т.п., наш способ ведения семейного бюджета не является идеальным, вероятно для вас он будет не применим, но нам так удобно.

Немного предистории.

Первые мысли о том, что хорошо бы знать сколько денег на какие расходы уходит и понимать, где можно сократить расходы, а где не получится, появились в 2013 году. Цель была самая что ни наесть обычная, как у всех, накопить и приобрести собственное жилье.

Первым делом я определил требования к возможностям ПО:

  1. Возможность заполнять расходы как с ПК, так и со смартфона.

  2. Одновременное редактирование данных текущего месяца без блокировки файла.

  3. Синхронизация данных через интернет (я хотел чтобы данные автоматически синхронизировались между 2мя ПК и 2мя смартфонами).

  4. Возможность резервного копирования на привычный ПК/в Excel.

Некоторое время я искал именно программу которая будет соответствовать всем этим требованиям, или хотя бы их части, но как в итоге оказалось Google Spreadsheets лучше всего (на мой взгляд) подходил под мои желания.

В итоге 1 января 2014 года было положено начало учета семейных расходов и доходов:

Январь 2014 годаЯнварь 2014 года

Таблица выглядит конечно жутко - ни нормального форматирования, ни выделения цветом, да и статьи расхода/дохода (каждый отдельный лист - это статья) не особенно информативны.

Сумма в 10 320 руб за месяц на еду на двоих сейчас кажется каким-то сюром, а в начале 2014 мы особо ни в чем себе не отказывали - и сыр, и колбаса на столе тогда бывали импортными

Кстати самым сложным этапом в подготовке к ведению семейного бюджета было уговорить супругу взять на себя часть этого процесса - помой, убери, приготовь, а теперь еще и чеки записывай, ух, долго мы общались на тему необходимости и полезности этого занятия.

Сложно было первые 2 месяца - очень не хотелось тратить время на заполнение таблицы, хоть я и старался какие-то единичные покупки (такие как обед на работе, или поход к врачу) записывать сразу с телефона, но вот перебить чек из магазина, раскидав товары по статьям, уже действительно напрягало.

Опять же, хоть Google Spreadsheets и поддерживает ввод данных оффлайн (например с телефона пока едешь в метро), но работало в 2014 году это так себе, с вылетами приложения и периодическими исчезновением заполненных строк, в итоге офлайн я старался не заполнять.

Но примерно через 2 месяца заполнение табличек вошло в привычку и стало даже нравится, особенно проводить ретроспективу расходов и обсуждение моментов для оптимизации.

К концу года папочка на Google Drive выглядела так:

Файлы в конце 2014 годаФайлы в конце 2014 года

Сейчас сижу и думаю, почему в первый год я не создал сводную таблицу по всем месяцам, хм

Но как видно к 2015 году такая мысль меня уже посетила ровно как и то, что название файлов лучше делать по японской модели даты (YYYY.MM):

Полный 2015 годПолный 2015 год

Из интернетов:Наиболее часто используемый формат даты в Японии - год, месяц, день (день недели) , при этом японские символы, означающие год, месяц и день, вставляются после цифр . Пример: 2008 12 31 () для Среда, 31 декабря 2008 г..

В 2015 году внешний вид таблиц особо не изменился, но вот затраты на еду выросли в 2 раза, примерно как курс рубля к грязной зеленой бумажке:

Никакого больше пармезана, теперь кушаем российский сыр по цене дороже итальянского.Никакого больше пармезана, теперь кушаем российский сыр по цене дороже итальянского.

Деньги Деньги дребеденьги.

Переходим к откровенным скриншотам, особо впечатлительным и жадным до чужих денег просьба отползти от экранов:

Интересно, а за 30 лет можно накопить на квартиру в Москве?!Интересно, а за 30 лет можно накопить на квартиру в Москве?!

С 2014 года наши расходы выросли примерно в 2 раза (в рублевом выражении, в долларах даже немного упали), причин тому несколько.

У нас подрастал первый ребенок и появлялись новые расходы - начиная с памперсов, заканчивая платной медициной (что хотите пишите, но на наш с супругой взгляд в РФ медицина только платная, по ОМС лучше не ходить если есть такая возможность).

В Июне мы приобрели второй автомобиль Hyundai Getz 2008 года, оказалось с ребенком все же лучше иметь 2 авто в семье (здравствуй жизнь в заМКАДье, метро появится только через пару лет, хотя обещали аж в 1985 году). Не раз получалось, что уехав на работу я оставлял супругу с ребенком без возможности комфортно выехать хоть в магазин, хоть к врачу.

Ну и в Июле мы слетали в Турцию аж за 82 тысячи рублей + 20 тыс рублей брали с собой наличными (естественно переведя в доллары).

Итого за 2015 год мы отложили баснословные 135 рублей 65 копеек, кто-то скажет, что с жиру бесимся и так далее, но опять же по нашему убеждению наши траты ну никак не выходят за рамки разумного для семьи, где оба родителя имеют высшее образование и один из них работает в области ИТ в очень неплохой компании.

Опять же многие мои знакомые, которые не считали расход/доход, были очень удивлены, когда я все-таки убедил их заняться этим хотя бы на 2-3 месяца - в самом деле цифры на бумаге просто шокируют, когда не считаешь траты, всё воспринимается совсем иначе.

Шло время, таблица постепенно видоизменялась и модернизировалась, в отдельную папку были выведены расходы по автомобилям, с разбивкой на статьи:

Многовато файлов, надо автоматизировать!Многовато файлов, надо автоматизировать!

Файл для учета расходов на автомобиль выглядит примерно так:

Но самое большое изменение было в итоговом файле, помимо раскрашивания цветом денежного потока и % отложенного на конец месяца, появился лист со сводной таблицей всех статей расхода и дохода из всех файлов, заполнять его конечно не просто, но делается это один раз в год и требует примерно 30 минут моего времени.

Тут без цифр, уж извините NDA действует 3 года, но зато покажу вам оставшийся % от общего дохода, как бы мы все же стараемся экономитьТут без цифр, уж извините NDA действует 3 года, но зато покажу вам оставшийся % от общего дохода, как бы мы все же стараемся экономитьРазбивка по статьям.Разбивка по статьям.

Собственно лист расходов по статьям. Доходы закрыты привет NDA, единственное, на что хочу обратить ваше внимание, что их источников несколько. Наша логика такова, что нужно не налегать всеми силами на экономию, а стараться увеличивать доходы и диверсифицировать их источники.

В конце статьи будут ссылки на все шаблоны таблиц, а сейчас предлагаю перейти к части про Python и Телеграм.

Telegram-bot на Python

Собственно примерно в сентябре 2020 я решил, что надо бы вернуться к python, а то совсем забросил его, а задачки на leetcode и codewars уже надоели, хотелось сделать что-то более осязаемое. И тут пришла в голову мысль - а не сделать ли Телеграм-бота, который будет по сообщению заполнять расход (через гугл-таблицы на телефоне не всегда удобно да и вообще будет весело).

Опять же небольшой дисклеймер.

Результат моего труда скорее MVP, код УГ, автор как водится и так далее по тексту, но делал я его на коленке за 3-4 неполных дня из которых больше времени ушло на изучение документации api google spreadsheets и telegram.

Началось все с простого изучения интернетов Ок Google: Как написать ТГ-бота

Довольно быстро я понял, что почти везде делают ТГ-бота, который просматривает обновления в чате постоянным обращением к API (polling) - из плюсов можно начинать разрабатывать сразу у себя на ПК, без плясок с бубном, зарегистрировали бота и сразу подписываемся из IDE на его окно чата.

Но как истинный джедай я решил, что надо сразу делать на webhookах, т.к. записывать что-либо через бота я буду довольно редко, а супруга скорее всего вообще не будет им пользоваться, так что постоянно спамить запросы к API нецелесообразно.

Потратив некоторое время на поиск решения я нашел довольно элегантный путь всего в 3 шага. Я думаю многим знаком сервис ngrok - для чего-то серьезного он вряд ли подойдет, но быстренько сделать себе туннель для локальной разработки можно.

Денег за рекламу они не платили, так что вот несколько альтернатив:Localtunnel - https://localtunnel.github.io/www

Teleconsole - https://www.teleconsole.com/Pagekite - https://pagekite.net/

После запуска вы получаете адрес вида: http://1c0306c9372f.ngrok.io и редирект запросов с него на ваш localhost с указанным портом при запуске:

Консоль с запущенным ngrokКонсоль с запущенным ngrok

В итоге при обращении на указанный адрес наши запросы будут попадать к нашему локальному боту (запущенному хоть из IDE PyCharm/VSCode), который в свое время будет общаться с ТГ API по токену.

Данный URL необходимо зарегистрировать в Telegram API примерно следующим образом:https://api.telegram.org/bot{my_bot_token}/setWebhook?url={url_to_send_updates_to}

А вообще RTFM.https://core.telegram.org/bots/api#setwebhook

Для того чтобы бот сидел и слушал входящие запросы я решил использовать Flask.

Для работы с Telegram API я использую готовую библиотеку telebot (зачем изобретать велосипед если он уже есть и очень даже ничего).

Аналогично и с Google SpreadSheets - есть готовая библиотека gspread с очень широким функционалом.

Для обеспечения минимальной безопасности используется библиотека SSLify и импорт токенов из соседнего файла .env

Выглядит это так:

Начало нашего ботаНачало нашего бота

Собственно в самом начале python-файла мы импортируем все необходимые библиотеки.

Далее функция load_dotenv() производит загрузку переменных из операционной системы (или лежащего рядом файлика .env) - сделано это для обеспечения минимальной безопасности.

Так как для работы с Google SpreadSheets нам необходим Service account с json-токеном, а для телеграм бота API-ключ, которые по сути обеспечивают полный доступ к нашим файлам (которые мы предварительно расшарили на этот сервисный аккаунт) и к нашему ТГ-боту, то следует скрыть их от посторонних глаз в переменных ОС или файле .env.

Сначала я хотел добавить в статью описание как получить API token для Telegram и Google API, но статья и так получилась большая, поэтому кусок с инструкциями я решил удалить.

Основное меню бота.

При вводе команды /Start или /Help бот выведет следующее меню:

Главное меню. ТелеграмГлавное меню. Телеграм

Как видим здесь перечислены все команды, которые бот поддерживает на данный момент, генерируется это сообщение следующим кодом:

Главное меню. Код.Главное меню. Код.

На 167 строке у нас расположился декоратор от библиотеки telebot - здесь происходит считывание команды Start или Help из входящего сообщения к боту.

Если команда распознана, то происходит запуск функции handle_start_help на 168 строке (да, я не особо заморачивался с названиями).

172 строка проверяет ID-пользователя (в данный момент я разрешил пользоваться им только себе). В идеале когда-нибудь конечно же стоит прикрутить к боту sql и проверку соответствия учетки ТГ в sql к нужному google service account и маске наименования файлов, правам чтения и записи и т.д. и т.п.

174 строка собственно отправляет в чат сообщение с текстом (для отправки мы снова обращаемся к библиотеке telebot).

На 184 строке задано условие, которое отправит вам в чат сообщение о запрете использования бота, если ваш ID отличается от моего.

Чаще всего я пользуюсь функцией добавления покупки в текущий месяц, для этого использую функцию add_current_month_expense:

Функция добавление покупки. Шаг первый.Функция добавление покупки. Шаг первый.

Помимо уже известного нам декоратора, ожидающего теперь команду /AddExpenseToCurrentMonth или ее аббревиатуру /AECM и проверки на ID-пользователя, от которого эта команда была получена, теперь еще задействуется функционал Google Spreadsheets и библиотека gspread.

234 строка - открывает документ текущего месяца. Так как все файлы у меня сейчас называются однотипно по маске YYYY.MM Family budget, то легко сформировать название файла с помощью функции datem.today().strftime("%Y.%m") и добавить текст " Family budget".

235 строка - создает список из листов документа.

236 строка - убирает 2 последних элемент (ими являются лист с общим балансом за месяц и лист с другими доходами, такими как продажа вещей на авито и т.п.)

Строки 238-239 - это цикл, который создает будущее сообщение бота со списком категорий (листов) и присваивает им номера (см скрин ниже).

240 отправка сообщения от бота пользователю с разбивкой получившихся ранее строк через \n - с новой строки.

241 строка - это вывод сообщения пользователю о необходимости выбора категории затраты и ожидание ответа от пользователя.

242 запуск следующей функции с передачей ей полученного сообщения от пользователя и списка листов.

Шаг второй, выбор категории.Шаг второй, выбор категории.

По какой-то причине я не сделал сразу ввод и парсинг категории и самой покупки в первом же сообщении, но уже как есть.

На 254 строке мы присваиваем переменной category_num цифру, полученную из текста сообщения пользователя, переводя ее в тип interger и отнимаем единицу т.к. список наш все же начинается с 0.

Дальше начинается блок try except - в случае некорректного ввода номера категории будет выведено сообщение об ошибке:'ERROR!\nCategory ' + str(message.text) + ' not found!\nTry once more!'

И повторный запрос ввода категории. Бот будет вас спрашивать пока не дождется правильного ввода (тут тоже надо подумать на предмет либо таймаута, либо количества попыток для возврата к изначальному меню, хотя можно просто ввести команду /start и начать ввод заново).

Вот так это выглядит в чате ТелеграмВот так это выглядит в чате Телеграм

Если же категория была выбрана корректно то мы попадаем в условие if.

257 строка выводит нам сообщение с номером выбранной нами категории и именем листа, полученного из списка по индексу.

После чего на 259 строке бот ответит нам с просьбой ввести Название нашей покупки и стоимость в формате название:цена.

Знак : будет использован как разделитель для дальнейшего парсинга.

Введя название покупки, ее стоимость и отправив сообщение боту происходит запуск следующей функции add_current_month_expense_input_string, передав в нее сообщение и номер категории.

Шаг третий, заносим данные в таблицы.Шаг третий, заносим данные в таблицы.

При должном старании и потратив некоторое время подозреваю, что эту функцию можно сократить раза в два, но текущий вариант такой, как на скриншоте.

281 строка формирует список из 2х элементов определив их с помощью знака : .

Далее у нас следует проверка на длину получившегося списка - если в нем 2 элемента, то запускается процедура заполнения полей, если элементов меньше или больше 2х, то будет выведено сообщение об ошибке и предложено ввести покупку в корректном формате, по аналогии с предыдущей функцией.

В остальном начинается все также - открываем документ, берем текущую дату, переходим на нужный лист, но далее на 287 строке мы обращаемся к функции next_available_row, которая вернет нам следующую пустую строку на листе, где мы и будем заполнять наше значение.

Пробежимся быстро по ней:

31 строка - присваиваем переменной i общее количество колонок в документе.

32 строка - создаем пустой список.

Пока i больше 0 мы перечитываем все значения полученные из каждой колонки, отфильтровав None - что означает, что ячейка пустая, добавляем единицу и присваиваем получившееся число переменной result.

После чего на 35 строке наполняем список result_list получившимися значениями result.

36 строка - счетчик наших колонок, отнимаем 1 т.к. мы обработали 1 колонку, собственно это происходит до момента, пока не будут обработаны все имеющиеся колонки на листе.

Строка 37 - сортируем получившийся список от наименьшего к наибольшему числу.

Строка 38 - присваиваем значение последнего элемента списка (наибольшую цифру) переменной empty_row

На 39 строке мы присваиваем переменной last_row - значение предпоследней строки на листе.

А дальше проверяем, если last_row не пустой, то добавляем еще 5 строк или сразу присваиваем значение переменной empty_row номер последней строки с данными + 1.

После чего возвращаем значение переменной empty_row в данном случае в функцию add_current_month_expense_input_string. И все это ради того, чтобы узнать где же у нас там пустая строка на листе.

Строки 288-308 необходимы для предварительного форматирования ячеек в нужный формат, стоит кстати вынести их в отдельную функцию, надо записать себе.

309 строка - вносим значение первого элемента из списка input_list в ячейку А+номер пустой строки.

310 строка - проставляем сегодняшнюю дату в ячейку B+номер пустой строки.

311 строка - вносим значение второго элемента из списка input_list в ячейку C+номер пустой строки.

312 строка нужна для считывания строки, которая получилась после ввода данных и отправки пользователю сообщения, в качестве подтверждения результата ввода с содержимым строки.

Как то так.Как то так.

На этом заканчивается путь ввода покупки для текущего месяца.

В рамках данной статьи мы не будем рассматривать все функции реализованные в коде на данный момент, я лишь кратко опишу до чего у меня дошли руки.

"/start or /help" - Отображение списка поддерживаемых команд.

"/CurrentMonthBalance or /CMB" - Показать баланс за текущий месяц, общий доход, расход и их разницу.

"/DefinedMonthBalance or /DMB" - Показать баланс за указанный месяц/год, общий доход, расход и их разницу.

"/CurrentMonthExpenseByCategory" - Показать детализацию расходов с разбивкой по категориям за текущий месяц.

"/ExactMonthExpenseByCategory" - Показать детализацию расходов с разбивкой по категориям за указанный месяц/год.

"/AddExpenseToCurrentMonth or /AECM" - Добавить покупку в текущий месяц.

"/AddExpenseToDefinedMonth or /AEDM" - Добавить покупку к указанному месяцу/году.

"/FormatDefinedFile or /FDF" - отформатировать весь указанный документ по заданному шаблону колонок содержащих цены, даты и т.п. Используется для исправления форматирования после копипастов, чтобы не делать это руками.

Что еще есть в задумках:

  • Рефакторинг кода для уменьшения повторяющихся действий в функциях.

  • Возможно руки дойдут до переработки в ООП.

  • Функция создания файлов на весь год вперед с перелинковкой на итоговый документ (сейчас ссылки в сводной таблице я делаю руками, массовой заменой конечно, но все же).

  • Прикрутить БД и проводить авторизацию IDшника там, может быть добавить пароль/кодовую фразу для обращения к боту раз в сутки или что-то подобное.

  • Убрать хардкоды форматирования и т.п., заменив на поиск ключевых заголовков.

На этом я хотел бы закончить и без того длинную статью, очень надеюсь, что вы занимаетесь собственной финансовой грамотностью и избегаете неоправданных кредитов.

Как и обещал ссылки:

https://github.com/iliyakarin/TelegramExpensesBot

https://drive.google.com/drive/folders/1ZL3n6Oyyy5iJSoh88ObUT85HSWSrPYCD?usp=sharing

Подробнее..

Из песочницы Автоматизация бюджетирования что это, с какими проблемами связано и какие программные продукты использует?

01.08.2020 14:17:18 | Автор: admin
Это вводная статья о том, что такое автоматизация бюджетирования, о каких проблемах говорят, когда используют это словосочетание, и какие IT-инструменты используются в ней.

Если вы хотите понять, как связаны между собой BI, хранилища данных (DWH), системы автоматизации бюджетирования (Cognos, Anaplan, 1С: Управление холдингом, Бит.Финанс) и чем они отличаются от других корпоративных информационных систем вам сюда.

Если вы технический архитектор, который никогда не работал с предметной областью бизнес-планирования статья тоже для вас.

Сразу предупреждаю, что я постарался писать статью максимально простым языком, чтобы она была понятна для всех.

Почему я решил ее написать?


Сейчас практически отсутствует краткое систематизированное описание этой области, которое давало бы понятные ответы на вопросы:

  1. В чем специфические проблемы автоматизации бюджетирования? Чем она отличается от автоматизации обычного учета?
  2. Чем отличаются между собой модные программные продукты (PowerBI, Tableau, Qlik, Cognos, IBM Planning analytics, Anaplan, Бит.Финанс, 1С: УХ) и по какому принципу они построены?
  3. Почему BI не основной инструмент автоматизации бюджетирования?

Объявление: буду рад, если специалисты по тиражным программным продуктам помогут в корректировке и дополнении статьи
Приглашаю всех, кто работает в качестве консультанта/пользователя с системами бюджетирования, к участию в пополнении данной статьи.

Если не специализироваться на этом рынке, угнаться за трендами во всех продуктах практически невозможно. Функциональность постоянно изменяется, а информация все больше закрывается вендорами.

Поэтому буду очень благодарен, если специалисты смогут поправить меня (если я допустил неточности) и дополнить статью информацией по известным вам продуктам в следующих аспектах:

  • Архитектура (взаимодействие с аппаратной частью и другими модулями учета и планирования)
  • Функциональность
  • UX: интуитивность, понятность, простота настройки
  • Стоимость внедрения / владения


Проблемы и принципы их решения


Методология: Что такое бюджетирование и как оно связано с управленческим учетом
Понятие Управленческий учет можно рассматривать в двух вариантах: 1) многоуровневая система фактического учета 2) многоуровневая система фактического учета и планирования. При этом управленческий учет ведется и в финансовом, и в нефинансовом выражении (на низших уровнях чаще используются натуральные показатели, а финансовые показатели важны на верхних). Бюджетами же обычно называют верхнеуровневые финансовые планы.

Поэтому. Если считать УУ только учетом фактических данных, то УУ и бюджетирование совершенно разные вещи. Если считать, что УУ это и план, и факт, то бюджетирование можно считать частью управленческого учета на верхнем уровне.

У сферы бюджетирования две основные функции:

  • Составить план
  • Сопоставить план с фактом

Поэтому, если сводная управленческая отчетность строится только по фактическим данным, ее нельзя называть бюджетированием, а вот если она строится по принципу сравнения План-Факт, то ее зачастую могут называть частью бюджетирования.


Архитектурные отличия между учетом и бюджетированием заключаются в том, что данные учета идут снизу вверх. Чтобы получить качественную отчетность, нужно организовать запись как можно более детальных фактов. Тогда любую сводную информацию (важную для руководителей) можно будет получить простой агрегацией.

Поэтому в учете оптимально работает схема Документ > Таблица (Регистр) > Отчет (которая использовалась задолго до автоматизации, еще в средневековом бухучете).


Рис. 1. Учетная схема Документ > Регистр > Отчет

Пример реализации

Рис. 2

Планы же изначально укрупненные. Поэтому вводить их удобно именно сверху (то есть, в таких же формах, в которых формируются отчеты).

Поэтому при попытке построить автоматизацию бюджетирования по аналогии с обычным учетом (рис. 3), перед компаниями сразу встают три ключевые проблемы.


Рис. 3

Проблема 1: Администрирование правил. Администрировать правила трансформации данных (из низших уровней учета в формат бюджетирования), прописанные в коде отчетов очень неудобно и трудозатратно.

Проблема 2: Скорость сбора факта. Планы выводятся в отчеты очень быстро (поскольку хранятся в уже укрупненном виде), а фактические данные вычисляются очень медленно.

Проблема 3: Формы ввода планов . Самой удобной формой ввода планов является план-факт отчет. Но отчеты в информационных системах обычно не позволяют вводить данные.

Первые две проблемы связаны не только с бюджетированием, и в целом представляют основу всей предметной области хранилищ данных, интеграции данных и ETL.

Третья проблема специфическая проблема планирования. Которая, собственно, является одной из важных проблем ERP-систем как реал-таймовых инструментов (предназначенных не только для посмертного учета произошедших событий, а для планирования и оперативного контроля бизнеса).

Проблема 1: Администрирование правил трансформации


На рис. 1-3 все правила трансформации фактических данных (от низшего уровня учета до верхних уровней отчетности) прописаны прямо в коде отчета.

Это плохо:

  • Правила нельзя администрировать без изменения кода;
  • Использовать их можно только в этом отчете.
    а значит:
    если нам нужно будет разработать десять разных отчетов, в которых используются одни и те же агрегированные данные, нам придется в каждый закладывать один и тот же программный код трансформации,
    если со временем правило вычисления какого-нибудь агрегированного показателя поменяется, мы должны будем зайти в каждый отчет и изменить этот код

Сложность правил трансформации


Здесь очень важно учитывать, что правила трансформации действительно могут быть достаточно сложными. Далеко не всегда трансформация представляет простое укрупнение данных (от дня к месяцу; от подразделения к организации; от склада к региону; от номенклатуры товара к статье и т.д.). Особенно явно это встречается в СНГ, где управленческий учет часто ведется на основе бухгалтерского. Тогда из самых разных комбинаций разных реквизитов бухучета могут определяться разные значения для управленческого учета.

Пример сложной трансформации
В бухгалтерском учете используются одни статьи, и они заполняются в учетных документах.
В бюджетировании используются другие статьи, но факт бюджета собирается из данных бухучета.

При этом:

  • если закупается номенклатура Горюче-смазочные материалы у поставщика ООО Прямоугольник и по договору Договор 25 это одна статья бюджета;
  • если ГСМ закуплены у другого поставщика; или даже у того же поставщика, но по другому договору это уже другая статья бюджета.


Вы можете представить, насколько значительную проблему составляет поддержание такого кода для программистов, если таких статей несколько сотен, они используются в десятке разных отчетов, и правила для их определения в управленческом учете могут корректироваться раз 3-4 месяца.

Решение проблемы 1: mapping


Для решения этой задачи mapping соответствия между полями разных уровней и/или видов учета и отчетности можно вынести из отчетов, создать как отдельный объект, настраивать и хранить отдельно, и затем обращаться к ним при необходимости.


Рис. 4

Это дает сразу два преимущества:

  • Правила проще администрировать. Их можно сделать интерактивными и настраивать без кода, а значит это зачастую могут делать даже обычные пользователи;
  • Одно правило можно использовать в разных отчетах и/или других алгоритмах

Значимых минусов у такого подхода нет.

Но разработать инструмент для удобного маппинга больших объемов справочников непросто.

Проблема 2: Скорость трансформации фактических данных


Решение проблемы 2: хранение трансформированных данных


Чтобы не вычислять данные отчетов на лету, их можно хранить уже в укрупненном и трансформированном виде.

Для этого, помимо исходных таблиц (которые все равно понадобятся в компании), нужно создать таблицы для хранения агрегированных фактических данных. Это могут быть и отдельные таблицы, и общая таблица и для плана, и для агрегированного факта.

Конечно, эти таблицы предварительно нужно как-нибудь заполнять: для этого будем выполнять такую же процедуру трансформации, что выполнялась раньше при формировании отчета, но теперь вынесем ее в отдельный фоновый процесс.


Рис. 5

DWH


С этой проблемой связана сфера Хранилищ данных (DWH).

Грубо говоря, DWH это и есть место (таблица или, на практике, множество связанных таблиц) для хранения промежуточно вычисленных (агрегированных или еще как-то трансформированных) данных.

Какие плюсы:

  • Скорость чтения данных. Если отчеты читают из таблицы уже трансформированные данные, они делают это очень быстро.
  • Проверяемость. Когда данные предварительно складываются в хранилище, их проще проверить.

Минусы:

  • Точность. На самом деле, этот минус скорее теоретический (максимальная точность обеспечивается именно когда мы берем данные из самого первичного источника информации).
    На практике
    Если в первичном учете данные ведутся качественно и хранилище выстроено качественно, то и в нем данные будут достаточно точными; если же первичный учет ведется плохо, то и без хранилищ в отчеты будут выводиться некорректные данные. То есть, потеря в доли процента в качестве данных после перехода к хранению агрегатов действительно возможна, но в большинстве случаев для компаний такие потери не являются значительными, чтобы принимать их во внимание.
  • Загрузка памяти. Соответственно, чтобы хранить агрегированные данные, мы тратим лишнее место на жестких дисках. Тоже, на самом деле, скорее теоретический минус.
  • Расшифровка. Если мы подключаем отчеты к агрегированным таблицам (в которых данные не детализированы по исходным документам), возникают проблемы с возможностями их расшифровки (drill-down).

ETL-процессы


ETL можно называть любой процесс, в котором данные берутся откуда-то, изменяются и затем куда-то загружаются. Это общепринятое сокращение от Extract (получить), Transform (преобразовать), Load (загрузить).

Но обычно этот термин употребляют именно в случаях, когда данные после трансформации куда-то записываются для хранения.

У такого подхода есть плюсы:

  • Распределение нагрузки на систему. Процесс трансформации растягивается во времени. Мы можем заполнять агрегированную таблицу постепенно (по мере изменения/добавления данных в исходных учетных системах) или по расписанию. Например, сложные вычисления можно откладывать на ночь или другое нерабочее время, когда сервер свободнее. Это позволяет управлять нагрузкой на систему.
  • Однократность трансформации. Однажды записав сводную информацию в агрегированную таблицу, мы сможем обращаться к ней из множества разных отчетов. Поэтому одни и те же трансформации не придется выполнять множество раз.

Минус же один:

  • Сложность контроля целостности загруженных данных. Выстроить процесс ETL, в котором не будут теряться данные, который будет в достаточной мере прозрачным и контролируемым возможно, но это требует высокой квалификации команды, вовлеченности пользователей и заметных трудозатрат.

Проблема 3: Форма ввода бюджетов


Дело в том, что в классическом виде отчеты в программных продуктах это средство вывода данных. Но вводить данные в них нельзя.

Почему в фактическом учете это не проблема
Поскольку фактический учет идет снизу вверх (от фактов к суммам), в нем это не является проблемой, и потребности вводить укрупненную информацию вручную обычно нет.

То есть, если мы выстроили детальный учет по товарам (как показано в документе на рис. 2), обычно нет ни потребности, ни смысла вводить фактические данные в таком укрупненном виде, как они выглядят в отчете на том же рис. 2.

Таким образом, форма ввода сильно отличается от формы вывода.

А вот для бюджетирования классическая схема Форма ввода (документ) > внутренние таблицы > Форма вывода (отчет) не подходит.

Например, в свое время мы разработали помесячный отчет по закупкам (как на рис. 2), а теперь начинаем вести планирование, и финансовый директор хочет вводить бюджет закупок в такой же форме.

Что остается делать? Можно создать форму для ввода планов, которая будет очень, очень похожа на этот отчет (что и было показано на рис. 3).

Минусы этого подхода очевидны
Первое. Нам придется разработать два технически разных объекта (отчет по закупкам и форма для планирования закупок), которые внешне должны быть идентичны.

И нам придется их поддерживать. То есть, если форма бюджета закупок должна измениться, скорее всего она изменится и для плана, и для факта, и нам придется вносить изменения в обе эти формы.

Второе. При вводе плана хочется видеть факт. А если отчета и ввода разные объекты, делать это неудобно.

Решение проблемы 3: интерактивные формы ввода-вывода


Решение тоже очевидно: вместо привычных документов и отчетов, нужно создать объект, который позволит одновременно и читать, и вводить данные.

Еще лучше, если в этом объекте можно будет еще и выполнять расчеты между вводимыми и/или читаемыми данными то есть, работать наподобие того, как позволяет работать Excel.

При этом планы после ввода можно складывать в то же самое хранилище данных, где лежат фактические данные (см. рисунок).


Рис. 6

Но реализовать такие формы значительно сложнее, чем обычные отчеты или документы в учетных системах.

Степень интерактивности может быть разной: проще реализовать заранее настроенные формы, сложнее динамические (где заранее неизвестно количество колонок/строк, но заранее заданы их типы). Еще сложнее позволять в пользовательском режиме вращать данные, строить новые формы и задавать произвольные формулы расчета, меняя структуру отчетов.

Решение проблемы 4: кубы


Есть и еще один инструмент, который решает проблему, не обозначенную выше.
Дело в том, что при больших объемах данных, при высокой интерактивности и при сложных формулах, обычные реляционные SQL-таблицы, в которых принято хранить данные ERP-систем, не обеспечивают максимальной скорости обработки данных в режиме реального времени.

Для решения такой задачи можно применять хранение данных не в виде таблиц, а сразу в виде кубов.

Что такое кубы?
Куб, OLAP-куб, OLAP-таблица, многомерная база данных, аналитическая база данных, столбцовая база данных это название способов хранения данных, позволяющих хранить их сразу на пересечении множества разрезов. Из таких таблиц проще получать срезы, а также они быстрее проводят быстрые калькуляции (например, распределение затрат в различных разрезах). Поэтому они подходят для анализа Что-если позволяют моделировать разные сценарии бизнеса и тут же получать ответ, как при изменении одних показателей изменятся другие.

На самом деле, здесь может быть несколько различных технологий, и формально, например, столбцовая база данных отличается от многомерной. Но углубляться в такие детали в рамках данной статьи уже негде.

Правда, если для задач бюджетирования сразу организовать хранилище в виде куба хороший и подходящий вариант, то для других задач бизнеса многомерная модель хранения может не годиться, и хранилище организуют по другой технологии. В таком случае куб может добавляться к основному хранилищу, как еще одно звено в архитектуре.

Виды программных продуктов в бюджетировании


Теперь рассмотрим виды информационных технологий, которые решают задачи, важные при автоматизации бюджетирования:

  • Системы исходных данных (системы учета, ERP-системы)
  • ETL-инструменты
  • Хранилища данных (обычные и OLAP-кубы)
  • BI-системы
  • EPM-системы
  • Конечно же, Excel

У каждого вида систем есть теоретически основная функция (см. таблицу):



Но в реальности границы немного размываются, и часто продукты умеют делать смежные вещи. Очень приблизительно перекрытие функций выглядит так:



Важно: Нужно обратить внимание, что обычно перекрытие функций не 100-процентно.

То есть, обычно инструмент, который предлагает дополнительные функции, не выполняет их так же хорошо, как отдельная специализированный инструмент!
Поэтому
Если потребность в какой-либо специфической функции в компании максимально развита, желательно добавлять в контур IT-ландшафта компании (покупать или разрабатывать) отдельную систему, специализирующуюся на данной функции.

Поэтому, например, при максимальной потребности в DWH в компании, приобрести EPM-систему будет недостаточно, и лучше строить отдельную DWH; отдельная BI система может обладать более гибкими и шустрыми возможностями визуализации, чем комплексное EPM-решение и так далее.

Карта видов ПО в бюджетировании


В целом, визуально покрытие разных задач по автоматизации бюджетирования, разными типами информационных систем, можно показать приблизительно так:


Рис. 7

Теперь рассмотрим, какую архитектуру бюджетирования предлагают некоторые популярные программные продукты.

Бюджетирование в ERP-системах


Понятие ERP со временем меняется, и в ERP-системы включаются все новые возможности.

На мой взгляд, классический функционал ERP включает учетную систему; конструкторы отчетов; функции оперативного контроля планов и, конечно же, базовые возможности их ввода.

Не включает: возможность сбора данных из множества источников; построение кубов и интерактивной аналитики

Есть основания полагать, что понятие EPM (как и BI) задумывалось как нечто, выходящее за рамки ERP. Но сейчас границы стираются, и EPM-функции или даже целые продукты могут включаться в качестве модулей в ERP-системы.

1C: УПП


В УПП реализована следующая схема, но внутри одной базы.


Рис. 8. Архитектура бюджетирования в 1С: УПП

Плюсы бюджетирования в УПП:

  • УПП очень прозрачна и легко дорабатывается. В ней легко выверять данные и достаточно недорого разрабатывать новый функционал.

Mapping в УПП на среднем уровне. Это не плюс и не минус. Настройка средней трудоемкости.

Недостатки бюджетирования в УПП:

  • Отсутствие интерактивных форм ввода-вывода. Создание любых данных выполняется через документы (ввод планов; получение агрегированных фактических данных; проведение калькуляций), где нет и не может быть интерактивности и возможности видеть общую картину.
  • Отсутствие ETL-интерфейса. Маппинг есть, но загрузка фактических данных происходит прямо из формы документа, что неудобно.
  • Старая платформа. Нельзя использовать технологию Управляемые формы 1С, которая дает пользователю современные возможности универсальной фильтрации/сортировки списков и отчетов. Это ухудшает аналитические возможности пользователя.

Вообще, в УПП наиболее наглядно реализована автоматизация бюджетирования по принципу обычного учета: пользователь работает не от общей картины, а от первичных документов (ввода плана; загрузки факта; калькуляции), и общую картину сможет увидеть только в отчетах, в которых вводить ничего нельзя.

1C:ERP


Насколько помню, изначально ERP предусматривала только онлайновую модель сбора отчетности. И на сегодняшний день во многих компаниях основной сценарий именно такой. Однако, сейчас программа позволяет промежуточно хранить вычисленные значения.


Рис. 9. Архитектура бюджетирования в 1С:ERP

Плюсы бюджетирования в 1С:ERP:

  • Достаточно функциональные формы ввода-вывода

Недостатки бюджетирования в 1C:ERP:

  • Жесткость модели. В принципе, как и в большинстве ERP-систем, бюджетная модель не терпит частых изменений и достаточно придирчива к предварительной настройке
  • Слабый mapping. Почему-то функционал мэппинга хуже, чем в УПП
  • Жесткость продукта. В отличие от УПП, здесь перерабатывать каркас методологии крайне сложно и дорого. Нужно хорошо изучить существующую, и строить бюджетирование на ERP, если она действительно подходит компании
  • Производительность. Интерактивные формы достаточно функциональны, но техническое устройство делает их крайне медленными на больших объемах данных

Также в 1C:ERP нет серьезного функционала по части настройки организационного процесса бюджетирования (workflow) и многопользовательской работы. Например, процессы согласования вынесены в отдельный продукт 1С: Документооборот, который обычно внедряется поверх ERP.

1C: КА


Комплексная автоматизация представляет собой урезанную версию 1С:ERP, поэтому ее развитие проходит по тому же пути, и собственной методологии бюджетирования здесь нет.

MS Axapta / MS Dynamics AX


Предусматривается только онлайновая модель просмотра фактических данных бюджетов они читаются напрямую из собственных модулей бухгалтерского учета, при этом возможности серьезной трансформации не предусмотрены.


Рис. 10. Архитектура бюджетирования в MS Dynamics

И плюс, и минус системы ее заточенность на собственные учетные модули Dynamics и их готовую структуру.

Плюсы:

  • Интегрированность с учетными модулями. Настройка получения фактических данных из различных модулей ERP-системы достаточно проста.
  • Интеграция. Достаточно много возможностей для загрузки готовых планов из внешних систем. Таким образом, Microsoft четко следует логике отделения EPM от ERP, вследствие чего EPM-системы очень хорошо навешиваются на Dynamics
  • Workflow. Достаточно функциональная и прозрачная настраиваемая организационная модель бюджетного процесса

Минусы:

  • ETL. В целом продукт не предоставляет значимых возможностей трансформации данных
  • Жесткость продукта. Здесь задана готовая, но достаточно ограниченная методология. И (как и в случае с 1C:ERP) дорабатывать ее не только сложно, но и практически бессмысленно.

SAP S4 HANA


Основной продукт SAP, пришедший на смену ERP-системе SAP R/3.

Для бюджетирования сейчас используется отдельный EPM-продукт, который в десктопной версии (SAP BPC) еще можно было считать EPM-системой поверх ERP, но в облачной версии (SAP Analytics Cloud) уже окончательно встроен в ERP-систему SAP S4 HANA Cloud. Подробнее о SAP BPC будет ниже.

Про саму S/4 HANA важно сказать другое: SAP переводит всю работу ERP-системы с реляционной базы данных на комбинированную (смесь реляционной, колоночной и многомерной). Такой комбинированной базой данных выступает собственная технология SAP HANA (не путать с S/4 HANA), которая в зависимости от действий пользователя работает то как транзакционная (учетная система), то как аналитическая система (куб).

Таким образом, SAP переходит к архитектуре, противоположной той, что сегодня хорошо известна в обычной практике: в нем аналитическая база данных строится не над храналищем (SAP BW), а реализована под ERP-системой. При этом хранилище данных (SAP BW), когда пользователь работает с его данными из EPM-системы, передает данные для вычислений обратно в эту исходную комбинированную базу.

Фактически, тот же эффект, ради которого задумывались IN-Memory OLAP, SAP достигает противоположным способом: максимальным вынесением калькуляций из оперативной памяти.

Oracle Cloud ERP


Oracle также пошла по пути встраивания EPM-системы внутрь ERP.

Компания активно переводит свои продукты на облачную версию (возможно, даже активнее, чем это делает SAP). Поэтому для своего главного EPM-решения, Oracle Hyperion, компания продвигает альтернативу в виде облачного Oracle EPM Cloud, который включается в состав облачной Oracle Cloud ERP.

BI-системы


BI-системы (Business Intellegence) в чистом виде это средство вывода данных. То есть, BI это конструкторы отчетов и дашбордов, которые также содержат базовые функции реструктуризации и анализа данных (например, соединять таблицы, находить усредненные тренды и т.д.).

Популярные BI-системы:

  • Power BI
  • Tableau
  • QlikView / QlikSense
  • IBM Cognos TM1
  • SAP BusinessObjects

Как правило, BI подключается к хранилищам данных (как реляционным, так и многомерным) или к исходным SQL-таблицам. Таким образом, можно обращаться к достаточно детализированным исходным данным (чтобы укрупнять их уже в BI). Однако, сложные условные трансформации (с условиями если) это не про классический функционал BI.

EPM-системы


EPM сокращенно Enterprise Performance Management (управление эффективностью предприятия). Также встречаются термины Corporate performance management (CPM) и реже Business performance management (BPM).

Довольно широкий термин, который может подразумевать и смежные функции, однако чаще всего такие системы можно рассматривать как конструкторы интерактивных План-факт форм. Понятие EPM еще не стало общеизвестным, но такие решения, как IBM Planning analytics, Oracle Hyperion, Anaplan, которые иногда рассматривают в контексте Business Intellegence, корректнее называть именно EPM-системами.

Иногда EPM-системы создаются для более широких целей (например, SAP EPM или 1С: Управление холдингом), но мы будем рассматривать их именно в части систем для автоматизации бюджетирования. Поэтому мы будем называть SAP Business Planning & Consolidation (SAP BPC) EPM-системой, хотя сам SAP называет ею более крупный продукт SAP EPM, в который включается BPC.

Как мы сказали, BI не позволяет вводить данные. EPM обычно включают в себя стандартные функции BI, а кроме этого реализует возможность ввода и записи данных.

Известные EPM-системы:

  • Oracle Hyperion
  • IBM Planning Analytics
  • Anaplan
  • SAP BPC
  • Бит.Финанс
  • 1C: Управление холдингом

Начнем с маленьких.

Бит.Финанс


Бит.Финанс основан на методологии бюджетирования УПП, однако он поддерживается, развивается, и кроме того реализован как EPM-система поверх ERP (таким образом, позволяет консолидировать фактические данные из разных внешних источников).


Рис. 11. Архитектура бюджетирования в Бит.Финанс

Плюсы автоматизации бюджетирования в Бит.Финанс:

  • Конструкторы форм ввода или чтения данных. В отличие от УПП, формы учетных документов здесь не фиксированы, их можно настраивать, приводя в достаточно удобный вид.
  • Интерфейс для управления калькуляциями. Пересчет бюджетных моделей здесь можно проводить централизованно, а не создавая вручную документ калькуляции.

Mapping как в УПП. На среднем уровне.

Недостатки автоматизации бюджетирования в Бит.Финанс:

  • Работа через формы учетных документов. Несмотря на то, что формы документов стали гибкими (см. первый плюс), и в целом в этом аспекте сделан большой прогресс по сравнению с УПП, продукт все же не ушел от документно-ориентированной модели работы настолько далеко, насколько хотелось бы. Что, как мы сказали, для бюджетирования архитектурно неправильно и неудобно.
  • Отсутствие интерактивных форм ввода-вывода. В отличие от 1C:ERP, здесь их нет.

Anaplan


Флагманский продукт, недавно набравший большую популярность на мировом рынке. Предлагается только в облачной версии.

В отличие от остальных популярных решений (в т.ч. Hyperion и Planning Analytics), имеет немного специфическую специализацию: он лучше всего работает как интерактивный калькуляционный сервис, который позволяет быстро автоматически пересчитывать объемные бюджетные модели с большим количеством зависимостей.


Рис. 12. Архитектура бюджетирования в Anaplan (популярный сценарий автоматизации)

Плюсы:

  • Калькуляция. Продукт сфокусирован на вычислениях, и хранит все данные в In-Memory OLAP, что позволяет пересчитывать все модели в режиме онлайн
  • Коллективная работа (в рамках подготовки плановых данных)
  • UX и произвольное моделирование.
  • ETL. Собственный и достаточно удобный ETL-инструмент
  • Требует минимальной IT-поддержки. Особенно по части моделирования
  • Стоимость. Дороговата для российского рынка, но в сравнении с международными лидерами (тем же Oracle Hyperion) полная стоимость владения выходит ниже
  • Скорость внедрения. В сравнении с Hyperion и Planning Analytics, продукт проще и в использовании, и во внедрении

Минусы:

  • Форматирование
  • Коллективная работа (в части работы с событиями: уведомления, рассылки и пр.)
  • Собственный синтаксис формул. Вообще использование собственного кода всегда недостаток с точки зрения конечных пользователей.
  • Иерархии. Раньше были проблемы с использованием разной иерархии справочника для разных бюджетных моделей. Проблема неважна для многих компаний, но критична для отдельных. Возможно (я надеюсь на это) к данному моменту Anaplan уже решил эту проблему.
  • Ad-hoc отчетность. Вообще это скорее специализация, чем недостаток: Anaplan в большей мере ориентирован на работу через моделирование, чем на быструю аналитику и репортинг.
  • Ограниченные возможности для масштабирования


И плюсом, и минусом Anaplan является его относительно четкая специализация и то, что он не покушается на IT-экосистему компании. Плюс этого в том, что продукт четко определился со своим функциональным назначением, и направления его развития достаточно предсказуемы. Он представляет собой сервис для проведения анализа Что-Если, расчета и утверждения планов (бюджетов), и планировать архитектуру заказчикам нужно исходя из этого. Минус в том, что продукт не может заменить полноценное корпоративное хранилище данных, не может заменить все возможности BI, на нем не строят сложную корпоративную ETL-инфраструктуру, да и всю систему корпоративных вычислений. Все это не было бы проблемой, если бы продукт не предлагался только в облачной версии.

В отличие от Oracle и SAP (которые как раз претендуют на экосистемность), Anaplan не делает упор на возможности легко перегонять данные и инструменты между облаком и серверами компании. Таким образом, в его случае недостатки облачного продукта (с учетом тарификации в зависимости от объема используемых на сервере данных) проявляются наиболее заметно.

Поскольку он не заменяет собой универсальное хранилище, он может использоваться как калькуляционный сервис, складывающий плановые данные в собственное корпоративное хранилище, откуда для построения быстрых отчетов и дашбордов данные передаются в отдельную BI-систему.


Рис. 13. Архитектура бюджетирования в Anaplan (альтернативный сценарий автоматизации)

В целом, использование одновременно EPM и BI-систем является нормальной практикой.

Oracle Hyperion


Поставляется в двух версиях: Oracle Hyperion Planning и Oracle Hyperion Financial Management.
Сейчас активно замещается новым продуктом Oracle EPM Cloud.

Из-за экосистемности, архитектуры могут приобретать самые разные виды, но типовая выглядит примерно так.


Рис. 14. Архитектура бюджетирования в Hyperion (пример)

На рисунке я привел BI-систему в качестве примера, поскольку аналитическая база данных Oracle Essbase является отличной базой для аналитики больших массивов данных в BI-инструментах.

В качестве ETL-решения предлагается Oracle Data Integrator, который выступает как универсальный механизм интеграции данных в экосистеме Oracle.

Плюсы автоматизации бюджетирования в Oracle Hyperion:

  • Экосистемность. В случае с Oracle отмечу как плюс, поскольку Oracle один из крупнейших поставщиков баз данных, и интеграция для компаний, кто работает на Oracle СУБД (а таких компаний много), действительно дает преимущества. В частности, удобнее распределять функционал между облаком и сервером. Кроме того, коллеги говорят о достаточно серьезных преимуществах по части безопасности в Oracleовой архитектуре (в этом я не специалист, если здесь таковые есть просьба поправить).
  • Ad-hoc (отчетность по запросу).

Недостатки автоматизации бюджетирования в Oracle Hyperion:

  • Экосистемность. Отмечу и как минус, поскольку, по имеющейся информации, Hyperion выбирается в основном именно компаниями, работающими на стеке технологий Oracle, и от его использования в не-Oracleовой среде в долгосрочной перспективе возможен меньший эффект.
  • Калькуляции. Продукт в меньшей степени заточен на пересчеты моделей, чем тот же Anaplan.
  • Сложность. Продукт не слишком легкий и с точки зрения инфраструктурной нагрузки, и с точки зрения UX (требует высокой квалификации и подготовленности пользователей).

IBM Planning Analytics


В основном предназначенная для крупного бизнеса, не слишком простая в развертке и администрировании, но весьма функциональная EPM-система. Сейчас IBM Planning analytics строится на базе технологий TM1 (лежащих в основе Cognosа).

Для ETL-процессов IBM предлагает использовать отдельный продукт IBM DataStage (ранее применялся Cognos DataManager), Turbo Integrator, Cognos Integration Server или внешний ETL-инструмент.

Типичная архитектура очень похожа на Hyperion.


Рис. 15. Архитектура бюджетирования в Planning Analytics (пример)

Сильные стороны IBM Planning Analytics:

  • Прогнозирование.
  • Работа с событиями.
  • Гибкость. Продукт нельзя назвать не требовательным к предварительной настройке, но он старается быть адаптированным к изменчивым моделям.
  • Неэкосистемность. Что удивляет в работе с IBM большой объем методических материалов, выпускаемых компанией, направлен на описание лучших практик взаимодействия продуктов IBM с другими решениями (в том числе, Oracle и SAP), причем в самых разных вопросах. На мой субъективный взгляд, хорошо, что в долгосрочной перспективе компания держит тренд на то, чтобы развивать интеграцию со сторонними системами (что позволяет поддерживать самые разные варианты сложившихся в компаниях архитектур), а не сокращать ее.
  • Поддержка продукта.

Минусы

  • Сложность. Как и Hyperion: требуется обучение пользователей, не самая легкая инфраструктура.

SAP BPC


В целом, отличительные особенности SAP экосистемность, сложность архитектуры и инфраструктуры решений.

Как я уже говорил, SAP в разное время поддерживал и поддерживает различные варианты архитектуры; по наиболее свежей информации, флагманская версия архитектуры, рекомендуемая вендором на сегодняшний день, выглядит так:


Рис. 15. Архитектура бюджетирования в SAP Business Planning & Consoldation (пример)

Преимущества бюджетирования на базе SAP BPC:

  • Интеграция данных. Хотя она и сложна, она функциональна и быстра, и это главное для крупных компаний.
  • Визуализация.
  • Workflow.

Недостатки бюджетирования на базе SAP BPC:

  • UX и гибкость. Как и практически все продукты SAP, решение для бюджетирования требует высокой квалификации рядовых пользователей, а также очень требовательно к трудоемким предварительным настройкам.
  • Инфраструктурная нагрузка. К тому же, SAP постоянно изменяет архитектуру. С одной стороны, это хорошо (компания ищет новые способы реализации задач), с другой стороны для компаний это часто оборачивается большими трудностями при переходе на новые версии. Например, несколько лет назад SAP стала активно отказываться от версии своего хранилища SAP BW для MS SQL Server, оставляя альтернативную ей версию NetWeaver; затем стала активно продвигать BW/4 HANA как замену NetWeaver; при этом сейчас тенденция идет к тому, что компания переводит фокус с EPC на облачную версию SAP Analytics Cloud, переход на которую также требует некоторого перестроения архитектуры.
  • Цена. С точки зрения полной стоимости владения, фактически оказывается одной из наиболее дорогостоящих EPM-систем в мире, на что влияют в том числе изменения в архитектуре.

Отмечу, что сейчас продукт активно замещается облачной SAP Analytics Cloud.

ETL-инструменты


Для построения ETL-процессов используют известные ETL-инструменты, среди которых множество продуктов тех же вендоров, что выпускают BI/EPM решения:

  • IBM DataStage
  • Informatica PowerCenter
  • Talend
  • Apatar
  • SAP Data Services
  • Oracle Data Integrator
  • Microsoft Azure Data Factory
  • и мн. др.

Статья будет постепенно пополняться, возможно с добавлением информации о новых продуктах и принципах разработки программных продуктов для бюджетирования с нуля.
Подробнее..

Из песочницы Автоматизация бюджетирования что это, с какими проблемами связано и какие программные продукты используются?

01.08.2020 18:14:38 | Автор: admin
Это вводная статья о том, что такое автоматизация бюджетирования, о каких проблемах говорят, когда используют это словосочетание, и какие IT-инструменты используются в ней.

Если вы хотите понять, как связаны между собой BI, хранилища данных (DWH), системы автоматизации бюджетирования (Cognos, Anaplan, 1С: Управление холдингом, Бит.Финанс) и чем они отличаются от других корпоративных информационных систем вам сюда.

Если вы технический архитектор, который никогда не работал с предметной областью бизнес-планирования статья тоже для вас.

Сразу предупреждаю, что я постарался писать статью максимально простым языком, чтобы она была понятна для всех.

Почему я решил ее написать?


Сейчас практически отсутствует краткое систематизированное описание этой области, которое давало бы понятные ответы на вопросы:

  1. В чем специфические проблемы автоматизации бюджетирования? Чем она отличается от автоматизации обычного учета?
  2. Чем отличаются между собой модные программные продукты (PowerBI, Tableau, Qlik, Cognos, IBM Planning analytics, Anaplan, Бит.Финанс, 1С: УХ) и по какому принципу они построены?
  3. Почему BI не основной инструмент автоматизации бюджетирования?

Объявление: буду рад, если специалисты по тиражным программным продуктам помогут в корректировке и дополнении статьи
Приглашаю всех, кто работает в качестве консультанта/пользователя с системами бюджетирования, к участию в пополнении данной статьи.

Если не специализироваться на этом рынке, угнаться за трендами во всех продуктах практически невозможно. Функциональность постоянно изменяется, а информация все больше закрывается вендорами.

Поэтому буду очень благодарен, если специалисты смогут поправить меня (если я допустил неточности) и дополнить статью информацией по известным вам продуктам в следующих аспектах:

  • Архитектура (взаимодействие с аппаратной частью и другими модулями учета и планирования)
  • Функциональность
  • UX: интуитивность, понятность, простота настройки
  • Стоимость внедрения / владения


Проблемы и принципы их решения


Методология: Что такое бюджетирование и как оно связано с управленческим учетом
Понятие Управленческий учет можно рассматривать в двух вариантах: 1) многоуровневая система фактического учета 2) многоуровневая система фактического учета и планирования. При этом управленческий учет ведется и в финансовом, и в нефинансовом выражении (на низших уровнях чаще используются натуральные показатели, а финансовые показатели важны на верхних). Бюджетами же обычно называют верхнеуровневые финансовые планы.

Поэтому. Если считать УУ только учетом фактических данных, то УУ и бюджетирование совершенно разные вещи. Если же считать, что УУ это и план, и факт, то бюджетирование можно считать частью управленческого учета на его верхних уровнях.

У сферы бюджетирования две основные функции:

  • Составить план
  • Сопоставить план с фактом

Поэтому, если сводная управленческая отчетность строится только по фактическим данным, ее нельзя называть бюджетированием, а вот если она строится по принципу сравнения План-Факт, то ее зачастую могут называть частью бюджетирования.


Архитектурные отличия между учетом и планированием заключаются в том, что данные учета идут снизу вверх. Чтобы получить качественную отчетность, нужно организовать запись как можно более детальных фактов. Тогда любую сводную информацию (важную для руководителей) можно будет получить простой агрегацией.

Поэтому в учете оптимально работает схема Документ > Таблица (Регистр) > Отчет (которая использовалась задолго до автоматизации, еще в средневековом бухучете).


Рис. 1. Учетная схема Документ > Регистр > Отчет

Пример реализации

Рис. 2

Планы же изначально укрупненные. Поэтому вводить их удобно именно сверху (то есть, в таких же формах, в которых формируются отчеты).

Поэтому при попытке построить автоматизацию бюджетирования по аналогии с обычным учетом (рис. 3), перед компаниями сразу встают три ключевые проблемы.


Рис. 3

Проблема 1: Администрирование правил. Администрировать правила трансформации данных (из низших уровней учета в формат бюджетирования), прописанные в коде отчетов очень неудобно и трудозатратно.

Проблема 2: Скорость сбора факта. Планы выводятся в отчеты очень быстро (поскольку хранятся в уже укрупненном виде), а фактические данные вычисляются очень медленно.

Проблема 3: Формы ввода планов . Самой удобной формой ввода планов является план-факт отчет. Но отчеты в информационных системах обычно не позволяют вводить данные.

Первые две проблемы связаны не только с бюджетированием, и в целом представляют основу всей предметной области хранилищ данных, интеграции данных и ETL.

Третья проблема специфическая проблема планирования. Которая, собственно, является одной из важных проблем ERP-систем как реал-таймовых инструментов (предназначенных не только для посмертного учета произошедших событий, а для планирования и оперативного контроля бизнеса).

Проблема 1: Администрирование правил трансформации


На рис. 1-3 все правила трансформации фактических данных (от низшего уровня учета до верхних уровней отчетности) прописаны прямо в коде отчета.

Это плохо:

  • Правила нельзя администрировать без изменения кода;
  • Использовать их можно только в этом отчете.
    а значит:
    если нам нужно будет разработать десять разных отчетов, в которых используются одни и те же агрегированные данные, нам придется в каждый закладывать один и тот же программный код трансформации,
    если со временем правило вычисления какого-нибудь агрегированного показателя поменяется, мы должны будем зайти в каждый отчет и изменить этот код

Сложность правил трансформации


Здесь очень важно учитывать, что правила трансформации действительно могут быть достаточно сложными. Далеко не всегда трансформация представляет простое укрупнение данных (от дня к месяцу; от подразделения к организации; от склада к региону; от номенклатуры товара к статье и т.д.). Особенно явно это встречается в СНГ, где управленческий учет часто ведется на основе бухгалтерского. Тогда из самых разных комбинаций разных реквизитов бухучета могут определяться разные значения для управленческого учета.

Пример сложной трансформации
В бухгалтерском учете используются одни статьи, и они заполняются в учетных документах.
В бюджетировании используются другие статьи, но факт бюджета собирается из данных бухучета.

При этом:

  • если закупается номенклатура Горюче-смазочные материалы у поставщика ООО Прямоугольник и по договору Договор 25 это одна статья бюджета;
  • если ГСМ закуплены у другого поставщика; или даже у того же поставщика, но по другому договору это уже другая статья бюджета.


Вы можете представить, насколько значительную проблему составляет поддержание такого кода для программистов, если таких статей несколько сотен, они используются в десятке разных отчетов, и правила для их определения в управленческом учете могут корректироваться раз 3-4 месяца.

Решение проблемы 1: mapping


Для решения этой задачи mapping соответствия между полями разных уровней и/или видов учета и отчетности можно вынести из отчетов, создать как отдельный объект, настраивать и хранить отдельно, и затем обращаться к ним при необходимости.


Рис. 4

Это дает сразу два преимущества:

  • Правила проще администрировать. Их можно сделать интерактивными и настраивать без кода, а значит это зачастую могут делать даже обычные пользователи;
  • Одно правило можно использовать в разных отчетах и/или других алгоритмах

Значимых минусов у такого подхода нет.

Но разработать инструмент для удобного маппинга больших объемов справочников непросто.

Проблема 2: Скорость трансформации фактических данных


Решение проблемы 2: хранение трансформированных данных


Чтобы не вычислять данные отчетов на лету, их можно хранить уже в укрупненном и трансформированном виде.

Для этого, помимо исходных таблиц (которые все равно понадобятся в компании), нужно создать таблицы для хранения агрегированных фактических данных. Это могут быть и отдельные таблицы, и общая таблица и для плана, и для агрегированного факта.

Конечно, эти таблицы предварительно нужно как-нибудь заполнять: для этого будем выполнять такую же процедуру трансформации, что выполнялась раньше при формировании отчета, но теперь вынесем ее в отдельный фоновый процесс.


Рис. 5

DWH


С этой проблемой связана сфера Хранилищ данных (DWH).

Грубо говоря, DWH это и есть место (таблица или, на практике, множество связанных таблиц) для хранения промежуточно вычисленных (агрегированных или еще как-то трансформированных) данных.

Какие плюсы:

  • Скорость чтения данных. Если отчеты читают из таблицы уже трансформированные данные, они делают это очень быстро.
  • Проверяемость. Когда данные предварительно складываются в хранилище, их проще проверить.

Минусы:

  • Точность. На самом деле, этот минус скорее теоретический (максимальная точность обеспечивается именно когда мы берем данные из самого первичного источника информации).
    На практике
    Если в первичном учете данные ведутся качественно и хранилище выстроено качественно, то и в нем данные будут достаточно точными; если же первичный учет ведется плохо, то и без хранилищ в отчеты будут выводиться некорректные данные. То есть, потеря в доли процента в качестве данных после перехода к хранению агрегатов действительно возможна, но в большинстве случаев для компаний такие потери не являются значительными, чтобы принимать их во внимание.
  • Загрузка памяти. Соответственно, чтобы хранить агрегированные данные, мы тратим лишнее место на жестких дисках. Тоже, на самом деле, скорее теоретический минус.
  • Расшифровка. Если мы подключаем отчеты к агрегированным таблицам (в которых данные не детализированы по исходным документам), возникают проблемы с возможностями их расшифровки (drill-down).

ETL-процессы


ETL можно называть любой процесс, в котором данные берутся откуда-то, изменяются и затем куда-то загружаются. Это общепринятое сокращение от Extract (получить), Transform (преобразовать), Load (загрузить).

Но обычно этот термин употребляют именно в случаях, когда данные после трансформации куда-то записываются для хранения.

У такого подхода есть плюсы:

  • Распределение нагрузки на систему. Процесс трансформации растягивается во времени. Мы можем заполнять агрегированную таблицу постепенно (по мере изменения/добавления данных в исходных учетных системах) или по расписанию. Например, сложные вычисления можно откладывать на ночь или другое нерабочее время, когда сервер свободнее. Это позволяет управлять нагрузкой на систему.
  • Однократность трансформации. Однажды записав сводную информацию в агрегированную таблицу, мы сможем обращаться к ней из множества разных отчетов. Поэтому одни и те же трансформации не придется выполнять множество раз.

Минус же один:

  • Сложность контроля целостности загруженных данных. Выстроить процесс ETL, в котором не будут теряться данные, который будет в достаточной мере прозрачным и контролируемым возможно, но это требует высокой квалификации команды, вовлеченности пользователей и заметных трудозатрат.

Проблема 3: Форма ввода бюджетов


Дело в том, что в классическом виде отчеты в программных продуктах это средство вывода данных. Но вводить данные в них нельзя.

Почему в фактическом учете это не проблема
Поскольку фактический учет идет снизу вверх (от фактов к суммам), в нем это не является проблемой, и потребности вводить укрупненную информацию вручную обычно нет.

То есть, если мы выстроили детальный учет по товарам (как показано в документе на рис. 2), обычно нет ни потребности, ни смысла вводить фактические данные в таком укрупненном виде, как они выглядят в отчете на том же рис. 2.

Таким образом, форма ввода сильно отличается от формы вывода.

А вот для бюджетирования классическая схема Форма ввода (документ) > внутренние таблицы > Форма вывода (отчет) не подходит.

Например, в свое время мы разработали помесячный отчет по закупкам (как на рис. 2), а теперь начинаем вести планирование, и финансовый директор хочет вводить бюджет закупок в такой же форме.

Что остается делать? Можно создать форму для ввода планов, которая будет очень, очень похожа на этот отчет (что и было показано на рис. 3).

Минусы этого подхода очевидны
Первое. Нам придется разработать два технически разных объекта (отчет по закупкам и форма для планирования закупок), которые внешне должны быть идентичны.

И нам придется их поддерживать. То есть, если форма бюджета закупок должна измениться, скорее всего она изменится и для плана, и для факта, и нам придется вносить изменения в обе эти формы.

Второе. При вводе плана хочется видеть факт. А если отчета и ввода разные объекты, делать это неудобно.

Решение проблемы 3: интерактивные формы ввода-вывода


Решение тоже очевидно: вместо привычных документов и отчетов, нужно создать объект, который позволит одновременно и читать, и вводить данные.

Еще лучше, если в этом объекте можно будет еще и выполнять расчеты между вводимыми и/или читаемыми данными то есть, работать наподобие того, как позволяет работать Excel.

При этом планы после ввода можно складывать в то же самое хранилище данных, где лежат фактические данные (см. рисунок).


Рис. 6

Но реализовать такие формы значительно сложнее, чем обычные отчеты или документы в учетных системах.

Степень интерактивности может быть разной: проще реализовать заранее настроенные формы, сложнее динамические (где заранее неизвестно количество колонок/строк, но заранее заданы их типы). Еще сложнее позволять в пользовательском режиме вращать данные, строить новые формы и задавать произвольные формулы расчета, меняя структуру отчетов.

Решение проблемы 4: кубы


Есть и еще один инструмент, который решает проблему, не обозначенную выше.
Дело в том, что при больших объемах данных, при высокой интерактивности и при сложных формулах, обычные реляционные SQL-таблицы, в которых принято хранить данные ERP-систем, не обеспечивают максимальной скорости обработки данных в режиме реального времени.

Для решения такой задачи можно применять хранение данных не в виде таблиц, а сразу в виде кубов.

Что такое кубы?
Куб, OLAP-куб, OLAP-таблица, многомерная база данных, аналитическая база данных, столбцовая база данных это название способов хранения данных, позволяющих хранить их сразу на пересечении множества разрезов. Из таких таблиц проще получать срезы, а также они быстрее проводят быстрые калькуляции (например, распределение затрат в различных разрезах). Поэтому они подходят для анализа Что-если позволяют моделировать разные сценарии бизнеса и тут же получать ответ, как при изменении одних показателей изменятся другие.

На самом деле, здесь может быть несколько различных технологий, и формально, например, столбцовая база данных отличается от многомерной. Но углубляться в такие детали в рамках данной статьи уже негде.

Правда, если для задач бюджетирования сразу организовать хранилище в виде куба хороший и подходящий вариант, то для других задач бизнеса многомерная модель хранения может не годиться, и хранилище организуют по другой технологии. В таком случае куб может добавляться к основному хранилищу, как еще одно звено в архитектуре.

Виды программных продуктов в бюджетировании


Теперь рассмотрим виды информационных технологий, которые решают задачи, важные при автоматизации бюджетирования:

  • Системы исходных данных (системы учета, ERP-системы)
  • ETL-инструменты
  • Хранилища данных (обычные и OLAP-кубы)
  • BI-системы
  • EPM-системы
  • Конечно же, Excel

У каждого вида систем есть теоретически основная функция (см. таблицу):



Но в реальности границы немного размываются, и часто продукты умеют делать смежные вещи. Очень приблизительно перекрытие функций выглядит так:



Важно: Нужно обратить внимание, что обычно перекрытие функций не 100-процентно.

То есть, обычно инструмент, который предлагает дополнительные функции, не выполняет их так же хорошо, как отдельная специализированный инструмент!
Поэтому
Если потребность в какой-либо специфической функции в компании максимально развита, желательно добавлять в контур IT-ландшафта компании (покупать или разрабатывать) отдельную систему, специализирующуюся на данной функции.

Поэтому, например, при максимальной потребности в DWH в компании, приобрести EPM-систему будет недостаточно, и лучше строить отдельную DWH; отдельная BI система может обладать более гибкими и шустрыми возможностями визуализации, чем комплексное EPM-решение и так далее.

Карта видов ПО в бюджетировании


В целом, визуально покрытие разных задач по автоматизации бюджетирования, разными типами информационных систем, можно показать приблизительно так:


Рис. 7

Теперь рассмотрим, какую архитектуру бюджетирования предлагают некоторые популярные программные продукты.

Бюджетирование в ERP-системах


Понятие ERP со временем меняется, и в ERP-системы включаются все новые возможности.

На мой взгляд, классический функционал ERP включает учетную систему; конструкторы отчетов; функции оперативного контроля планов и, конечно же, базовые возможности их ввода.

Не включает: возможность сбора данных из множества источников; построение кубов и интерактивной аналитики

Есть основания полагать, что понятие EPM (как и BI) задумывалось как нечто, выходящее за рамки ERP. Но сейчас границы стираются, и EPM-функции или даже целые продукты могут включаться в качестве модулей в ERP-системы.

1C: УПП


В УПП реализована следующая схема, но внутри одной базы.


Рис. 8. Архитектура бюджетирования в 1С: УПП

Плюсы бюджетирования в УПП:

  • УПП очень прозрачна и легко дорабатывается. В ней легко выверять данные и достаточно недорого разрабатывать новый функционал.

Mapping в УПП на среднем уровне. Это не плюс и не минус. Настройка средней трудоемкости.

Недостатки бюджетирования в УПП:

  • Отсутствие интерактивных форм ввода-вывода. Создание любых данных выполняется через документы (ввод планов; получение агрегированных фактических данных; проведение калькуляций), где нет и не может быть интерактивности и возможности видеть общую картину.
  • Отсутствие ETL-интерфейса. Маппинг есть, но загрузка фактических данных происходит прямо из формы документа, что неудобно.
  • Старая платформа. Нельзя использовать технологию Управляемые формы 1С, которая дает пользователю современные возможности универсальной фильтрации/сортировки списков и отчетов. Это ухудшает аналитические возможности пользователя.

Вообще, в УПП наиболее наглядно реализована автоматизация бюджетирования по принципу обычного учета: пользователь работает не от общей картины, а от первичных документов (ввода плана; загрузки факта; калькуляции), и общую картину сможет увидеть только в отчетах, в которых вводить ничего нельзя.

1C:ERP


Насколько помню, изначально ERP предусматривала только онлайновую модель сбора отчетности. И на сегодняшний день во многих компаниях основной сценарий работы именно такой. Тем не менее, сейчас программа позволяет промежуточно хранить вычисленные значения.


Рис. 9. Архитектура бюджетирования в 1С:ERP

Плюсы бюджетирования в 1С:ERP:

  • Достаточно функциональные формы ввода-вывода

Недостатки бюджетирования в 1C:ERP:

  • Жесткость модели. В принципе, как и в большинстве ERP-систем, бюджетная модель не терпит частых изменений и достаточно придирчива к предварительной настройке
  • Слабый mapping. Почему-то функционал мэппинга хуже, чем в УПП
  • Жесткость продукта. В отличие от УПП, здесь перерабатывать каркас методологии крайне сложно и дорого. Нужно хорошо изучить существующую, и строить бюджетирование на 1С:ERP, если она действительно подходит компании
  • Производительность. Интерактивные формы достаточно функциональны, но техническое устройство делает их крайне медленными на больших объемах данных

Также в 1C:ERP нет серьезного функционала по части настройки организационного процесса бюджетирования (workflow) и многопользовательской работы. Например, процессы согласования вынесены в отдельный продукт 1С: Документооборот, который обычно внедряется поверх ERP.

1C: КА


Комплексная автоматизация представляет собой урезанную версию 1С:ERP, поэтому ее развитие проходит по тому же пути, и собственной методологии бюджетирования здесь нет.

MS Axapta / MS Dynamics AX


Предусматривается только онлайновая модель просмотра фактических данных бюджетов они читаются напрямую из собственных модулей бухгалтерского учета, при этом возможности серьезной трансформации не предусмотрены.


Рис. 10. Архитектура бюджетирования в MS Dynamics

И плюс, и минус системы ее заточенность на собственные учетные модули Dynamics и их готовую структуру.

Плюсы:

  • Интегрированность с учетными модулями. Настройка получения фактических данных из различных модулей ERP-системы достаточно проста.
  • Интеграция. Достаточно много возможностей для загрузки готовых планов из внешних систем. Таким образом, Microsoft четко следует логике отделения EPM от ERP, вследствие чего EPM-системы очень хорошо навешиваются на Dynamics
  • Workflow. Достаточно функциональная и прозрачная настраиваемая организационная модель бюджетного процесса

Минусы:

  • ETL. В целом продукт не предоставляет значимых возможностей трансформации данных
  • Жесткость продукта. Здесь задана готовая, но достаточно ограниченная методология. И (как и в случае с 1C:ERP) перерабатывать ее не только сложно, но и практически бессмысленно.

SAP S4 HANA


Основной продукт SAP, пришедший на смену ERP-системе SAP R/3.

Для бюджетирования сейчас используется отдельный EPM-продукт, который в десктопной версии (SAP BPC) еще можно было считать отдельной EPM-системой поверх ERP, но в облачной версии (SAP Analytics Cloud) уже окончательно встроен в ERP-систему (в SAP S4 HANA Cloud). Подробнее о SAP BPC будет ниже.

Про саму S/4 HANA важно сказать другое: SAP переводит всю работу ERP-системы с реляционной базы данных на комбинированную (смесь реляционной, колоночной и многомерной). Такой комбинированной базой данных выступает собственная технология SAP HANA (не путать с S/4 HANA), которая в зависимости от действий пользователя работает то как транзакционная (учетная система), то как аналитическая система (куб).

Таким образом, SAP переходит к архитектуре, противоположной той, что сегодня хорошо известна в обычной практике. В нем аналитическая база данных строится не над храналищем (SAP BW), а реализована под ERP-системой. При этом хранилище данных (SAP BW), когда пользователь работает с его данными из EPM-системы, передает данные для вычислений обратно в эту исходную комбинированную базу.

Фактически, тот же эффект, ради которого задумывались IN-Memory OLAP, SAP достигает противоположным способом: максимальным вынесением калькуляций из оперативной памяти.

Oracle Cloud ERP


Oracle также пошла по пути встраивания EPM-системы внутрь ERP.

Компания активно переводит свои продукты на облачную версию (возможно, даже активнее, чем это делает SAP). Поэтому для своего главного EPM-решения, Oracle Hyperion (о котором мы тоже поговорим ниже), компания продвигает альтернативу в виде облачного Oracle EPM Cloud, который включается в состав облачной Oracle Cloud ERP.

BI-системы


BI-системы (Business Intellegence) в чистом виде это средство вывода данных. То есть, BI это конструкторы отчетов и дашбордов, которые обычно также содержат базовые функции реструктуризации и анализа данных (например, позволяют соединять таблицы, находить усредненные тренды и пр.).

Популярные BI-системы:

  • Power BI
  • Tableau
  • QlikView / QlikSense
  • IBM Cognos TM1
  • SAP BusinessObjects

Как правило, BI подключается к хранилищам данных (как реляционным, так и многомерным) или к исходным SQL-таблицам. Таким образом, можно обращаться к достаточно детализированным исходным данным (чтобы укрупнять их уже в BI). Однако, сложные условные трансформации (с условиями если) это не про классический функционал BI. Если перед вами стоит задача построить систему визуализации дашбордов, лучше постройте трансформацию перед тем как внедрять BI.

EPM-системы


EPM сокращенно Enterprise Performance Management (управление эффективностью предприятия). Также встречаются термины Corporate performance management (CPM) и реже Business performance management (BPM).

Довольно широкий термин, который может подразумевать и смежные функции, однако чаще всего такие системы можно рассматривать как конструкторы интерактивных План-факт форм. Понятие EPM еще не стало общеизвестным, но такие решения, как IBM Planning analytics, Oracle Hyperion, Anaplan, которые иногда рассматривают в контексте Business Intellegence, корректнее называть именно EPM-системами.

Иногда EPM-системы создаются для более широких целей (например, SAP EPM или 1С: Управление холдингом), но мы будем рассматривать их именно в части систем для автоматизации бюджетирования. Поэтому мы будем называть SAP Business Planning & Consolidation (SAP BPC) EPM-системой, хотя сам SAP называет так более крупный продукт SAP EPM, в который включается SAP BPC.

Как мы сказали, BI не позволяет вводить данные. EPM обычно включают в себя стандартные функции BI, а кроме этого реализуют возможность ввода и записи данных.

Известные EPM-системы:

  • Oracle Hyperion
  • IBM Planning Analytics
  • Anaplan
  • SAP BPC
  • Бит.Финанс
  • 1C: Управление холдингом

Начнем с маленьких.

Бит.Финанс


Бит.Финанс основан на методологии бюджетирования УПП, однако, в отличие от него, во-первых, поддерживается и развивается, а во-вторых, реализован как EPM-система поверх ERP (таким образом, позволяет консолидировать фактические данные из разных внешних источников).


Рис. 11. Архитектура бюджетирования в Бит.Финанс

Плюсы автоматизации бюджетирования в Бит.Финанс:

  • Конструкторы форм ввода или чтения данных. В отличие от УПП, формы учетных документов здесь не фиксированы, их можно настраивать, приводя в достаточно удобный вид.
  • Интерфейс для управления калькуляциями. Пересчет бюджетных моделей здесь можно проводить централизованно, а не создавая вручную документ калькуляции.

Mapping как в УПП. На среднем уровне.

Недостатки автоматизации бюджетирования в Бит.Финанс:

  • Работа через формы учетных документов. Несмотря на то, что формы документов стали гибкими (см. первый плюс), и в целом в этом аспекте сделан большой прогресс по сравнению с УПП, продукт все же не ушел от документно-ориентированной модели работы настолько далеко, насколько хотелось бы. Что, как мы сказали, для бюджетирования архитектурно неправильно и неудобно.
  • Отсутствие интерактивных форм ввода-вывода. В отличие от 1C:ERP, здесь их нет.

Anaplan


Флагманский продукт, недавно набравший большую популярность на мировом рынке. Предлагается только в облачной версии.

В отличие от остальных популярных решений (в т.ч. Hyperion и Planning Analytics), имеет немного специфическую специализацию: он лучше всего работает как калькуляционный сервис, который позволяет быстро автоматически пересчитывать объемные бюджетные модели с большим количеством зависимостей.


Рис. 12. Архитектура бюджетирования в Anaplan (популярный сценарий автоматизации)

Плюсы:

  • Калькуляция. Продукт сфокусирован на вычислениях, и хранит все данные в In-Memory OLAP, что позволяет пересчитывать все модели в режиме онлайн
  • Коллективная работа (в рамках подготовки плановых данных)
  • UX и произвольное моделирование.
  • ETL. Собственный и достаточно удобный ETL-инструмент
  • Требует минимальной IT-поддержки. Особенно по части моделирования
  • Стоимость. Дороговато для российского рынка, но в сравнении с международными лидерами (тем же Oracle Hyperion) полная стоимость владения выходит ниже
  • Скорость внедрения. В сравнении с Hyperion и Planning Analytics, продукт проще и в использовании, и во внедрении

Минусы:

  • Форматирование
  • Коллективная работа (в части работы с событиями: уведомления, рассылки и пр.)
  • Собственный синтаксис формул. Вообще использование собственного кода всегда недостаток с точки зрения конечных пользователей.
  • Иерархии. Раньше были проблемы с использованием разной иерархии справочника для разных бюджетных моделей. Проблема не важна для многих компаний, но критична для некоторых. Возможно (я надеюсь на это), к данному моменту Anaplan уже решил эту проблему.
  • Ad-hoc отчетность. Вообще это скорее специализация, чем недостаток: Anaplan в большей мере ориентирован на работу через моделирование, чем на быструю аналитику и репортинг.
  • Ограниченные возможности для масштабирования


И плюсом, и минусом Anaplan является его относительно четкая специализация и то, что он не покушается на IT-экосистему компании. Плюс в том, что продукт четко определился со своим функциональным назначением, и направления его развития достаточно предсказуемы. Он представляет собой сервис для проведения анализа Что-Если, расчета и утверждения планов (бюджетов), и планировать архитектуру заказчика нужно исходя из этого. Минус в том, что продукт не может заменить полноценное корпоративное хранилище данных, не может заменить все возможности BI, на нем не строят сложную корпоративную ETL-инфраструктуру, да и всю систему корпоративных вычислений. Все это не было бы проблемой, если бы продукт не предлагался только в облачной версии.

В отличие от Oracle и SAP (которые как раз претендуют на экосистемность), Anaplan не делает упор на возможность легко перегонять данные и инструменты между облаком и серверами компании. Таким образом, в его случае недостатки облачного продукта (с учетом тарификации в зависимости от объема используемых на сервере данных) проявляются наиболее заметно.

Поскольку он не заменяет собой универсальное корпоративное хранилище, в определенных случаях он может использоваться как калькуляционный сервис, складывающий плановые данные в собственное DWH компании, откуда для построения быстрых отчетов и дашбордов данные передаются в отдельную BI-систему.


Рис. 13. Архитектура бюджетирования в Anaplan (альтернативный сценарий автоматизации)

В целом, использование одновременно EPM и BI-систем является нормальной практикой.

Oracle Hyperion


Поставляется минимум в двух версиях: Oracle Hyperion Planning и Oracle Hyperion Financial Management.
Сейчас активно замещается новым продуктом Oracle EPM Cloud.

Из-за экосистемности, архитектуры могут приобретать самые разные виды, но типовая выглядит примерно так.


Рис. 14. Архитектура бюджетирования в Hyperion (возможный вариант)

На рисунке я привел BI-систему в качестве примера, поскольку аналитическая база данных Oracle Essbase является отличной базой для аналитики больших массивов данных в BI-инструментах.

В качестве ETL-решения предлагается Oracle Data Integrator, который выступает как универсальный механизм интеграции данных в экосистеме Oracle.

Плюсы автоматизации бюджетирования в Oracle Hyperion:

  • Экосистемность. В случае с Oracle отмечу как плюс, поскольку Oracle один из крупнейших поставщиков баз данных, и интеграция для компаний, кто работает на Oracle СУБД (а таких компаний много), действительно дает преимущества. В частности, удобнее распределять функционал между облаком и сервером. Кроме того, коллеги говорят о достаточно серьезных преимуществах по части безопасности в Oracleовой архитектуре (в этом я не специалист, если здесь таковые есть просьба поправить).
  • Ad-hoc (отчетность по запросу).

Недостатки автоматизации бюджетирования в Oracle Hyperion:

  • Экосистемность. Отмечу и как минус, поскольку, по имеющейся информации, Hyperion выбирается в основном именно компаниями, работающими на стеке технологий Oracle, и от его использования в не-Oracleовой среде в долгосрочной перспективе возможен меньший эффект.
  • Калькуляции. Продукт в меньшей степени заточен на пересчеты моделей, чем тот же Anaplan.
  • Сложность. Продукт не слишком легкий и с точки зрения инфраструктурной нагрузки, и с точки зрения UX (требует высокой квалификации и подготовленности пользователей).

IBM Planning Analytics


В основном предназначенная для крупного бизнеса, не слишком простая в развертке и администрировании, но весьма функциональная EPM-система. Сейчас IBM Planning analytics строится на базе технологий TM1 (лежащих в основе Cognosа).

Для ETL-процессов IBM предлагает использовать отдельный продукт IBM DataStage (ранее применялся Cognos DataManager), Turbo Integrator, Cognos Integration Server или внешний ETL-инструмент.

Типичная архитектура очень похожа на Hyperion.


Рис. 15. Архитектура бюджетирования в Planning Analytics (возможный вариант)

Сильные стороны IBM Planning Analytics:

  • Прогнозирование.
  • Работа с событиями.
  • Гибкость. Продукт нельзя назвать не требовательным к предварительной настройке, но он старается быть адаптированным к изменчивым моделям.
  • Неэкосистемность. Что удивляет в работе с IBM большой объем методических материалов, выпускаемых компанией, направлен на описание лучших практик взаимодействия продуктов IBM с другими решениями (в том числе, Oracle и SAP), причем в самых разных вопросах. На мой субъективный взгляд, хорошо, что в долгосрочной перспективе компания держит тренд на то, чтобы развивать интеграцию со сторонними системами (что позволяет поддерживать самые разные варианты сложившихся в компаниях архитектур), а не сокращать ее.
  • Поддержка продукта.

Минусы

  • Сложность. Как и в случае с Hyperion: требуется значительное обучение пользователей, не самая легкая инфраструктура.

SAP BPC


В целом, отличительные особенности SAP экосистемность, сложность архитектуры и инфраструктуры решений.

Как я уже говорил, SAP в разное время поддерживал и поддерживает различные варианты архитектуры; по наиболее свежей информации, флагманская версия архитектуры, рекомендуемая вендором на сегодняшний день, выглядит так:


Рис. 15. Архитектура бюджетирования в SAP Business Planning & Consoldation (пример)

Преимущества бюджетирования на базе SAP BPC:

  • Интеграция данных. Хотя она и сложна, она функциональна и быстра, и это главное для крупных компаний.
  • Визуализация.
  • Workflow.

Недостатки бюджетирования на базе SAP BPC:

  • UX и гибкость. Как и практически все продукты SAP, решение для бюджетирования требует высокой квалификации рядовых пользователей, а также очень требовательно к трудоемким предварительным настройкам.
  • Инфраструктурная нагрузка. К тому же, SAP постоянно изменяет архитектуру. С одной стороны, это хорошо: разработчики ищут новые способы реализации задач. С другой стороны, для компаний это создает трудности при переходах на новые версии. Например, несколько лет назад SAP стала активно отказываться от версии своего хранилища SAP BW для MS SQL Server, оставляя альтернативную ей версию NetWeaver; затем стала активно продвигать BW/4 HANA как альтернативу NetWeaver; сейчас тенденция идет к тому, что компания переводит фокус с десктопной EPM-системы на облачную версию SAP Analytics Cloud, переход на которую также требует некоторого перестроения архитектуры.
  • Цена. С точки зрения полной стоимости владения, фактически оказывается одной из наиболее дорогостоящих EPM-систем в мире, на что влияют в том числе изменения в архитектуре.


ETL-инструменты


Для построения ETL-процессов используют известные ETL-инструменты, среди которых множество продуктов тех же вендоров, что выпускают BI/EPM решения:

  • IBM DataStage
  • Informatica PowerCenter
  • Talend
  • Apatar
  • SAP Data Services
  • Oracle Data Integrator
  • Microsoft Azure Data Factory
  • и мн. др.

Статья будет постепенно пополняться, возможно с добавлением информации о новых продуктах и принципах разработки программных продуктов для бюджетирования с нуля.
Подробнее..

Задача о рюкзаке в контекстной рекламе для досок объявлений

24.08.2020 22:08:53 | Автор: admin
Я хочу здесь описать кейс с одним из лучших (на мой взгляд) способов управления лимитами дневных бюджетов для контекстных рекламных кампаний. Мне кажется подобная схема может подойти компаниям с не прямой монетизацией трафика, например для досок объявлений (classifieds), в тематике авто, недвижимости и всего-на-свете. Возможно не только им.

Это мой первый опыт написания публичных статей, так что сорри, если что не так. Буду рад конструктивным комментариям.


Почему с не прямой монетизацией?
Потому что компании у которых монетизация прямая и достаточно хорошо вычисляется ROI могут себе позволить инвестировать в рекламный источник до предела его емкости, до тех пор пока инвестиции окупаются. А вот сайты типа досок объявлений зачастую не могут себе этого позволить. Т.к. не имеют жесткой связи с возвратом инвестиций, т.к. сами не продают товары и услуги, а работают по рекламной модели. Проще говоря: сегодня можно потратить очень много денег в контексте, но завтра от этого у classified сайта не появится больше рекламных контрактов.

Поэтому для таких сайтов привлеченный из контекстной рекламы трафик монетизируется косвенно, с временной задержкой, и только часть трафика имеет прямую монетизацию, скажем в звонки.

темы для отдельного разговора
Темы медиапланирования, важности и способов построения сильного бренда, способы оценки влияния имиджевых РК на Performance кампании здесь стоит упомянуть, но они не будут затронуты.


В рамках данного эссе предположим, что нас уже есть медиаплан с бюджетом на следующий месяц и работающие рекламные аккаунты. Что дальше?

Как обычно выглядят рекламные аккаунты таких компаний?
  1. Скорее всего рекламных аккаунтов будет минимум два. Яндекс Директ и Google Ads и в этом плане нам сильно повезло, потому что конкуренция всегда лучше ее отсутствия, и это прекрасное поле для здоровой оптимизации
  2. Возможно рекламных аккаунтов будет еще больше, например из-за того что по разным аккаунтам разделены кампании по принципу целевого действия, проекту, команде сопровождения или по другому признаку
  3. Внутри каждого рекламного аккаунта будет набор рекламных кампании (РК), допустим их названия будут указывать на некоторый способ классификации кампаний (например, по регионам, по проектам, по типам размещения, по платформе)


В общем совершенно нормальной оказывается ситуация, когда количество всех рекламных кампаний довольно большое, скажем порядка нескольких тысяч. Конечно они как-то кластеризуются и там как правило присутствует логика, по которой можно выбрать то или иное подмножество кампаний, чтобы посмотреть статистику или провести ревизию настроек, или внести массовое изменение.

тема для отдельного разговора: когда делить кампании
Хочу отметить, лично мне гораздо приятнее работать с аккаунтами, в которых есть симметрия настроек. Я понимаю под симметрией следующее: если какой-то тип кампании заведен для одного из городов/проектов, то аналог этой кампании есть для всех регионов/проектов. Хорошо когда заведены максимально близкие по смыслу и настройкам кампании в Яндекс и Google. Такую развесистую систему немного тяжелее сопровождать, необходимо отслеживать чтобы обновления в РК приезжали симметрично, даже если они на паузе, но когда возникает необходимость их включить, то не приходится в панике заводить синхронизировать все настройки и вспоминать весь опыт уже аккумулированный в рабочих кампаниях.


С таким большим набором РК довольно сложно назначить дневные бюджеты. Этим мы и постараемся заняться.

Взглянем в медиаплан на следующий месяц
Давайте узлом медиаплана назовем сочетание всех признаков классификации, для которых задан бюджет на следующий месяц. Допустим определены (регион, продукт, и тип сделки, скажем аренда или продажа) и указан бюджет.

Скорее всего для узла в МП будет задан не только бюджет, но и целевые показатели по стоимости конверсии. Позволю себе, на мой взгляд, важное замечание:
Для назначения дневных бюджетов и попадания в МП по бюджету, целевые показатели стоимости конверсии совершенно не важны. Поэтому просто не смотрим на них сейчас. В дальнейшем я постараюсь объяснить почему.


тема для отдельного разговора: целевые показатели по медиаплану
Темами для отдельного разговора будут способы назначения ставок, встроенные автостратегии Яндекс и Google, кастомные биддеры. Ставки и автостратегии один из важных рычагов достижения целей по стоимости конверсии. При этом не единственный.


Постановка задачи
Мало ли что в этом мире бывает, но я почти 100% уверен в следующем утверждении:
Количество узлов медиаплана будет всегда меньше или равно количеству рекламных кампаний во всех аккаунтах.


После введения этой леммы мы можем говорить об объединении рекламных кампаний в пакеты, таким образом чтобы пакет соответствовал узлу медиаплана. Теперь наша задача будет формулироваться следующим образом:

Необходимо распределить бюджет по кампаниям в пакете таким образом чтобы максимизировать количество закупленных конверсий на заданный бюджет.


Как говорил мой преподаватель по численным методам, вот и все!. Мы пришли к формулировке классической задачи о рюкзаке. В качестве объема рюкзака выступает размер бюджета, в качестве ценности камней выступают данные о стоимости конверсии. Жадный алгоритм основа решения подобных задач. Рекомендую погуглить и почитать про задачу о рюкзаке подробнее.

В двух словах: кампании в пакете должны выстраиваться по возрастанию стоимости конверсии (конверсия м.б. составная с назначенными ценностями). Тем кампаниям, которые могут потратить больше и находятся наверху списка должна такая возможность предоставляться. Те кампании, которые оказываются внизу списка в случае дефицита бюджета должны сокращаться в первую очередь.

Таким образом происходит отбор самых дешевых РК на указанный бюджет в пакете. Поэтому как я указывал ранее, целевые показатели по стоимости применительно к этой задаче не важны (при этом они конечно важны в целом, но учитываются скорее при управлении ставками). Важно просто набрать максимум конверсий на указанный бюджет.

Сильные стороны подхода
  • Не важно из-за чего отдельная рекламная кампания стала вести себя лучше или хуже, как там поменялись настройки, ставки или рынок. Если такой бюджетировщик проходит по аккаунтам несколько раз в неделю со временем показатели такой кампании будут взвешены относительно других кампаний в пакете и ей будет назначен справедливый дневной бюджет.
  • Можно перестать думать о бюджетировании кампаний совсем и сосредоточить фокус внимания на заведении новых качественных РК и на сопровождении старых (по гайдам, креативно, с периодическим обновлением и т.п.)
  • Реализуется конкуренция между кампаниями Яндекс и Google. :)


Слабые стороны подхода
  • Скорость сходимости решения изо дня в день к оптимуму не мгновенная. Частично можно уменьшить этот эффект задавая вручную нужный бюджет в течении нескольких иттераций перебюджетировщика. Далее он подхватит тренд на основании накопленной статистики. Но нужно руководствоваться здравым смыслом
  • Когда в пакете мало РК нет пространства для оптимизации
  • Когда в пакете много РК может накапливаться перетрата, т.к. возможен эффект суммирования небольших перетрат на множестве РК, в случае если бюджет для них ограничен
  • Жадный алгоритм находит локальный оптимум
  • Стоимость конверсии в общем случае не является константой. Это как если бы ценность камня в задаче о рюкзаке не было бы константой.


Особенности
  • бюджеты между пакетами (узлами медиаплана) не перетекают


Комментарии по реализации
  1. очевидно по кампаниям должен происходить ежедневный сбор статистики из аккаунтов контекстной рекламы и из систем счетчиков, например Google Analytics или Яндекс Метрика
  2. результирующий отчет должен где-то храниться, в данном случае подходит любая БД, но удобнее всего на мой вкус Google BigQuery
  3. Для анализа данный и построения отчетов можно использовать Jupyter блокнот. Так же на мой вкус лучше Google Colab, т.к. легко организуется совместная работа в команде (как в Google Docs)
  4. Нужен сервер, на котором будет периодически запускать перебюджетировщик и происходить сбор статистики, обычно для такой задачи достаточно почти любого стандартного облачного сервиса AWS или Google Cloud


Пока у меня все.
Спасибо за внимание.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru