我是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)中实现这种逻辑?
提前致谢。
答案 0 :(得分:1)
您可以通过在表标题行中应用条件聚合来执行此操作。假设我有一些像这样的样本数据:
仅包含标题行的表:
各组的表达方式为:
中下层
=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))
这些表达式只计算满足特定条件的所有行,并提供所需的结果:
或者,使用如下表达式设置计算字段:
=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")
并根据此设置一个组,这将产生相同的结果: