【问题标题】:Count expression in SSRS 2008SSRS 2008 中的计数表达式
【发布时间】:2013-11-12 07:51:35
【问题描述】:
我有一个列名 `NotifcationLog.Status.
状态可以有 3 种类型 Accepted、Pending 和 Overdue。我需要计算所有 Notifications 状态。
我用下面的表达式创建了一个计算字段
=COUNT(IIF(Fields!NotificationStatus.Value="Accepted",1,Nothing))
当我尝试将这个计算字段添加到表中并预览它时,我收到一条错误消息,指出“聚合、行号、运行值、上一个和查找函数不能用于计算字段表达式”
我现在该怎么办??
【问题讨论】:
标签:
sql
reporting-services
ssrs-2008
ssrs-tablix
【解决方案1】:
你尝试添加
=IIF(Fields!NotificationStatus.Value="Accepted",1,0)
作为您的计算字段。这将返回 1 或 0,具体取决于状态是否被接受。
然后你想在哪里使用它,你可以SUM你的计算字段给你一个计数。
=Sum(Fields!NewCalculatedField.Value)
在您的数据分组的表格/矩阵等中使用它。
【解决方案2】:
这个错误看起来很简单,你不能这样做的原因是没有任何分组就没有意义。想象一下以下数据集:
+-------+------------+
| 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 这是无效的语法。您可以使用计数表达式添加报表字段,但不能在数据集中添加计算字段。您尝试制作的数据集如下:
+-------+------------+----------+
| 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;