У меня есть отчет, который имеет около 10 параметров и около 10 наборов данных и один источник данных. Я набрал много, но мне действительно нужна помощь, поэтому я решил, что постараюсь предоставить как можно больше информации о проблеме с самого начала.
Давайте упростим все это и представим, что это соответствующие названия всего и что в отчете содержится основная информация о сотруднике:
- Параметры
- unitID: текст в формате 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 это ошибки ..... Теперь, как я уже сказал выше, я обычно передаю хранимый процесс соединения для параметра с тильдой ~, но я пытаюсь сделать его простым и заставить его работать просто в общем (либо передав ему первое значение многозначного параметра viewOption, либо превратив этот параметр в один выбор, и просто передавая. значение), но соединение не работает. Все эти вещи работают для другого набора данных, который также является сохраненным процессом.
Это моя ошибка:
Произошла ошибка во время обработки отчета. (rsProcessingAborted) Выражение Value для параметра запроса query @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
Однако ... когда я пытаюсь поместить join (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>
И я уже сказал это, но сохраненный набор процедур / данных, который выдает ошибку, использует параметр с таким же набором параметров примерно в 5 других отчетах (я пробовал копировать и вставлять соответствующие разделы кода из рабочих отчетов, но я все еще получаю Ошибка). Итак, что не так с этим?