Выражение SSRS: выражение значения для textbox имеет параметр scope, недопустимый для aggregate

Я получаю следующую ошибку:

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: что-делает-scope-parameter-that-is-not-valid-for-an-aggregate-function-mean

пост 2: SqlTeam

может кто-нибудь указать, что я делаю неправильно?

Примечание: добавление tostring () везде не помогло

примечание 2.: замена " + " на " & " Также не решила проблему

Примечание 3: имя datasetname является правильным, и набор данных является единственным, присутствующим в этом отчете SSRS:

Image Tds

обновление: данные, содержащиеся в наборе данных допустимо и считывание набора данных не работало (пробовал С и без псевдонимов)

5 ответов


Я не знаю, что не так, но создали аналогичный отчет, который работает. Создайте новый пустой отчет, затем создайте набор данных (из SQL Server) со следующим запросом:

выберите "ACME" в качестве firmanaam, 10000 AS indienstfirmanr, 'Doe' AS naam, 'Джон' как voornaam, 987654 как 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


иногда эта ошибка возникает, когда мы используем разные 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 [rsInvalidAggregateScope]скрытый выражение для табликса "table1" имеет параметр scope, который недопустим для агрегатной функции. Параметр scope должен быть установлен в строковую константу, равную имени содержащей группы, имени содержащей области данных или имени набора данных.

Я решил, щелкнув правой кнопкой мыши файл отчета в Обозреватель + Посмотреть Код (открывает редактор XML), поиск имени основного набора данных отчета и изменение строки, вызвавшей проблему:

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

в этом случае мне просто нужно было изменить выражение внутри <Hidden> тег, который имел имя несуществующего набора данных (из-за копирования из другого отчета). Позже было проще найти строку в интерфейсе, которая вызвала ошибку.

поэтому если ошибка относится к поиск вхождения имени набора данных отчета в XML-код и дважды проверьте <Value> теги для имен, которые не существуют в текущем отчете.


ваша ссылка на область не является правильной ("DataSetHrm"). Как сообщение об ошибке с TextBox только появляется объем, которые может быть группа в таблице (объем имя = имя группы), таблица (данные регион -> область имя = данные название региона) или набор данных, который принадлежит к области данных (область имя = имя набора данных).

когда эти области, упомянутые выше, встроены в dataset (dataset - > Data region - > data group), на них можно ссылаться из текстовый. В вашем примере это не так.

Если вы хотите использовать другой набор данных в текстовом поле, который отличается от вашего фактического набора данных (который является набором данных вашей таблицы), вы должны использовать функцию lookup ().


недавно я столкнулся с подобной проблемой в одном из моих отчетов. Причина этой ошибки заключается в том, что имя набора данных и выражение в отчете не совпадают.

У меня есть поле даты, которое заполнено пользовательскими настройками, и выражение First(Fields!column.Value, "datasetname"). Имя набора данных и имя набора данных, указанное в данных отчетов, должны совпадать.