【问题标题】: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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多