Выражение 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 на рабочем столе и откройте его с помощью блокнота. Ищите "Поля!". Это должно привести вас к выражению (ям), которое вызывает проблему.
Также ищите старое имя набора данных, если вы его изменили. Также ищите поля, пропущенные в новом наборе данных, если они есть