前不久设计了一个很复杂的报表,中间涉及到汇总,又分类,再汇总,外连接,排序,前十等等
用到了63个超复杂sql的数据集,用了260个网格单元格
大部分sql数据集的查询语句如下:
select nvl(sum(J3.usdamt),0) J3usdamt
from (select a.custno,
sum(a.usdamt/10000) as usdamt,
replace(wmsys.wm_concat(distinct a.usedetail),
',',
'、') usedetail,
replace(wmsys.wm_concat(distinct
a.sourceanduse),
',',
'、') sourceanduse,
ROW_NUMBER() OVER(ORDER BY sum(a.usdamt) desc) as rowno
from fex_transreg a, MULTILEVELDIC c
where Substr(a.trandate, 0, 7) = ?
and a.cancelstatus = '0'
and trim(a.itemcode) = trim(c.itemid)
and trim(c.recdec) in (select ITEMID
FROM MULTILEVELDIC
WHERE TYPEID = 'forex'
AND UPSYSID = 200
AND P_LEVEL = 4)
group by a.custno) J3
where usdamt>=50 and J3.rowno <11
设计器整体截图如下:
布局如下:
最终运行的效果如下图:
在这儿有个问题是,如果要在十行显示6个依据不同类别的汇总的排名第一至第十,而且这其中任何一种都有可能是空值,故而不能用外连接或者全连接的方式构建数据集,而且数据集的数据条目数有时候是不足十条,故而用动态行的方式可以放弃了,另外,要在汇总排序的当条记录中又分别列出汇总的哪些条目,这些汇总条目的数量也不固定,故而用嵌套报表的想法也要放弃了,最终采取了多数据集,多网格的方式。可见报表的一线工作是非常复杂的,设计一流的报表工具任重而道远。
PS:由于工作台屏幕巨大,截图也巨大,把图片另存一下或者用鼠标拖到新窗口中才能看到全貌。