Подтвердить что ты не робот

SSRS 2008: сообщение об ошибке, указывающее, что мой параметр не существует, но это ясно?

У меня есть отчет, содержащий около 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 других отчетов (я попытался скопировать и вставить соответствующие разделы кода из рабочих отчетов, но я все еще получаю Ошибка). Итак, что случилось с этим?

4b9b3361

Ответ 1

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

Мне пришлось изменить имя на правильный корпус, а затем искать в коде позади все, что относится к этому параметру, и исправлять его корпус. После этого развернулось.

Ответ 2

Попробуйте изменить порядок параметров, используя стрелки вверх/вниз.

Они должны появиться в порядке зависимости.

Ответ 3

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

Ответ 4

Была та же проблема. Проверьте вкладку "Параметры" в Свойствах набора данных и нажмите кнопку выражения (fx). Параметры здесь, кажется, не обновляются автоматически, один из моих параметров по-прежнему имел прописные буквы вместо строчной орфографии

Ответ 5

В основном это может быть связано с тем, что имя параметра не обновляется в наборе данных.

Эта статья помогла мне решить ее

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

  1. Откройте свойства набора данных для наборов данных, которые используют параметр в сообщении об ошибке.
  2. Выберите свойство "Параметры" в левой части списка.
  3. Нажмите кнопку "Редактор выражений" для указанного параметра.

enter image description here

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

    enter image description here

Ответ 6

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

Ответ 7

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

любые идеи по этому поводу?

(я несколько раз перезапускал SSRS, несколько раз перезагружал свой компьютер, удалял файлы .data, удалял копию с сервера, даже если это происходило на моем компьютере, чтобы быть в безопасности... во время всего этого, btw)

Ответ 8

У меня возникли аналогичные проблемы с SSRS. Код был верным, параметры SQL были правильными, но в отчете возникали ошибки параметров. Я использовал общий набор данных. Я скопировал один и тот же SQL-код в Embedded Data Set, и отчет работал отлично. Итак, я согласен с тем, что у программного обеспечения SSRS есть ошибки, вызывающие странное поведение.

Ответ 9

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

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

Чтобы просмотреть скрытые наборы данных, щелкните правой кнопкой мыши папку "Наборы данных" на вкладке "Данные отчета" и отметьте поле "Показать скрытые наборы данных".

Ответ 10

Случилось со мной тоже

Был один параметр в зависимости от другого

Но порядок зависимости был на вершине

Используйте стрелки, чтобы переместить вычисляемый параметр в конец всех параметров.

Ответ 11

Мне пришлось открыть rdl файл и добавить новый параметр в нужный мне порядок/положение (узлы xml).