Reporting services 如何在SSRS 2008 R2中以Tablix列的形式计算每年每月的总计

Reporting services 如何在SSRS 2008 R2中以Tablix列的形式计算每年每月的总计,reporting-services,ssrs-2008,ssrs-tablix,Reporting Services,Ssrs 2008,Ssrs Tablix,我有一个表,每个用户都有统计信息 TABLE Stats user varchar(50) callsdate datetime howmany INT 我需要显示一个表格,其中列标题应为2012年7月、2012年8月、2012年9月等,具体取决于数据中的内容。最终,您需要在报告级别设置一个组,该组是月和年的串联 您可以在查询级别执行以下操作: select [user] , monthYear = left(datename(mm, callsdate), 3) + '-' + ca

我有一个表,每个用户都有统计信息

TABLE Stats
user varchar(50)
callsdate datetime
howmany INT

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

最终,您需要在报告级别设置一个组,该组是月和年的串联

您可以在查询级别执行以下操作:

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
中的文本

如果无法在查询级别进行聚合,则可以对报表中的表达式执行类似操作,例如作为数据集中的计算列:

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)
monthYear:
=CDate(Fields!callsdate.Value).ToString(“MMM yyyy”)


monthYearOrder:
=CDate(Fields!callsdate.Value)。ToString(“yyyyMM”)

非常感谢。我需要一些时间来测试这个!最有可能在周一,因为我的老板要我现在做其他事情。我会随时通知你的,但我还是没机会告诉你。我会的。在接下来的几天内,我将无法对此进行研究,但(a)我认为你的答案是正确的,(b)至少你投入了大量的工作。谢谢。你能进入字段的属性,然后按你想要的格式编号并设置为日期吗?我错过什么了吗?