This is my last post about Pentaho Report Designer and Bean Shell Scripting. So far we covered an introduction to bean shell in pentaho and how to obtain useful debug information from Pentaho Report Designer, PRD from now on.
Chart Post-Processing Script
For our third post we can use the report attached in our first post. We are going to modify our dataset, of course you are free to work with the same table, but I will modify it so the data and the chart will be more consistent. As you can see below the only change I made is the type of the second column, from type String to Date. So now we will identify how many friends a specific character had during a period.
Pentaho provides a nice way to include charts in our reports. In the palette just click and drag a Chart into the Report Footer band, double-click the sample chart and configure it. For this example I will add a Line Chart for the value-columns Friends and AvgFriendsBSH.
Parameters that I used for this example:
- Common: Defined the category and the values
- Category-column: Date
- Value-columns: Friends, AvgFriendsBSH
- Series: Specified the data name for the legend
- Series-by-value: Friends, Average
- X-Axis: Turned 90º the X-Axis lables
- x-axis-label-rotation: 90
- Values: Show the labels in our data
- Show-item-labels: Show Labels
We should see something like:
As you can see the there are some problems some labels overlays between series: some labels are partialy shown, and it does not make much sense to have labels for each value of the average since they are always the same.
A first step to solve this problem is to resize the item-label-font in Value section to 6px so all the labels will fit in the canvas, but we still have all the labels in our average line. A way to solve this without delete the labels in our series Friends is by applying a Chart Post-Processing Script. Chart Post-Processing Script property gives you access to JFreeChart APIs so you can modify the chart after the report renders.
We want to modify the visibility of the labels item. This can be accomplished by Chart Post-Processing Script Language to beanshell and adding the following line to Chart Post-Processing Script chart.getCategoryPlot().getRenderer().setSeriesItemLabelsVisible(1, Boolean.FALSE);
The mentioned code returns the renderer for the primary dataset and changes the default value of setSeriesItemLabelsVisible which allows us to set the visibility of item labels for the series, in our case to FALSE. In our example setSeriesItemLabelsVisible(1, Boolean.FALSE) corresponds to the average series.
The final result: