引言
在报表定制中,我们除了会按月度、年度等做合计外,季度也是常见的一种合计维度。那么如何来实现季度合计呢,拿MS SQL来说,他是有日期函数可以获取季度的。这样可以直接在数据库查询层面提取季度,然后为月度分组添加季度父组即可。然而,假设提供给我们的数据只有月度并没有季度,在SSRS层面要如何实现这个效果呢,请往下看...
关键知识点
MS SQL 季度提取,使用DatePart函数,参数为qq或q,如:select datepart(qq,getdate()),datepart(q,getdate())
SSRS 用月度取季度,IIF Chonse Switch,如=Choose(@month,1,1,1,2,2,2,3,3,3,4,4,4)
当然SSRS也有DatePart函数,但是基于优化考虑我们通常会在数据层面完成统计,或直接使用汇总过的数据。
细节实现
原始数据:
数据层面实现
step1 写查询语句,直接提取季度、月度
select datepart(q,checkouttime) q,
datepart(month,checkouttime) m,
saleprice
from [dbo].[tbl_EXE_SaleCar]
step2 插入矩阵,月度为行组,删除列组
step3 为月度分组季度父组
step4 预览效果如下:
感觉是实现了,但是有没有觉得和我们所见过的报表略有区别呢?对了,季度分组有些多余了。好吧!搞定他!!!
setp5 删除季度列,右键列头,删除列
setp6 最终效果如下,是否感觉舒服好多(希望不是加了背景色的原因)
SSRS层面实现
SSRS层面实现的话,其实同上面极为相似,这儿不再复述,仅点出不同之处。
step1 这儿我们不提取季度,那么本质上只剩下月度m和价格saleprice两个字段
step2 本步操作一样
step3 这步由于我们查询的时候没有提取季度值,在这儿只能来构造,分组依据点开表达式=Choose(Fields!m.Value,1,1,1,2,2,2,3,3,3,4,4,4)
step4 本步操作一样
step5 本步操作一样
step6 本步操作一样
思路扩展
上面我们讲到了如何实现季度,那么上半年、下半年是不是同样的道理呢,IIf(@month <= 6,"上半年","下半年")。
道理是相通的,其他一些类似的BT合计需求均可参照些法实现。