Sql server 2008 r2 SSRS 2008-日期范围的多个分组

Sql server 2008 r2 SSRS 2008-日期范围的多个分组,sql-server-2008-r2,ssrs-2008,reporting-services,ssrs-grouping,Sql Server 2008 R2,Ssrs 2008,Reporting Services,Ssrs Grouping,表中的记录包含一系列有效日期,例如: *tbl1.开始日期*和*tbl1.结束日期*。因此,为了确保获得对特定日期范围有效的所有记录,选择逻辑是:其中end_date>=@dtFrom和start_date

表中的记录包含一系列有效日期,例如: *tbl1.开始日期*和*tbl1.结束日期*。因此,为了确保获得对特定日期范围有效的所有记录,选择逻辑是:
其中end_date>=@dtFrom和start_date<@dtTo
(SQL语句中使用的@dtTo参数实际上是报告中使用的*@prmDt_to*参数的第二天计算得出的)

现在,在报告中,我需要计算指定数据范围内每天的记录数,并包括没有有效记录的天数(如果有)。因此,检索到的记录可能会在几天内计数。使用数据集中的递归CTE,我可以相对轻松地实现这一点,但我的经验法则是避免SQL数据库上不必要的负载,而是只返回必要的原始数据,并让报表引擎处理分组。那么,在SSRS中是否有这样做的方法

谢谢,,
Sergey

您可以使用自定义代码在SSRS中执行某些操作,但我建议您不要这样做。执行此操作的位置在数据集中。SSRS的设计目的不是填充数据集中不存在的组。这听起来像是您正在尝试做的:SSR需要为每个日期创建组,无论该日期是否在数据集中

如果数据库中没有数字或日期表,我只会创建一个递归CTE,其中包含您所感兴趣的范围内的每个日期的记录。然后将其加入到您的表中,并使用
COUNT(tbl1.start\u date)
查找适当的天数。对于SQL server来说,这应该不会太痛苦


如果您确实需要避免CTE,那么我将创建一个日期或数字表,用于生成您范围内的日期。

递归CTE显然是一个痛苦的查询,仅几天的数据提取就需要将近20秒,这在开发此报告的环境中是不可接受的。如果我只提取日期范围的数据,没有CTE,执行时间不到2秒。这就是为什么我试图在报表设计器中找到一种机制来完成这项工作。这部分取决于您加入CTE的数据。尝试用临时表替换CTE,看看是否会改变性能。如果是这样,那么SQL为CTE选择了一个糟糕的计划,但是临时表应该是一个很好的解决方法。另外,确保表上有适当的索引。