SQL Server报告(SSRS 2008)是否有事件过程?

时间:2014-02-28 18:34:03

标签: sql-server-2008 reporting-services

我是SSRS报告的新手。在此之前,我使用了类似的技术,如Oracle Developer Reports或MS Access Reports。我的问题是:SQL Reports是否有事件程序?我的意思是,如果我们想要对每个数据行进行一些处理,或者在每个组之前/之后,我们是否可以在这些事件中编写事件过程/函数?

情景是这样的;在典型的Employees报告中,我想定义一个变量,根据工资对员工进行分类,对于每一行,我们按照以下逻辑计算变量;

IF sal BETWEEN 1000 AND 1999 THEN
   Emp_Tag = 'Lower Middle'
   Count_low_mid += 1
ELSIF sal BETWEEN 2000 AND 2999 THEN
   Emp_Tag = 'Average'
   Count_average += 1
ELSIF sal BETWEEN 3000 AND 3999 THEN
   Emp_Tag = 'Above Average'
   Count_abv_avg += 1
.... and so on ...
END IF

然后最后我们可以计算每类员工的计数(Count_low_mid,Count_average,Count_abv_avg)。任何人都可以告诉我如何在sql server reports(SSRS)中实现这种逻辑?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以通过在表标题行中应用条件聚合来执行此操作。假设我有一些像这样的样本数据:

enter image description here

仅包含标题行的表:

enter image description here

各组的表达方式为:

中下层

=Sum(IIf(Fields!sal.Value >= 1000 and Fields!sal.Value < 2000, 1, 0))

<强>平均

=Sum(IIf(Fields!sal.Value >= 2000 and Fields!sal.Value < 3000, 1, 0))

高于平均水平

=Sum(IIf(Fields!sal.Value >= 3000 and Fields!sal.Value < 4000, 1, 0))

这些表达式只计算满足特定条件的所有行,并提供所需的结果:

enter image description here

或者,使用如下表达式设置计算字段:

=Switch(Fields!sal.Value >= 1000 and Fields!sal.Value < 2000, "Lower Middle"
  , Fields!sal.Value >= 2000 and Fields!sal.Value < 3000, "Average"
  , Fields!sal.Value >= 3000 and Fields!sal.Value < 4000, "Above Average")

并根据此设置一个组,这将产生相同的结果:

enter image description here