В BIRT можно создать диаграмму из столбцов обобщенных данных? - PullRequest
0 голосов
/ 10 января 2020

Можно ли создать линейную диаграмму, используя обобщенные данные из набора данных?

Мой сценарий следующий: подробный раздел: каждая из ячеек представляет собой одно выходное поле в наборе данных
ЯНВАРЬ ФЕВРАЛЬ

item1 RXR

item2 XAR

item3 RRR

нижний колонтитул: здесь мы подсчитываем вхождение каждого значения в месяц с использованием элементов агрегации подсчета и фильтруем по значению
ИТОГО:
R 2 1 3

X 1 1 0

A 0 1 0

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

Требуется Диаграмма

И вот что у меня есть: вывод отчета

оформление отчета

В EXCEL это действительно просто, но я не могу понять, как это можно сделать в BIRT.

Я думал что-то вроде создания нового набора данных с 3 выходными полями для R, X и A, и каждая строка будет составлять один месяц, поэтому у меня будет транспонированная таблица, и таким образом мне будет намного легче для графа это. Но я не могу сделать это, используя поля агрегации, и я не могу узнать, как это сделать с полями вывода из основного набора данных.

Есть идеи? Если вам нужен исходный файл rptdesign, я могу предоставить его вам, но логика c в нем может быть трудной для понимания.

Любая помощь приветствуется, и спасибо заранее.

Прекрасного 2020 года.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Спасибо Kekzpanda за вашу помощь и время, оказанное мне в этом вопросе.

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

Например, вам нужно переставить таблицу из 10 столбцов и 3 записей

  1. В методе инициализации отчета создайте массив с [10 , 3] размерность // индексы двумерного массива var i = 0; var j = 0; // определение массива и его инициализация с использованием итерации for var matriz = new Array (10); для (i = 0; i <10; i ++) {matriz [i] = new Array (3); } // перезапускаем индексы массива на случай, если вам понадобится go через него в будущем i = 0; j = 0; </p>

  2. Затем необходимо сохранить значение поля агрегации в одной из позиций в массиве. Для этого щелкните поле агрегации и go в методе onCreate и добавьте следующий код:

    matriz [0] [1] = this.getValue ();

По окончании sh всех полей агрегации у вас будет массив с таблицей транспонирования. ПРОВЕРЕНО!

Переместите данные в массиве в новый набор данных, выберите метод выборки и добавьте что-то вроде этого: if (i> = array.length) return (false); // когда вы завершаете sh прохождение каждого элемента в массиве.

row ["A"] = matriz [i] [0]; грести [ "В"] = Matriz [я] [1]; строка [ "C"] = Matriz [I] [2]; я ++; // увеличиваем первый индекс на 1, чтобы перейти к следующей строке в массиве

return (true);

Теперь у вас есть новый набор данных с данными транспонирования ,

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

Надеюсь, это поможет.

Пока.

0 голосов
/ 14 января 2020

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


Агрегирование

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

enter image description here

Здесь вы агрегируете на языке в соответствии с вашим источником данных. Если это SQL, я думаю, операторы COUNT и GROUP BY сделают эту работу. Создайте все столбцы, которые вам нужны для вашего графика здесь.

Кстати: вычисляемые столбцы обычно являются серебряной пулей в BIRT. Я использую их практически для любого предварительного вычисления или создания пользовательского поля.

Визуализация

Вы не упомянули библиотеку, которую вы используете для графиков, поэтому я предполагаю, что вы хочу использовать базовые графики BIRT c. Базовые графики c с месяцами по оси X сделают вашу работу. Я просто хочу добавить, что у вас есть два варианта для нескольких рядов: вы можете либо подготовить свой набор данных, чтобы можно было заполнить график сериями для каждого типа (одна строка в примере с диаграммой), либо, возможно, проще: используйте необязательную группировку по сериям y в ваших вычисляемых столбцах (как уже упоминалось):

enter image description here

Таким образом, ваш график создаст для вас отдельный ряд. Надеюсь, это поможет!

Если вы застряли с базовыми c birt grpahs в целом, вы можете подумать о том, чтобы найти библиотеку графов на основе JavaScript, которая делает именно то, что вам нужно, и реализовать это. Помните: вы можете поместить почти все, что основано на JavaScript, в BIRT.

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

...