如何在SQL中按不同的日期范围对记录进行分组?

时间:2013-04-02 13:32:33

标签: ssrs-2008 reporting-services

使用SSRS 2008,我需要在25天内将销售额分组,并且需要在折线图中反映相同的情况。因此X轴包含日期差异,例如。 2月13日1月25日,2月26日 - 2月19日等等,直到标量@endate ...和y轴代表实现的通信销售。我按周数和月数进行分组并意识到这一点,但是当它有25天的差异时,我有点不解。对此的任何暗示都将非常感激。感谢。

1 个答案:

答案 0 :(得分:2)

要在报告级别执行此操作,您可以创建计算列以对各种日期进行分组。我使用了以下表达式:

=DateAdd(DateInterval.Day
  , 25 * Floor
    (
      (DateDiff(DateInterval.Day, CDate("01-Jan-2013"), Fields!date.Value)
      / 25)
    )
  , CDate("01-Jan-2013"))

基本上,它计算自年初以来每个日期的天数,将其除以25并向下舍入,并使用此新数字计算该期间的开始日期。

我在年初的日期进行了硬编码,但您可以轻松地创建此参数或表达式。

这为一些样本数据提供了以下结果:

enter image description here

您可以看到他们的分组日期值符合预期。基于此,您也可以轻松地在图表中将它们组合在一起。

在评论后修改

也许你可以仔细检查一下你的表情?我认为在数据集中设置计算字段比在图表中直接设置更容易 - 然后很容易将结果放在表格中以查看是否所有内容都正常。我基于相同的表达式扩展了上面的例子。我添加了两个计算字段,一个用于组结束日期:

=DateAdd(DateInterval.Day, 24, Fields!groupDate.Value)

一个用于创建格式良好的组标签:

=Format(Fields!groupDate.Value, "dd-MMM")
  & " - "
  & Format(Fields!groupDateEnd.Value, "dd-MMM")

基于这些,我添加了一个包含以下类别/系列的图表:

enter image description here

最终结果,按要求分组:

enter image description here

或者,您也可以在数据库级别执行此操作,假设这是您的数据源;只需将分组表达式更改为等效的T-SQL:

with groupDates as
(
  select *
    , groupDate = dateadd(dd, 25 * (datediff(dd, '01-jan-2013', date) / 25), '01-jan-2013')
  from departments
)
select department
  , groupDate
  , groupDateEnd = dateadd(dd, 24, groupDate)
  , groupValue = sum(value)
from groupDates
group by department
  , groupDate
order by department

SQL Fiddle with demo