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

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

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: замена "+" на "& amp;" не удалось решить проблему

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

Image Tds

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

Ответ 1

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

SELECT 'ACME' AS firmanaam, 10000 AS indienstfirmanr, "Doe" AS naam, "Джон" А. С. Ворманам, 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

Иногда эта ошибка возникает, когда мы используем разные 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"),"")

Примечание.. Итак, я ошибся в том, что я изменил имя DataSet От DataSet1 до LastChangedDataSetName и остался, чтобы изменить это имя в последнем Expression, что Я уже написал перед изменением DataSet Name.

Ответ 3

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

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

Ответ 4

Ошибка, которая была у меня в моем отчете, была очень похожа:

Ошибка 1 [rsInvalidAggregateScope] Выражение Скрытое для таблицы tablix1 имеет параметр области видимости, который недопустим для агрегатной функции. Параметр области должен быть установлен в строковой константе, которая равна либо имени содержащейся группы, либо имени области данных, содержащей данные, либо имени набора данных.

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

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

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

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

Ответ 5

Ваша ссылка на область не подходит ( "DataSetHrm" ). Поскольку в сообщении с сообщением об ошибке из текстового поля может быть указана только область ограничения, которая может быть группой в таблице (имя области = имя группы), сама таблица (область данных → имя области = имя области данных) или набор данных, который принадлежит к области данных (имя области = имя набора данных).

Когда упомянутые выше регионы включены в набор данных (набор данных → область данных → группа данных), на них можно ссылаться из текстового поля. В вашем примере это не так.

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

Ответ 6

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

Нет необходимости переименовывать набор данных. Это может часто вызывать проблемы, которые очень трудно диагностировать.

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

Для MS было бы легко показать нарушающий редактор выражений сразу же после показа сообщения с жалобой на выражение. Редактор не очень хорош, но у MS, похоже, нет стимула сделать его лучше.

Предложение 1 Чтобы избежать неприятностей - назовите свой основной набор данных DATA1 или что-то подобное. Если вы меняете SP, оставьте имя набора данных в покое.

Предложение 2, чтобы избежать неприятностей - если вы делаете копию отчета и хотите сохранить таблицу, рассмотрите возможность добавления нового столбца SP. Не удаляйте любые, даже если они нулевые. Иногда это возможно, иногда нет.

Предложение 3 - Если у вас проблемы и вы хотите выйти - сохраните отчет как RDL на рабочем столе и откройте его с помощью блокнота. Ищите "Поля!". Это должно привести вас к выражению (ям), которое вызывает проблему.

Также ищите старое имя набора данных, если вы его изменили. Также ищите поля, пропущенные в новом наборе данных, если они есть