SSRS 2008: сообщение об ошибке о том, что мой параметр не существует, но он явно существует? - PullRequest
28 голосов
/ 10 марта 2011

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

Ответы [ 11 ]

29 голосов
/ 13 июня 2012

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

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

21 голосов
/ 07 ноября 2012

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

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

10 голосов
/ 04 сентября 2013

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

6 голосов
/ 23 января 2014

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

5 голосов
/ 28 февраля 2017

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

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

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

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

enter image description here

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

    enter image description here

2 голосов
/ 12 декабря 2012

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

1 голос
/ 10 марта 2011

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

есть идеи по этому поводу?

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

0 голосов
/ 15 января 2019

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

0 голосов
/ 12 июня 2018

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

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

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

Использовал стрелки для перемещения вычисленногопараметр до конца всех параметров.

0 голосов
/ 04 марта 2016

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

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

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

...