Архитектура данных для решения отчетности в.NET
Я думаю, что мы находимся в довольно стандартной ситуации. Мы создали довольно сложную модель данных с примерно 100 таблицами и множеством взаимосвязей для хранения данных, связанных с этой сложной бизнес-проблемой (интрасеть с сотнями пользователей). Конечно, существует пользовательский интерфейс, и с тех пор, как приложение было создано, мы пошли по традиционному пути: предлагали некоторые стандартные отчеты, а затем даже загружали данные в формате CSV (на основе этих стандартных отчетов). После большого количества использования системы пользовательская база хочет получать все более и более сложные отчеты до такой степени, что создавать эти "одноразовые" не имеет смысла.
Очевидный следующий шаг (по крайней мере, на мой взгляд) - передать создание отчетов в руки бизнес-пользователя. Это может быть что-то вроде Crystal Reports, SQL Server Reporting Services или инструменты BI, такие как Tableau. Не имея большого опыта работы со многими из этих инструментов, я в растерянности. Более того, я борюсь с проблемой сложных таблиц базы данных и верю, что сообщество пользователей может понять сложные взаимосвязи таблиц в дополнение к открытию нашей схемы со всеми ее вычислительными полями только для базы данных, которые пользователь никогда не должен видеть,
Я считаю, что у меня есть несколько вариантов здесь (с точки зрения архитектуры данных и с точки зрения направления в целом), и они включают в себя:
- Упрощение схемы для бизнес-пользователя через API или более упрощенное "представление" таблиц базы данных - что лучше для бизнес-пользователя, но требует предварительной работы и обслуживания.
- Предоставление бизнес-пользователю возможности видеть все таблицы - что, очевидно, облегчает обслуживание, но требует документации, обучения, объяснений и т. Д.
- Другие варианты BI (с которыми я, честно говоря, не знаком) - куб OLAP и т. Д.
Мне нужны отзывы об опыте в этой области и предлагаемые направления с точки зрения архитектуры данных и / или использования продукта.
3 ответа
Решение, о котором вы думали, является сложным.
1-й шаг - упаковка данных. Поскольку вы хотите предоставить своим пользователям некоторый контроль над отчетами, имейте в виду, что не все таблицы требуются пользователям, и не все объединения могут иметь смысл для пользователей. Вы не можете открывать представления непосредственно для них, поэтому вы должны создавать удобные оболочки. как бизнес-объекты, такие вещи, имена и свойства которых имеют для них больший смысл. Пользователи будут обязаны использовать только эти объекты. Объекты должны обрабатывать таблицы, соединения и представления внутри. Конечно, они не должны каким-либо образом изменять исходные данные.
2-й шаг - предложить пользователям что-то вроде селектора. Это было бы очень сложной задачей, так как вы должны были бы позволить пользователям выбирать, какие бизнес-объекты им следует использовать? как они хотят объединить данные из разных объектов, соединяя их каким-либо образом? какие данные они хотели бы видеть в отчетах? они могут захотеть применить некоторые функции, такие как Sum, Avg, Min, Max и т. д. перед отображением, и иногда они могут захотеть сгруппировать поля. иногда требуется сортировка по разным полям, а иногда ваши пользователи могут захотеть указать критерии. поэтому ваше приложение должно каким-то образом разрешать это.
3-й шаг будет дизайнером. Это должно быть проще. либо вы можете ограничить пользователей отображать простые табличные отчеты, и они не имеют большого контроля здесь. в противном случае вам может потребоваться создать конструктор отчетов, который позволит им размещать поля любым удобным для них способом. Мое предложение заключается в том, что изначально вы должны ограничить их только типами отчетов с заранее заданным форматом. изменятся только подписи и данные.
Изначально, просто для демонстрации, спроектируйте несколько простых и небольших бизнес-объектов. 2 или 3 объекта с не более чем 7-8 свойствами будут в порядке. В настоящее время никакие функции не должны быть доступны, они только усложнят реализацию для вас / вашей команды. Пользователи на этом этапе должны иметь возможность определять простые критерии и порядок сортировки не более того, и они имеют предопределенный формат отчета, который можно отобразить. Если идея увенчалась успехом, и вашему клиенту она понравилась, вы можете стремиться распространить ее на свои более 100 таблиц, сложные функции и условия критериев.
Вы должны контролировать дизайн и разработку отчета. Особенно в случае сложной структуры базы данных. Имейте в виду, что если в отчете указаны неверные данные, виноваты будут ваши программы.
Создание документации базы данных стоит дорого, поэтому я бы попросил клиента найти человека, которого я могу обучить. В идеале этот человек также создаст некоторую документацию для базы данных. Я бы посоветовал вам также рассмотреть возможность написания представлений SQL и хранимых процедур и позволить клиенту создать отчет Crystal. Таким образом, вы предоставите данные, но они смогут представить их так, как они хотят
После того, как вы решите проблему с разработкой отчетов, вам нужно найти способ запуска отчетов. Вам нужен универсальный движок, который сможет добавлять и запускать внешние отчеты. Полагаю, вам нужно будет разработать новый модуль или приложение, которое будет анализировать отчеты, подготавливать экран параметров и запускать их. Службы отчетов будут хорошим выбором, потому что вы можете установить и настроить сервер, и все готово. Это бесплатно, если у них есть лицензия SQLServer. Если вы решите использовать Crystal Reports - сервер Crystal Reports будет делать то же самое, но это слишком дорого, поэтому я предполагаю, что это будет вариант, только если у вашего клиента уже есть лицензия. Если приложение представляет собой приложение для внутренней сети, вы можете попробовать некоторые из сторонних зрителей. Они довольно дешевые. Я считаю, что 1000 долларов хватит на покупку лицензий на 100 пользователей. С хорошим списком сторонних наблюдателей Crystal Reports можно ознакомиться по этой ссылке: http://kenhamady.com/cru/comparisons/crystal-reports-viewers
Я использовал несколько из них, и я бы посоветовал вам проверить R-Tag ( http://www.r-tag.com/) - он работает как с отчетами Crystal, так и с SSRS и поддерживает установку в интрасети. Jeff-net ( http://www.jeff-net.com/jnrrv.htm) тоже подойдет (для отчетов Crystal). Вы можете попробовать другие - есть некоторые бесплатные, но сначала протестируйте их с небольшим количеством пользователей, потому что обслуживание в сетевой среде может быть дорогим.
Честно говоря, главной проблемой для вас будет то, на что похожа ваша архитектура интерфейса? Клиент как с WPF или Windows Forms или ASP.NET или HTML? Это действительно имеет огромное значение, так как я, например, поражен разнообразием инструментов отчетности, построенных вокруг Jquery и Javascript, таких как "HighCharts", "FusionCharts", "DevExpress" (часть более крупного дополнения) в том, что они могут сделать по сравнению с более традиционными SSRS и Crystal Reports. Веб-отчеты превосходят возможности клиентских отчетов в таких областях, как управляемые событиями отчеты, многоуровневая отчетность или срезы
Честно говоря, если бы это был выбор между Crystal и SSRS, я бы выбрал SSRS, поскольку я, как разработчик, считаю, что SSRS проще использовать его части. Как правило, SSRS состоит из трех частей:
- Соединение (я) с базой данных, плоским файлом или службой (или другими контейнерами данных тоже). Можно поделиться для повторного использования.
- Набор (ы) данных, представляющий данные для доступа. Можно поделиться для повторного использования.
- Набор объектов, которые могут быть таблицами, матрицами или графическими диаграммами.
Основным преимуществом SSRS является то, что вы можете быстро освоить основы построения отчетов и публиковать отчеты, а также иметь встроенный сервис, который позволяет включать подписки по электронной почте (при условии, что у вас есть работающий SMTP-сервер), сохранять файлы в подписках, кэшировать наборы данных и получать доступ к отчеты через.NET с непосредственным общением со службой, чтобы заставить службу предоставлять отчеты по запросу о событиях в приложении.
Несмотря на то, что SSRS имеет некоторые ограничения, сервис можно использовать через форму HTML, доступ.NET или оставшийся URI, что делает его достаточно гибким.
Tableau - это в значительной степени инструмент для аналитика, который выполняет большую часть кода за вас. Если вы хотите дать людям "песочницу" и сделать измерения, похожие на кубы, а затем поиграть с данными, это впечатляет. Хотя не слишком много с настройкой, так что это макет может быть то, что вы видите, то, что вы получаете. Но, говоря о том, что он может многое сделать сразу после установки, он впечатляет пониманием пространственных данных, многослайдерных входов, форматированием графиков и другими задачами, которые не встроены в другие службы отчетов.