我有一张表,其中包含每位用户的统计信息,比如说
TABLE Stats
user varchar(50)
callsdate datetime
howmany INT
我需要显示一个Tablix,其中列标题应该是2012年7月,2012年8月,2012年9月等,具体取决于数据中的内容。
答案 0 :(得分:1)
最终,您需要在报告级别设置一个组,该组是月份和年份的串联。
您可以在查询级别执行此操作,例如:
select
[user]
, monthYear = left(datename(mm, callsdate), 3) + '-' + cast(datepart(yy, callsdate) as char(4))
, howmany
from [Stats]
如果可以,甚至可以在查询级别进行聚合:
select
[user]
, monthYear = left(datename(mm, callsdate), 3) + '-' + cast(datepart(yy, callsdate) as char(4))
, howmany = sum(howmany)
from [Stats]
group by [user]
, monthYear = left(datename(mm, callsdate), 3) + '-' + cast(datepart(yy, callsdate) as char(4))
在报告级别使用此数据集,您可以根据Tablix的要求轻松地对monthYear
列进行分组。
您将遇到正确订购的问题;我会在数据集中添加另一个计算列:
select
[user]
, monthYear = left(datename(mm, callsdate), 3) + '-' + cast(datepart(yy, callsdate) as char(4))
, monthYearOrder = cast(datepart(yy, callsdate) as char(4)) + right('0' + cast(datepart(mm, callsdate) as char(2)), 2)
, howmany = sum(howmany)
from [Stats]
group by [user]
, monthYear = left(datename(mm, callsdate), 3) + '-' + cast(datepart(yy, callsdate) as char(4))
, monthYearOrder = cast(datepart(yy, callsdate) as char(4)) + right('0' + cast(datepart(mm, callsdate) as char(2)), 2)
这样您就可以按monthYearOrder
进行分组和排序,但仍使用monthYear
中的文字。
如果您无法在查询级别进行聚合,则可以使用报表中的表达式执行类似操作,例如:作为数据集中的计算列:
monthYear:=CDate(Fields!callsdate.Value).ToString("MMM-yyyy")
monthYearOrder:=CDate(Fields!callsdate.Value).ToString("yyyyMM")