0

我有一份损益表,目前有三个级别的分组: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
4

2 回答 2

3

你有正确的 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}

在 where $P{packtype}is not null 的情况下,生成的 SQL 将与以前完全相同。但是在 where$P{packtype}为 null 的情况下,您现在将获得一个硬编码的字符串来代替 PACKTYPE_CODE。

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

您可以想象一些变化,例如添加一个布尔输入控件来明确地让用户选择是否将 PACKTYPE 保留在报告中。但是这个基本想法应该可以满足您的需求。

于 2012-06-11T16:19:19.537 回答
2

我会尝试在查询中执行此操作。如果没有看到您的查询,很难给出具体信息,但我可以提供一些我的代码作为示例。在这个特定的 jasper 报告中,我根据用户指定的 PGM_NAME 和 USER_NAME 显示值。但是,指定这些参数是可选的。如果未指定参数,则默认为所有 PGM_NAME 和/或 USER_NAME 报告。在我的 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})

这就像一个魅力。我希望这对您确定如何调整自己的查询有所帮助。如果您需要这方面的帮助,请在您的问题中发布查询本身。

于 2012-06-05T13:19:09.503 回答