ADG Оставить заявку
Блог Данные и аналитика 5 мин чтения

SSRS 2008 для финансовой отчётности: PDF по расписанию вместо Excel с макросами

Развернули SQL Server Reporting Services 2008 для финансового блока клиента. Руководство получает отчёты по почте в PDF без участия IT и без открытия Excel.

Контекст момента

SQL Server Reporting Services 2008 - зрелая платформа корпоративной отчётности с подпиской на доставку, версионированием и экспортом в PDF/Excel/Word

В сентябре мы запустили инкрементальный ETL для одного клиента и разобрались с CDC в SSIS. Финансовые данные в витрине обновляются аккуратно каждую ночь. Хорошо. Только пользоваться ими умела одна Надежда Ивановна из финансового отдела - она же владела мастер-файлом Excel с запросами и макросами. Остальные руководители ждали её отчётов, как рассылки. Если она уходила в отпуск, отчётность фактически замирала.

Нас это задело. Решили закрыть вопрос через SSRS 2008, который уже был лицензирован в составе SQL Server 2008 Enterprise.

Почему SSRS, а не просто отчёты в Excel

У клиента не было запроса на «BI-платформу». Запрос был простой: финансовый директор хочет получать отчёт по понедельникам в восемь утра у себя в почте, не открывая никаких систем. Контролёры хотят то же самое, но ежедневно и в разбивке по подразделениям.

Excel с макросами это принципиально не решает - он требует человека, который нажмёт кнопку. Scheduled Task с VBA-скриптом - костыль, который падает при смене пароля учётки или переезде сервера.

SSRS 2008 закрывает именно этот кейс: отчёт живёт на Report Server, подписка настраивается через веб-интерфейс, рендеринг и доставка - дело сервиса, без участия людей.

Что развернули и как

Сам Report Server поднялся без приключений - он идёт в комплекте с SQL Server 2008, отдельной установки не требует, только конфигурация через Reporting Services Configuration Manager. Выбрали Native Mode - никакого SharePoint, клиенту не нужна интеграция с порталом, только веб-интерфейс Report Manager.

База данных Report Server уехала на тот же SQL Server 2008, где живёт и DWH. Ресурсы позволяют, отчёты не генерируются в параллель с ETL - расписание сдвинули так, чтобы витрина к моменту рендеринга уже обновилась.

Для подключения к данным сделали один shared data source - строка подключения к читающей учётке DWH, которая имеет права только на SELECT к витрине. Отчёты используют этот источник, не зная ничего о логинах и серверах.

Как устроены подписки

Это, пожалуй, ключевая вещь, ради которой всё и затевалось. В SSRS подписка - это задание с расписанием, которое говорит: взять такой-то отчёт, отрендерить в нужном формате, отправить на такие-то адреса.

Несколько вариантов, которые сделали для клиента:

  • Недельный сводный отчёт. PDF, каждый понедельник в 08:00, список адресов - финдиректор, его заместитель, два руководителя направлений. Параметр периода - прошлая неделя, вычисляется выражением прямо в подписке.
  • Ежедневный оперативный. Excel (чтобы контролёры могли сортировать и фильтровать локально), каждый будний день в 07:30. Здесь параметр - вчерашняя дата.
  • Ежемесячный управленческий. PDF, первый рабочий день месяца, другой набор адресов, другой шаблон - с логотипом, разбивкой по статьям и итоговыми страницами.

Параметры в подписках задаются явно или через выражения на VB.NET - несколько строк типа =DateAdd("d", -1, Today()). Неудобно, что редактор параметров в Report Manager спартанский, но работает.

SQL Server Agent берёт на себя срабатывание расписаний - подписки транслируются в агентные джобы, можно видеть историю выполнения прямо в Management Studio.

Что оказалось нетривиальным

Права на уровне строк. Контролёры разных подразделений не должны видеть чужие данные. В SSRS нет встроенного row-level security в привычном смысле - пришлось параметризовать отчёты через login пользователя. Используем встроенное выражение User!UserID как параметр, который тянет из витрины только данные по подразделению этого пользователя. Работает, но требует аккуратной настройки витрины - там должен быть маппинг логина на подразделение.

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

Рассылка через корпоративный SMTP. Прямолинейно - прописали relay в конфигурации Report Server, указали отправителя. Единственная неприятность: если письмо не доставилось (например, ящик переполнен), Report Server просто пишет ошибку в лог - никакого bounce-handling нет. Решили мониторингом: Zabbix смотрит на историю выполнения подписок через агентный джоб.

Итог на сегодня

Первые подписки работают третью неделю. Надежда Ивановна перестала быть единой точкой отказа - что, кажется, её немного разочаровало, но руководство явно довольно. Финдиректор получил отчёт в понедельник в 08:00, написал «работает», и на этом его интерес к деталям закончился.

Техническая задолженность пока одна: хотим перенести источник данных для ряда отчётов с прямого запроса к витрине на Analysis Services куб - там где агрегации по многим измерениям. Куб строили на том же SQL Server 2008, MDX-запросы в SSRS поддерживаются. Но это следующий этап, сейчас приоритет - убедиться что подписки стабильны, и добавить ещё пару отчётных форм, которые просит контроль.

Для клиентов, у которых отчётность держится на одном человеке с Excel и набором макросов, автоматизация отчётности в рамках DWH/BI закрывает эту проблему без экзотики - инструменты уже лицензированы, осталось настроить.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.