一尘不染

Jaspersoft iReport中的“向上滚动”组

sql

我有一个损益报告,当前有三个分组级别:1.药店2.客户3.包装类型

我已设置报告以提示用户提供药房,客户和包装类型的值。明细栏显示收入和保证金之类的度量。选择药房,客户或包装类型的默认值将返回组中的所有值。

我想知道-
如果用户选择“使用默认值”作为参数,是否可以告诉iReport汇总分组?现在,如果我选择了一家药店和一个客户,但使用默认的包装类型,则仍会得到几种包装类型的明细带。如何告诉iReport汇总所有包装类型?或者,如果未指定任何客户,则给定药房的所有客户总和?还是可以在查询中做到这一点?我有一个Oracle数据库,正在使用iReport
Professional 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

阅读 155

收藏
2021-05-05

共1个答案

一尘不染

您具有正确的SQL,可以准确地获取所需的原始数据。但是PACKTYPE在特殊情况下(用户指定no),您需要对其进行修改以强制(和其他字段)进行不同的分组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}不为null的情况下,生成的SQL将与以前完全相同。但是,在$P{packtype}null的情况下,您现在将获得一个硬编码的字符串来代替PACKTYPE_CODE。

大概您的报告正在分组PACKTYPE。因此,您应该能够保留报表中的布局和分组不变。

您可以想象各种变化,例如添加布尔输入控件以显式让用户选择是否在报告中保留PACKTYPE。但是,这个基本想法应该可以为您提供所需的东西。

2021-05-05