如何将每月的总数作为SSRS 2008 R2中的Tablix列

时间:2012-12-21 15:09:31

标签: reporting-services ssrs-2008 ssrs-tablix

我有一张表,其中包含每位用户的统计信息,比如说

TABLE Stats
user varchar(50)
callsdate datetime
howmany INT

我需要显示一个Tablix,其中列标题应该是2012年7月,2012年8月,2012年9月等,具体取决于数据中的内容。

1 个答案:

答案 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")