Используя IReport, я создаю отчет и пытаюсь отобразить столбчатую диаграмму с накоплением, чтобы отобразить следующий набор результатов из запроса.
В основном это рабочие записи Shift.A Shift
может иметь несколько Operators
, а каждый оператор может иметь несколько Entries
.Каждая запись похожа на состояние активности оператора в смену, например (Added, Started, On-Break, Joined, Ended)
в смену.В конце концов Duration
- это время (в секундах), в течение которого эта конкретная запись продолжалась.IE разница между Entry_Time и следующим Entry_Time.Как видите, записи сгруппированы по оператору покупки и упорядочены по времени их появления.
Ожидается, что на графике будет отображаться время на ValueAxis (Yось), код оператора для категории (ось X) и типы записей в виде (серии), уложенные вдоль полос с разными «назначенными цветами», которые должны представлять «продолжительность» соответствующей записи.Тип записи может быть повторяющимся, например, «CUTTER-1» дважды включался и снова присоединялся.Поэтому в идеале диаграмма должна представлять обе эти записи в отдельных барах на BarStack в те времена против CUTTER-1.
Попытка # 1
При указанных выше настройках я получил эту диаграмму.Он правильно показывает операторы, но имеет две проблемы Prob # 1 , StackedBars не верны (то есть должно быть несколько записей OnBreak & Joined для оператора CUTTER-1). Prob # 2 Кроме того, в верхней части ValueAxis я хочу показать Entry Times.
Для краткости я не добавил два столбца CREATED_DELPHI
& ENDED_DELPHI
в приведенном выше результатеустановить скриншот.Это в основном показывает время начала и окончания смены и остается неизменным на протяжении всего времени.Обратите внимание, что время хранится как двойное значение в БД (пожалуйста! Не спрашивайте почему? И давайте продолжим ...), как показано в столбце 'ENTRY_TIME_DELPHI'.
Попытка # 2
Для решения второй проблемы я добавил Max & Min Range Axis Values
, которые являются CREATED_DELPHI & ENDED_DELPHI соответственно.Добавил ссылку на Customizer Class
, то есть ChartHHmmCustomizer и изменил двойные значения на их представление временной метки, как показано ниже.
public class ChartHHmmCustomizer implements JRChartCustomizer {
@Override
public void customize(JFreeChart jfchart, JRChart jasperChart) {
//Get the category plot
CategoryPlot plot = (CategoryPlot) jfchart.getPlot();
double rangeMinValue = plot.getRangeAxis().getRange().getLowerBound();
double rangeMaxValue = plot.getRangeAxis().getRange().getUpperBound();
//Create a date axis
DateAxis yAxis = new DateAxis();
yAxis.setMinimumDate(HibernateUtil.convertDelphiToDate(rangeMinValue));
yAxis.setMaximumDate(HibernateUtil.convertDelphiToDate(rangeMaxValue));
//Override the date format
yAxis.setDateFormatOverride(new SimpleDateFormat("dd/HH:mm"));
//Customise tick unit
yAxis.setTickUnit(new DateTickUnit(DateTickUnitType.MINUTE, 30));
//Set it to the range axis
plot.setRangeAxis(yAxis);
}
}
Я зафиксировал все оси к этой точке, но, как и ожидалось, столбцы не будут отображаться, так как значения (DURATION) значительно превышают определенные значения диапазона MAX & MIN.
Есть ли предпочтительный способ отсюда?Использовать длительности для построения столбцов против каждого оператора в правильном порядке и ширине.Я знаю время начала Shift и интервал для каждой записи.
Если я попытаюсь обновить длительности в plot.getDataset();
create newCategoryDataSet, добавьте ShiftStartTime в него, затем plot.setDataset(newCategoryDataSet);
.Прямо сейчас это просто показывает ненормальный результат.Так что любое направление будет полезным.Спасибо