我有一份盈亏报告,目前有三个级别的分组: 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
答案 0 :(得分:3)
您可以正确使用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}
不为null,则生成的SQL将与之前完全一样。但是在$P{packtype}
为空的情况下,您现在将获得一个硬编码的字符串来代替PACKTYPE_CODE。
据推测,您的报告正在PACKTYPE
进行分组。因此,您应该能够保持报告中的布局和分组不变。
您可以想象添加布尔输入控件之类的变体,以明确让用户选择是否将PACKTYPE保留在报表中。但是这个基本想法应该能满足你的需求。
答案 1 :(得分: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})
这就像一个魅力。我希望这有助于您确定如何调整自己的查询。如果您对此有所帮助,请在您的问题中发布查询。