18

我收到以下错误:

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 上的搜索给我带来了以下结果。但到目前为止,他们还没有帮助我解决我的问题

帖子 1:对于聚合函数的意义而言,范围参数是什么意思是无效的

帖子 2:SqlTeam

有人可以指出我做错了什么吗?

注意:到处添加 tostring() 没有帮助

注 2:将 '+' 替换为 '&' 也不能解决问题

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

图像 Tds

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

4

7 回答 7

10

DatasetName有时在我们使用不同的 in时会发生此错误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"),"")

注意:所以这里的错误是我已将DataSet Name FromDataSet1并在更改DataSet NameLastChangedDataSetName之前最后更改Expression了我已经编写的。

于 2016-01-12T07:34:03.843 回答
6

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

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

数据集图像

然后添加你的参数

参数定义

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

= 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") & ")")

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

报告预览

使用空参数预览

于 2014-02-05T14:42:23.600 回答
2

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

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

于 2016-03-22T14:50:08.757 回答
2

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

错误 1 ​​[rsInvalidAggregateScope] tablix 'table1' 的隐藏表达式具有对聚合函数无效的范围参数。范围参数必须设置为字符串常量,该常量等于包含组的名称、包含数据区域的名称或数据集的名称。

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

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

在这种情况下,我只需要更改<Hidden>标签内的表达式,它的名称是不存在的 DataSet(由于从另一个报告中复制)。后来,更容易在界面中找到导致错误的行。

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

于 2016-05-17T13:12:07.733 回答
2

这通常是在用另一个存储过程替换一个存储过程时引起的。当您制作报告的衍生品(可能是季度报告而不是月度报告)并且您制作了一个相似但不同的新 sp 时,这种情况会出现很多。

无需重命名数据集。这样做通常会导致难以诊断的问题。

报告编辑器的性质非常点击和对话密集。通过在报告画布上单击并查找有问题的问题几乎不可能找到问题。

在显示抱怨表达式的消息后,MS 很容易立即显示有问题的表达式编辑器。编辑器不是很好,但MS似乎没有什么动力让它变得更好。

建议 1 为了避免麻烦 - 将您的主数据集命名为 DATA1 或类似名称。如果您更改 SP,请保留数据集名称。

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

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

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

于 2019-07-26T23:57:32.580 回答
1

您的范围参考不正确(“DataSetHrm”)。由于来自文本框的错误消息状态只能包含引用的范围,该范围可以是表中的组(范围名称 = 组名称)、表本身(数据区域 -> 范围名称 = 数据区域名称)或属于的数据集到数据区域(范围名称 = 数据集名称)。

当上述这些区域与数据集一起嵌入时(数据集 -> 数据区域 -> 数据组),可以从文本框中引用它们。在您的示例中,情况并非如此。

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

于 2014-02-04T18:43:26.287 回答
0

对我来说,答案是我通过删除其中一些字段来更改 DataSet 查询中的字段。这不会自动更新报表中列出的字段,因此我不得不删除报表显示在设计模式下不再出现在查询中的列。您可以通过右键单击列名称上方的灰色栏来执行此操作,然后单击删除列。一旦数据集查询中的所有字段与报表标题列匹配,报表就会运行良好。

于 2021-09-03T14:38:19.320 回答