SSRS按范围分组

时间:2014-02-19 00:46:46

标签: tsql reporting-services

我在数据集中有一个字段,其中包含一个公式(使用IFF和datediff),用于确定记录打开的时间长度(有一个CreatedDate和一个ClosedDate)。然后我按照那个领域进行分组。

但是,我希望能够将这些数据分组到范围中。所以现在,标题是Days Open,三行表示7,5和1(天)。但是随着更多数据的进入,行将会增长,因为Days Open可以是1到50之间的任何数字。这意味着我最终可能会有50行。

我希望有一组行,每行都在一个范围内。因此,一行将“1-5天打开”,然后计算多少行>> 5,另一行“6-10天打开”,并计算这些行。等

如何按不同范围对计算字段进行分组?我能想到的唯一方法是编写大量的SQL。

1 个答案:

答案 0 :(得分:3)

因此,如果我已正确理解,您已向数据集添加了一个字段,该数据集使用表达式根据其他两个字段(CreatedDate和ClosedDate)计算“Days Open”值。

您已经知道Days Open的值可以是1 - 50并且您知道您想要的范围,因此您可以向数据集添加另一个计算字段,该字段基于与Open Open相同的计算,例如

假设您现有的开放天数计算

=DateDiff(DateInterval.Day, Fields!CreatedDate.Value, Fields!ClosedDate.Value)

然后你可以添加

=Switch(
   DateDiff(DateInterval.Day, Fields!CreatedDate.Value, Fields!ClosedDate.Value) > 0 And 
   DateDiff(DateInterval.Day, Fields!CreatedDate.Value, Fields!ClosedDate.Value) <=5, 
   "1-5 Days",
   DateDiff(DateInterval.Day, Fields!CreatedDate.Value, Fields!ClosedDate.Value) > 5 And 
   DateDiff(DateInterval.Day, Fields!CreatedDate.Value, Fields!ClosedDate.Value) <=10, 
   "6-10 Days",
   DateDiff(DateInterval.Day, Fields!CreatedDate.Value, Fields!ClosedDate.Value) > 11 And 
   DateDiff(DateInterval.Day, Fields!CreatedDate.Value, Fields!ClosedDate.Value) <=15, 
   "11-15 Days",
...
   DateDiff(DateInterval.Day, Fields!CreatedDate.Value, Fields!ClosedDate.Value) > 45 And 
   DateDiff(DateInterval.Day, Fields!CreatedDate.Value, Fields!ClosedDate.Value) <=50, 
   "45-50 Days"
)

如果您可以修改数据集的实际SQL查询来执行Datediff功能,例如,这可以大大简化,例如在T-SQL for SQL Server中,您可以添加

SELECT 
...
DATEDIFF(dd, CreatedDate, ClosedDate) AS DaysOpen
...
FROM
...

它会为您提供一个数据集查询字段,您可以在上面的表达式中使用该字段,例如

=Switch(
   Fields!DaysOpen.Value) > 0 And 
   Fields!DaysOpen.Value) <=5, 
   "1-5 Days",

无论您如何计算它,都可以在Tablix中的简单分组表达式中使用包含范围值的数据集字段。