SSRS表达式:textbox的值表达式具有对聚合无效的scope参数

时间:2014-02-04 12:07:42

标签: reporting-services ssrs-2008 concatenation aggregate ssrs-expression

我收到以下错误:

Error   1   [rsInvalidAggregateScope] The Value expression for the text box 
‘Textbox2’ has a scope parameter that is not valid for an aggregate function.  
The scope parameter must be set to a string constant that is equal to either 
the name of a containing group, the name of a containing data region, or 
the name of a dataset.

我的Textbox2背后的表达式(我添加了一些空格以便于阅读):

Iif(Parameters!ReportParameterPersoneelsNr.Value.Equals(String.Empty),

       "Prestaties " + First(Fields!firmanaam.Value, "DataSetHrm") + 
        "(" + First(Fields!indienstfirmanr.Value, "DataSetHrm") + ")",

       "Prestaties " + First(Fields!naam.Value, "DataSetHrm") + " " +
       First(Fields!voornaam.Value, "DataSetHrm") + 
       "(" + First(Fields!personeelsnr.Value, "DataSetHrm") + ")")

字段:

      ReportParameterPersoneelsNr = Reportparameter of type Text
      firmanaam.Value = VARCHAR
      indienstfirmanr.Value = Long
      naam.Value = VARCHAR
      voornaam.Value = VARCHAR
      personeelsnr.Value = Long

Stackoverflow上的搜索带来了以下结果。但到目前为止,他们还没有帮助我解决我的问题

Post 1: what-does-scope-parameter-that-is-not-valid-for-an-aggregate-function-mean

Post 2: SqlTeam

有人能指出我做错了吗?

注意:在任何地方添加tostring()都无济于事

注2 :用'&'替换'+'没有解决问题

注释3 :数据集名称正确,数据集是此SSRS报告中唯一存在的数据集:

Image Tds

更新:数据集包含的数据有效,并且读取数据集不起作用(尝试使用和不使用别名)

6 个答案:

答案 0 :(得分:8)

有时在DatasetName中使用不同的Experssion时会出现此错误。

就像我的情况一样,我通过做下面的事情来解决这个错误,

在下面之前,

="For Man " + 
   IIF(Len(First(Fields!Lname.Value, "DataSet1")) > 0,
   First(Fields!Lname.Value, "DataSet1"),"") & IIF(Len(First(Fields!Fname.Value, "DataSet1")) > 0,
   ", " + First(Fields!Fname.Value, "DataSet1"),"")

将其更改为以下后,现在工作正常,

="For Man " + 
    IIF(Len(First(Fields!Lname.Value, "LastChangedDataSetName")) > 0,
    First(Fields!Lname.Value, "LastChangedDataSetName"),"") & IIF(Len(First(Fields!Fname.Value, "LastChangedDataSetName")) > 0,
    ", " + First(Fields!Fname.Value, "LastChangedDataSetName"),"")

注意: 所以错误在于我将数据集名称DataSet1更改为LastChangedDataSetName并且在更改数据集名称之前,我已经在最后Expression更改了该名称。

答案 1 :(得分:6)

我不知道出了什么问题,但创建了类似的报告。创建一个新的空白报告,然后使用以下查询创建数据集(来自SQL Server):

  

SELECT'ACME'AS firmanaam,   10000 AS indienstfirmanr,   'Doe'AS naam,   'Jon'AS voornaam,   987654 AS personeelsnr

DataSet image

然后添加参数

Parameter Definition

在报告中添加一个文本框,代码为:

= Iif(Parameters!ReportParameterPersoneelsNr.Value.Equals(String.Empty), "Prestaties " & First(Fields!firmanaam.Value, "DataSetHrm") & "(" & First(Fields!indienstfirmanr.Value, "DataSetHrm") & ")", "Prestaties " & First(Fields!naam.Value, "DataSetHrm") & " " & First(Fields!voornaam.Value, "DataSetHrm") & "(" & First(Fields!personeelsnr.Value, "DataSetHrm") & ")")

然后运行带有或不带参数值的报告:

Preview of Report

Preview with empty param

答案 2 :(得分:2)

我最近在一份报告中遇到过类似的问题。我遇到此错误的原因是数据集的名称和报表中的表达式不匹配。

我有一个日期字段,其中填充了用户首选项,表达式为First(Fields!column.Value, "datasetname")。报告数据中指定的数据集名称和数据集名称应匹配。

答案 3 :(得分:2)

我在报告中遇到的错误非常相似:

  

错误1 [rsInvalidAggregateScope] tablix“table1”的隐藏表达式有一个对聚合函数无效的作用域参数。 scope参数必须设置为一个字符串常量,该常量等于包含组的名称,包含数据区域的名称或数据集的名称。

我通过右键单击解决方案资源管理器中的报告文件 + 查看代码(打开XML编辑器),搜索报告主DataSet的名称并更改导致问题的那条线:

<TablixMember>
  <Visibility>
    <Hidden>=iIF(CountRows("MYDATASETNAME") = 0, false, true)</Hidden>
  </Visibility>
  <KeepTogether>true</KeepTogether>
</TablixMember>

在这种情况下,我只需要更改<Hidden>标记内的表达式,该标记具有非现有DataSet的名称(由于从另一个报告中复制)。稍后,在界面中找到导致错误的行会更容易。

因此,如果错误引用Value,请在XML代码中搜索出现的报告的DataSet名称,并仔细检查<Value>标记中是否存在存在于当前的报告中。

答案 4 :(得分:1)

您的范围参考不正确(“DataSetHrm”)。由于文本框中的错误消息状态只能引用一个可以是表中的组(范围名称=组名),表本身(数据区域 - &gt;范围名称=数据区域名称)或数据集属于数据区域(范围名称=数据集名称)。

当上面提到的这些区域嵌入了数据集(数据集 - &gt;数据区域 - &gt;数据组)时,可以从文本框中引用它们。在你的例子中,情况并非如此。

如果要在文本框中使用与实际数据集(表格的数据集)不同的其他数据集,则必须使用lookup()函数。

答案 5 :(得分:0)

这通常是在替换带有另一个存储过程时引起的。 当您生成报表的派生词(可能是季度报表,而不是每月报表),并且生成的新sp相似但又不同时,这会出现很多。

不必重命名数据集。这样做通常会导致很难诊断的问题。

报表编辑器的性质非常棘手,并且需要大量对话。通过在报表画布上单击并查找有问题的问题来几乎找不到问题。

在显示抱怨表达式的消息后,MS可以很容易地立即显示有问题的表达式编辑器。 编辑器不是很好,但是MS似乎没有动力去做得更好。

建议1避免麻烦-为主要数据集DATA1或类似名称命名。如果更改SP,请不要使用数据集名称。

建议2避免麻烦-如果要制作报表的副本并希望保留Tablix,请考虑制作新的SP添加列。即使它们为空,也不要删除任何内容。有时这是可能的,有时则不是。

建议3-如果您遇到麻烦并想要退出-将报告另存为RDL在桌面上,并使用记事本打开它。搜索“字段!”。这应该导致您导致问题的表达式。

如果更改了旧数据集的名称,还请寻找它。如果有的话,还要寻找新数据集中省略的字段