У меня есть отчет, содержащий около 10 параметров и около 10 наборов данных и один источник данных. Я набрал много, но мне действительно нужна помощь, поэтому я решил, что попытаюсь предоставить как можно больше информации о проблеме, как я мог с самого начала.
Пусть упростит все это и притворится, что это соответствующие имена всего и что отчет получает базовую информацию о сотрудниках:
- Параметры
- objectID: текст в формате guid или uniqueidentifier, он скрыт и передан, чтобы конечный пользователь отчета мог просматривать информацию только для своего объекта; Единичный параметр, не пустой, не пустой, скрытый, текст
- startDate: диапазон дат начала, скажем, я хочу, чтобы мой отчет включал данные, начиная с 1 января этого года; Одиночный параметр, не пустой, не пустой, видимый, datetime
- endDate: конец диапазона дат, скажем, сегодня/сейчас; Одиночный параметр, не пустой, не пустой, видимый, datetime
- viewOption: три жестко закодированных значения (метка, значение) ( "Текущие сотрудники", 1) и ( "Прошлые сотрудники", 2) и ( "Сотрудники, переместившие объекты", 3); Многозначный параметр (поэтому выберите все вариант), а не пустое, а не пустое, видимое, текст
- personID: на основе набора данных getListOfNames, где меткой является имя сотрудника, а значение - их идентификатор personID (guid/uniqueidentifier); Единый выбор, а не пустой, не пустой, текст и видимый
- Мои наборы данных
- getListOfNames: это список людей, которые были в компании в предоставленном диапазоне дат на данном объекте, и где их статус сотрудника находится в значении параметра viewOption (поэтому это может быть только одно число или до трех). Это хранимая процедура, но я настроил ее для обработки многозначного параметра, передав ее join (параметр, "~" ), а затем отделив ее в сохраненной процедуре. Это работает в 5 других отчетах.
- getReportInfoOnSelectedPerson: запрос основного тела; после того, как пользователь выбирает сотрудника, которому они хотят данные, он принимает этот идентификатор personID и диапазон дат и заполняет основную таблицу.
Проблема:
SSRS говорит, что viewOption не существует. Но я вижу это прямо там, в папке "Параметры" с левой стороны. Я вижу это, когда я иду, чтобы ввести выражение под параметрами. В параметрах нет четкой красной линии! ViewOption.value. Но, когда я пытаюсь использовать его как значение для параметра, используемого набором данных getListOfNames, это ошибки. Если я помещаю его в набор данных getReportInfoOnSelectedPerson и использую его точно так же, SSRS в порядке с этим. WTF? Итак... Я проверил rdl и все в порядке (где объявлен фактический параметр, где он используется в справочнике набора данных, все). Это только один набор данных. И у меня есть аналогичный отчет, в котором используется тот же набор данных, одни и те же базовые параметры и этот отчет в порядке. Я пытаюсь установить значение параметра набора данных равным 1 или что-то, и это нормально, но когда я пытаюсь установить его в параметр! ViewOption.value, это ошибки..... Теперь, выше, я сказал, что я обычно передаю сохраненный proc a Join на paramater с тильдой ~, но я стараюсь держать его простым и либо заставить его просто работать вообще (либо передав ему первое значение многозначного параметра viewOption, либо превратив этот параметр в один select и просто передавая. value), но соединение также не работает. Все это работает для другого набора данных, который также является хранимой процедурой.
Это моя ошибка:
Во время обработки отчета произошла ошибка. (rsProcessingAborted) Выражение Value для параметра запроса '@viewOption содержит ошибку: выражение ссылалось на несуществующий параметр в коллекции параметров отчета. (RsRuntimeErrorInExpression)
Что явно говорит, что мой параметр не существует, но я могу его видеть... везде. И если я присвою параметр одного из других параметров набора данных параметру viewOption, он будет работать без ошибок. Я проверил rdl.
У меня была эта проблема раньше, и это было исправлено, удалив как параметр, так и набор данных и создав их снова (для безопасности я переименовал их оба). На этот раз это не сработало.
Я так расстроен. Пожалуйста, помогите....
код?
<DataSet Name="getListOfNames">
<Fields>
<Field Name="personID">
<DataField>PersonId</DataField>
<rd:TypeName>System.Guid</rd:TypeName>
</Field>
<Field Name="name">
<DataField>name</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>myDataSource</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>getListOfNames</CommandText>
<QueryParameters>
<QueryParameter Name="@fac">
<Value>=join(Parameters!fac.Value,"~")</Value>
</QueryParameter>
<QueryParameter Name="@bldg">
<Value>=join(Parameters!bldg.Value,"~")</Value>
</QueryParameter>
<QueryParameter Name="@unit">
<Value>=join(Parameters!unit.Value,"~")</Value>
</QueryParameter>
<QueryParameter Name="@station">
<Value>=join(Parameters!station.Value,"~")</Value>
</QueryParameter>
<QueryParameter Name="@startDate">
<Value>=Parameters!startDate.Value</Value>
</QueryParameter>
<QueryParameter Name="@endDate">
<Value>=Parameters!endDate.Value</Value>
</QueryParameter>
<QueryParameter Name="@viewOption">
<Value>=Join(Parameters!viewOption.Value, "~")</Value>
</QueryParameter>
</QueryParameters>
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
</DataSet>
<ReportParameter Name="viewOption">
<DataType>String</DataType>
<DefaultValue>
<Values>
<Value>1</Value>
</Values>
</DefaultValue>
<Prompt>View</Prompt>
<ValidValues>
<DataSetReference>
<DataSetName>viewOptionQuery</DataSetName>
<ValueField>value</ValueField>
<LabelField>label</LabelField>
</DataSetReference>
</ValidValues>
<MultiValue>true</MultiValue>
</ReportParameter>
<DataSet Name="viewOptionQuery">
<Fields>
<Field Name="label">
<DataField>label</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="value">
<DataField>value</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>flamingo</DataSourceName>
<CommandText>select 'Other Facility' as label, 3 as value union select 'Past' as label, 2 as value union select 'Current' as label, 1 as value order by value</CommandText>
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
</DataSet>
Вот как он настроен, и getListOfNames - это то, почему ошибка бросается, если я изменяю
<QueryParameter Name="@viewOption">
<Value>=Join(Parameters!viewOption.Value, "~")</Value>
</QueryParameter>
к
<QueryParameter Name="@viewOption">
<Value>="1~2"</Value>
</QueryParameter>
тогда он работает.... или значение может быть всего 1 или 1 ~ 2 ~ 3
Однако... когда я пытаюсь добавить значение соединения (Parameters! viewOption.value, "~" ) в качестве значения для другого параметра запроса набора данных, он работает, и нет ошибки.
<DataSet Name="getReportInfoOnSelectedPerson">
<Fields>
<Field Name="name">
<DataField>name</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Building">
<DataField>Building</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Unit">
<DataField>Unit</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="desc">
<DataField>desc</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>myDataSource</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>Reports_BasicInfo</CommandText>
<QueryParameters>
<QueryParameter Name="@personID">
<Value>=Parameters!personID.Value</Value>
</QueryParameter>
<QueryParameter Name="@numberINeedToAggregateData">
<Value>=Join(Parameters!viewOption.Value,"~")</Value>
<rd:UserDefined>true</rd:UserDefined>
</QueryParameter>
</QueryParameters>
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
</DataSet>
И я уже сказал это, но хранимый proc/dataset, который выдает ошибку, использует параметр с тем же набором из примерно 5 других отчетов (я попытался скопировать и вставить соответствующие разделы кода из рабочих отчетов, но я все еще получаю Ошибка). Итак, что случилось с этим?