0

我有一个包含每个用户的统计信息的表格,比如说

TABLE Stats
user varchar(50)
callsdate datetime
howmany INT

我需要显示一个 Tablix,其中列标题应该是 Jul-2012、Aug-2012、Sep-2012 等,具体取决于数据中的内容。

4

1 回答 1

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))

使用报表级别的此数据集,您可以monthYear根据 Tablix 的需要轻松地对列进行分组。

您将遇到正确订购的问题;我会在数据集中添加另一个计算列:

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

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

月年:=CDate(Fields!callsdate.Value).ToString("MMM-yyyy")

月年顺序:=CDate(Fields!callsdate.Value).ToString("yyyyMM")

于 2012-12-21T16:11:13.360 回答