3

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

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

谢谢你,谢尔盖

4

1 回答 1

1

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

如果您的数据库中没有数字或日期表,我将创建一个递归 CTE,其中包含您提到的您感兴趣的范围内的每个日期的记录。然后将其外连接到您的表中并用于COUNT(tbl1.start_date)查找合适的日期。这对 SQL 服务器的查询应该不会太痛苦。

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

于 2013-03-06T19:21:48.667 回答