1

我有一个列名“NotifcationLog.Status”的情况。

状态可以是 3 种类型 Accepted、Pending 和 Overdue。我需要计算所有 Notifications status 。

我使用以下表达式创建了一个计算字段

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

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

我现在该怎么办 ??

4

2 回答 2

1

你尝试添加

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

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

然后你想在哪里使用它,你可以只SUM计算你的字段来给你一个计数。

=Sum(Fields!NewCalculatedField.Value)

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

于 2013-11-12T08:51:51.110 回答
0

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

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

如果要在表达式中添加第三列,它将是 SQL 等效项

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

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

+-------+------------+----------+
| 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;
于 2013-11-12T08:35:44.630 回答