通过折线图中的参数添加一系列类别?

时间:2013-08-29 07:31:33

标签: jasper-reports ireport

我有一个折线图,我有四个系列的类别,如: -

收入, 目标,成本和毛利率。

默认情况下,图表将包含所有四个类别。

现在我想通过参数(复选框)传递这些类别,用户可以在其中选择他想要在图表中看到的类别,因为有时他只想查看收入趋势并且对一年中的目标趋势不感兴趣。 输入控件的默认值为Revenue,如果他想查看目标,他可以通过选择Target复选框参数为Target添加类别系列。

这样的事情: -

enter image description here

在iReport中可行吗?

我的类别系列代码: - 在此类别系列中,我创建了一个0值的dumy系列。

<categorySeries>
                        <seriesExpression><![CDATA[new Boolean($P{p_target}) ? "Target" :"Target"]]></seriesExpression>
                        <categoryExpression><![CDATA[new Boolean($P{p_target}) ? $F{MTHYR} :""]]></categoryExpression>
                        <valueExpression><![CDATA[new Boolean($P{p_target}) ? $F{TARGET} : $F{dumy}]]></valueExpression>
                    </categorySeries>
                    <categorySeries>
                        <seriesExpression><![CDATA[new Boolean($P{p_revenue}) ? "Revenue" :"Revenue"]]></seriesExpression>
                        <categoryExpression><![CDATA[new Boolean($P{p_revenue}) ? $F{MTHYR} :""]]></categoryExpression>
                        <valueExpression><![CDATA[new Boolean($P{p_revenue}) ?$F{REVENUE}  : $F{dumy}]]></valueExpression>
                    </categorySeries>
                    <categorySeries>
                        <seriesExpression><![CDATA[new Boolean($P{p_cost}) ? "Cost" :"Cost"]]></seriesExpression>
                        <categoryExpression><![CDATA[new Boolean($P{p_cost}) ? $F{MTHYR} :""]]></categoryExpression>
                        <valueExpression><![CDATA[new Boolean($P{p_cost}) ? $F{COST} : $F{dumy}]]></valueExpression>
                    </categorySeries>
                    <categorySeries>
                        <seriesExpression><![CDATA[new Boolean($P{p_gross_margin}) ? "Gross Margin" :"Gross Margin"]]></seriesExpression>
                        <categoryExpression><![CDATA[new Boolean($P{p_gross_margin}) ? $F{MTHYR} :$F{MTHYR}]]></categoryExpression>
                        <valueExpression><![CDATA[new Boolean($P{p_gross_margin}) ? $F{GROSS_MARGIN} : $F{dumy}]]></valueExpression>
                    </categorySeries>

在@MisterMichaelK建议的解决方案后,我将虚拟系列默认值更改为-50,但现在我的问题是类别表达式,这也是必需的字段,If语句是这样的:new Boolean($ P {p_revenue})? $ F {MTHYR}:“”,但它总是显示每个系列的内容,如上图所示: - enter image description here

1 个答案:

答案 0 :(得分:0)

首先,在您的iReport图表中,为每个复选框输入创建布尔值(true / false)。

接下来,右键单击您的图表并选择“图表数据”。单击“详细信息”。选择您的系列,单击“修改”。在“值表达式”框中,创建一个与此类似的if语句:

$ P {TargetBox} ==是吗? $ F {YourSeries}: - 1

其中$ P {TargetBox}是您创建的参数的名称,$ F {YourSeries}是您用于该系列的任何表达式。 -1可以是一个大的负值,你需要让你的线在图表的0行下消失。

确保将图表的“范围轴最小值”(在图表属性中)设置为0,以便在渲染时不会在0行下显示任何内容。

对您创建的每个复选框重复此操作。这应该使系列仅在选中相应的框时显示。