“卷起”组的JasperSoft的iReport(“Rolling up” groups in Ja

2019-06-25 04:52发布

我目前有三个层次分组的损益报告:1.药房2.客户3.包装形式

我已经设置了该报告,以提示用户对药房,客户和包装类型提供值。 详细信息区域显示如收入和利润的措施。 选择用于制药,客户或包装类型的默认组中返回所有值。

我想知道 - 有什么办法,如果用户的参数选择“使用默认值”,告诉iReport的卷起分组? 现在,如果我选择一个药房和客户,但使用的包装类型的默认,我仍然得到一个细节带区的每个包装的几种类型的。 我怎么能告诉的iReport在所有包装类型的总结? 或者,如果没有指定客户,总结上所有的客户对于给定的药房? 或者,我可以做的查询? 我有一个Oracle数据库和正在使用的iReport专业4.5.1。

谢谢,丽莎

编辑以添加代码:

 SELECT
      FAC.FILL_MONTH AS FILL_MO,
      FAC.PHAR_CODE AS PHAR_CODE,
      FAC.FAC_ID AS FAC_ID,
      FAC.PACKTYPE_CODE AS PACKTYPE,
      SUM(FAC.TOT_RXCOUNT_NUM) AS RX_COUNT,
      SUM(FAC.TOT_REVENUE_AMT) AS REVENUE,
      SUM(FAC.TOT_COGS_AMT) AS COGS,
      SUM(FAC.TOT_MARGIN_AMT) AS MARGIN
 FROM
      MySchema.Table FAC
 WHERE
      FAC.FILL_MONTH BETWEEN $P{startdate} AND $P{enddate}
      AND $X{IN, FAC.PHAR_CODE, pharmacy}
      AND $X{IN, FAC.FAC_ID, facility}
      AND $X{IN, FAC.PACKTYPE_CODE, packtype}
 GROUP BY
      FAC.PHAR_CODE,
      FAC.FAC_ID,
      FAC.PACKTYPE_CODE,
      FAC.FILL_MONTH
 ORDER BY
      PHAR_CODE ASC,
      FAC_ID ASC,
      PACKTYPE ASC,
      FILL_MO ASC

Answer 1:

你有SQL正确得到正是你想要的原始数据。 但是,你需要修改它迫使PACKTYPE (等领域),以不同的组在用户没有指定的特殊情况PACKTYPE

创建一个新的参数$P{PACKTYPE_SELECT_SQL} 。 它的默认值是直接基于现有参数的值$P{packtype} 。 (这意味着$P{packtype}必须首先出现在生成.jrxml。)设置$P{PACKTYPE_SELECT_SQL}的默认值是这样的:

$P{packtype}==null ? " 'All Package Types' " : " FAC.PACKTYPE_CODE "

然后修改这样的SQL查询(只有一行被修改,剩下的只是上下文):

SELECT
     FAC.FILL_MONTH AS FILL_MO,
     FAC.PHAR_CODE AS PHAR_CODE,
     FAC.FAC_ID AS FAC_ID,
     $P!{PACKTYPE_SELECT_SQL} AS PACKTYPE,
...
WHERE
     FAC.FILL_MONTH BETWEEN $P{startdate} AND $P{enddate}
     AND $X{IN, FAC.PHAR_CODE, pharmacy}
     AND $X{IN, FAC.FAC_ID, facility}
     AND $X{IN, FAC.PACKTYPE_CODE, packtype}

在该情况下, $P{packtype}不为空,则生成的SQL将完全因为它是以前。 但在案件$P{packtype}为空,你现在将代替PACKTYPE_CODE的得到一个硬编码字符串。

想必你的报告上进行分组PACKTYPE 。 所以,你应该能够留在报告中不变的布局和分组。

你能想象像加一个布尔输入控件明确地让用户选择是否保留PACKTYPEs报告或不变化。 但这个基本的想法应该得到你所需要的。



Answer 2:

我会尝试做查询。 这是很难给出具体细节没有看到您的查询,但我可以提供我的一些代码作为一个例子。 在这个特殊的碧玉报告,我显示根据用户指定的PGM_NAME和USER_NAME值。 但是,指定的那些参数是可选的。 如果未指定参数,默认的是报告为所有PGM_NAMEs和/或USER_NAMES。 在我iREPORT分享到人人查询,WHERE子句有下面几行:

WHERE   ($P{PGM_NAME} IS NULL OR job.pgm_name = $P{PGM_NAME})
AND     ($P{USER_NAME} IS NULL OR details.username = $P{USER_NAME})

这就像一个魅力。 我希望这有助于你决定如何调整自己的查询。 如果你想获得这种帮助,请张贴查询本身在你的问题。



文章来源: “Rolling up” groups in Jaspersoft iReport