Нужно ли нам писать собственное промежуточное ПО или мы можем использовать доступный инструмент отчетности - PullRequest
0 голосов
/ 03 ноября 2010

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

Недавно нам удалось перенести все необработанные данные в базу данных SQL.

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

  1. JasperReports - Может помочь нам выполнить рендеринг формата отчета?
  2. OpenReport - Предоставляет ли нам веб-доступ к сгенерированному отчету?

В настоящее время наши необработанные данные выглядят примерно так: alt text

Основываясь на демонстрации, предоставленной OpenReport и JasperReports, яПолагаю, что мы можем создать такой отчет, как

Summary Report for Lot 2
------------------------

Measurement     Type        Value
----------------------------------
Lead 1          Average     1.30
Lead 1          StdDev      0.16
.
.
Lead 2          Average     2.08
Lead 2          StdDev      0.55

Однако это немного далеко от того, что мы хотим.Нам нужно

  1. Взять несколько строк Lead 1, 2, 3 ... в категорию «Среднее» и иметь функцию логического кода для пересчета их в одну Lead строку.
  2. Сделайте то же самое для остальной статистики, как StdDev ...
  3. Имейте формат отчета, например:

Summary Report for Lot 2
------------------------

Measurement     Average     StdDev
----------------------------------
Lead            2.33        1.23

Пока что длядемонстрацию, которую я видел, большинство из них просто 1 to 1 mapping из необработанной базы данных для отчета.В середине 1 to 1 mapping я знаю, что может быть несколько простых операторов SQL для фильтрации и манипулирования.Я не видел пример, который может выполнять обработку sophisticated.

Причина, по которой я называю это sophisticated, как в коде C ++, мы требуем выполнить обработку std :: string, используя std:: vector, std :: map структура данных и арифметическая операция.Я сомневаюсь, что оператор SQL может выполнять аналогичные действия.

Исходя из моего перечисленного требования 3 , возможно ли, что я могу использовать имеющийся на рынке инструмент для составления отчетов?Или нам нужно разработать собственное промежуточное ПО для выполнения такой задачи?(Perl / Python / ... что угодно)

1 Ответ

1 голос
/ 03 ноября 2010

Пока ваша схема базы данных адекватна, вы должны иметь возможность делать то, что нужно в SQL и JasperReports.

С PostgreSQL вы можете делать такие вещи, как манипулирование строками , группирование, агрегатные функции и т. Д.
С JasperReports вы можете манипулировать своими данными с помощью Java, использовать подотчеты и т. Д.

Конкретный пример можно сделать так:

  • Используйте этот запрос для получения данных, используя только часть перед пробелом ('Lead'): select split_part(measurement_type, ' ', 1), measurement_statistic_type, value
  • Используйте сводную таблицу в JasperReports - она ​​автоматически агрегирует данные так, как вы этого хотели.

Существуют также чистые SQL-способы для достижения этой цели.

Примечание:

  • Убедитесь, что вы разрабатываете схему базы данных для удовлетворения ваших потребностей в отчетности (например, вместо разделения measurenet_type, почему бы не иметь два столбца - measurement_name / measurement_id?)
  • Вы не можете агрегировать stddev. Среднее значение stddev отличается от стандартного значения stddev для всего населения.
...