“对聚合函数无效的范围参数”是什么意思?

时间:2013-04-04 18:14:41

标签: reporting-services

表达式

=FormatNumber(Avg(CInt(Code.FirstSplit(Fields!AvgLOSC4.Value)), 0), 0)

当我尝试在SSRS管理器中更新报告时,

会导致以下错误消息。

“文本框'textbox16'的值表达式有一个对聚合函数无效的作用域参数。scope参数必须设置为一个字符串常量,该常量等于包含组的名称,名称包含数据区域或数据集的名称。(rsInvalidAggregateScope)。“

如何修复问题以摆脱此消息?我搜索了这条消息,但由于某种原因,搜索结果对我没有意义。

更新#1 上面的表达是这个

=FormatNumber(Avg(CInt(Fields!AvgLOSC4.Value.Split("|"c)(0))), 0)

在我改变它以解决另一个问题之前。

3 个答案:

答案 0 :(得分:4)

<强>什么:

聚合函数计算指定范围内的值。因此,当您使用Sum函数时,这将回答您获得这些字段的总和的问题。范围可以是整个数据集,也可以是Tablix中的一个组。这就是为什么你能够在表格的总行以及可能存在的任何小计行中使用诸如=Sum(Fields!Quantity.Value)之类的函数。

聚合函数的第二个参数允许您明确指定希望对其进行操作的范围。因此,在小计中,您可以使用=Sum(Fields!Quantity.Value, "DataSet1")来检索总计,通常用于百分比计算等内容。如果不使用第二个参数,则聚合函数将使用该单元格的默认范围。

有一篇MSDN文章详细概述了表达式范围:https://msdn.microsoft.com/en-us/library/dd255256.aspx#Anchor_1

错误消息&#39;范围参数对聚合函数无效&#39;当您使用第二个参数使聚合函数使用无效范围时发生。 SSRS的引擎不知道要对哪些字段进行操作,因此无法继续。

<强>为什么:

这就是错误消息的含义。正如为什么会在这里发生以及如何在这种特定情况下修复它,将错开表达式并查看正在使用的参数可能是有用的:

=FormatNumber
(
    Avg
    (
        CInt(Code.FirstSplit(Fields!AvgLOSC4.Value))
!!      , 0
     )
    , 0
)

此表达式使用0作为Avg聚合函数的第二个参数。 0不是有效范围,因此该函数会生成错误。修复此问题很简单:删除此参数或将其替换为有效值。

答案 1 :(得分:0)

这对我来说很好用:

=FormatNumber(Avg(CInt(Code.FirstSplit(Fields!AvgLOSC4.Value))), 0, 0)

甚至:

=FormatNumber(Avg(CInt(Code.FirstSplit(Fields!AvgLOSC4.Value))), 0)

只取决于您的格式要求。

您还可以使用Format属性在文本框级别设置格式,而不是尝试使用表达式。

答案 2 :(得分:-1)

分组'Page'的隐藏表达式有一个范围参数,对聚合函数无效。 scope参数必须设置为一个字符串常量,该常量等于包含组的名称,包含数据区域的名称或数据集的名称。