自定义表达式的额外行,以显示“已过滤”的总和

时间:2017-01-28 00:50:59

标签: sql-server reporting-services ssrs-2008 ssrs-2012

所以我有一个表从程序中获取结果集,一切看起来都很棒,包括底部的总数。用户要求底部的一些自定义行仅表示特定条件或组的总计。假设您有一个名为AuctionPrice的字段。在数据集中,它来自sql过程中的聚合。

如果我在表格的底部和“AuctionPrice”字段中添加一行,我会使用这样的表达式 = SUM(IIF(Fields!AuctionPrice> 0,Fields!AuctionPrice,0))

这会产生错误,而在比较中使用不同字段的表达式可以正常工作。

您是否真的不能使用已包含在数据集中的聚合(总和)中的字段的表达式?

2 个答案:

答案 0 :(得分:1)

要使ssrs表达式起作用,您忘记在字段

之后定义.value

正确的表达式必须与下面的表达式相同

=SUM(IIF(Fields!AuctionPrice.value > 0, Fields!AuctionPrice.value, 0))

答案 1 :(得分:0)

这是因为Fields!AuctionPrice列中包含特殊字符(!)。你需要使用方括号

来逃避它
select SUM(IIF([Fields!AuctionPrice] > 0, [Fields!AuctionPrice], 0))
From yourtable

Rules for Regular Identifiers

变量,函数和存储过程的名称必须符合以下Transact-SQL标识符规则。

  1. 第一个字符必须是以下之一:

    • Unicode Standard 3.2定义的字母。字母的Unicode定义包括从a到z的
      拉丁字符,
      从A到Z,还有其他语言的字母。

    • 下划线(_),符号(@)或数字符号(#)。

  2. 标识符开头的某些符号在SQL Server中具有特殊含义。以at符号开头的常规标识符始终表示局部变量或参数,不能用作任何其他类型对象的名称。以数字符号开头的标识符表示临时表或过程。以双数字符号(##)开头的标识符表示全局临时对象。虽然数字符号或双数字符号可用于开始其他类型对象的名称,但我们不建议这样做。

    某些Transact-SQL函数的名称在符号(@@)处以double开头。为避免与这些函数混淆,不应使用以@@开头的名称。

    1. 后续字符可包含以下内容:

      • Unicode标准3.2中定义的字母。
      • 来自Basic Latin或其他国家/地区脚本的十进制数字。
      • at符号,美元符号($),数字符号, 或者下划线。
    2. 标识符不能是Transact-SQL保留字。 SQL Server保留保留字的大写和小写版本。在Transact-SQL语句中使用标识符时,不符合这些规则的标识符必须由双引号括号分隔。保留的单词取决于数据库兼容级别。可以使用ALTER DATABASE语句设置此级别。

    3. Embedded spacesspecial characters是不允许的。
    4. Supplementary characters是不允许的。
    5. 在Transact-SQL语句中使用identifiers时,符合这些规则的标识符必须由双引号括号