在SSRS 2008中计算表达式

时间:2013-11-12 07:51:35

标签: sql reporting-services ssrs-2008 ssrs-tablix

我的情况是我有一个列名称'NotifcationLog.Status。

状态可以是3种类型已接受,待定&逾期。我需要计算所有通知状态。

我使用以下表达式

创建了一个计算字段
=COUNT(IIF(Fields!NotificationStatus.Value="Accepted",1,Nothing))

当我尝试将此计算字段添加到表格并进行预览时,我收到一条错误消息,指出“聚合,行号,运行值,以前和查找函数不能用于计算字段表达式”

我现在该怎么办?

2 个答案:

答案 0 :(得分:1)

您尝试添加

 =IIF(Fields!NotificationStatus.Value="Accepted",1,0)

作为您的计算字段。这将返回1或0,具体取决于状态是否被接受。

然后您想要使用它,只需SUM您的计算字段即可计算。

=Sum(Fields!NewCalculatedField.Value)

在数据分组的表/矩阵等中使用它。

答案 1 :(得分:0)

错误似乎很直接,你不能这样做的原因是没有任何分组就没有意义。想象一下以下数据集:

+-------+------------+
| ID    |   Status   |
|-------+------------+
|  1    |   Accepted |
|  2    |   Pending  |
|  3    |   Accepted |
|  4    |   Overdue  |
+-------+------------+

如果要在表达式中添加第三列,则它将是<等效的

SELECT  ID, Status, COUNT(CASE WHEN Status = 'Accepted' THEN 1 END)
FROM    T

没有这个组是无效的语法。您可以使用计数表达式添加报告字段,但不能在数据集中添加计算字段。您尝试制作的数据集如下:

+-------+------------+----------+
| ID    |   Status   | Accepted |
|-------+------------+----------+
|  1    |   Accepted |    2     |
|  2    |   Pending  |    2     |
|  3    |   Accepted |    2     |
|  4    |   Overdue  |    2     |
+-------+------------+----------+

对于所有行重复值没有意义,但是您可以使用窗口函数在SQL中执行此操作:

SELECT  ID, 
        Status, 
        Accepted = COUNT(CASE WHEN Status = 'Accepted' THEN 1 END) OVER()
FROM    T;