web-dev-qa-db-ja.com

SSRS 2008:パラメータが存在しないというエラーメッセージが表示されますが、明らかに存在しますか?

約10個のパラメーターと約10個のデータセットと1つのデータソースを持つレポートがあります。私はたくさん入力しましたが、本当に助けが必要なので、最初からできる限り多くの情報を提供しようと考えました。

すべてを単純化して、これらがすべての関連する名前であり、レポートが基本的な従業員情報を取得していると仮定します。

  • パラメーター
    • facilityID:guidまたはuniqueidentifierの形式のテキスト。これは非表示で渡されるため、レポートのエンドユーザーは自分の施設の情報のみを表示できます。単一の値のパラメーター、空白ではなく、非ヌル、非表示、テキスト
    • startDate:開始日付範囲。レポートに今年1月1日からのデータを含めるとします。単一の値のパラメーター、空白ではなく、null、表示、日時
    • endDate:日付範囲の終了。今日/今だとしましょう。単一の値のパラメーター、空白ではなく、null、表示、日時
    • viewOption:3つのハードコードされた値(ラベル、値)( "現在の従業員"、1)および( "過去の従業員"、2)および( "施設を移動した従業員"、3);複数値パラメーター(したがって、すべてを選択することはオプションです)、空白ではなく、nullではなく、表示可能、テキスト
    • personID:データセットgetListOfNamesに基づきます。ラベルは従業員名で、値はそのpersonID(guid/uniqueidentifier)です。単一選択、非ヌル、非ブランク、テキストおよび可視
  • マイデータセット
    • getListOfNames:これは、指定された施設で指定された日付範囲内にあり、従業員のステータスがviewOptionパラメーター値にある会社の従業員のリストを取得します(そのため、1桁または3桁まで)。これはストアドプロシージャですが、join(parameter、 "〜")を渡し、ストアドプロシージャで分離することで、複数値のパラメータを処理するように設定しました。これは、他の5つのレポートで機能します。
    • getReportInfoOnSelectedPerson:本体クエリ。ユーザーがデータを必要とする従業員を選択した後、これはそのpersonIDと日付範囲を取り、メインテーブルを埋めます。

問題:
SSRSは、viewOptionが存在しないと言います。しかし、左側の[パラメーター]フォルダーに表示されます。 [パラメータ]の下に式を入力すると表示されます。 Parameters!viewOption.valueの下に波線のような赤い線はありません。しかし、getListOfNamesデータセットで使用されるパラメーターの値として設定しようとすると、エラーが発生します。 getReportInfoOnSelectedPersonデータセットに配置してまったく同じ方法で使用すると、SSRSはそれで問題ありません。 WTF?だから... rdlをチェックしましたが、すべてが正常です(実際のパラメーターが宣言されている場所、データセット参照で使用されている場所、すべて)。これは、この1つのデータセットです。そして、同じデータセット、同じ基本パラメーターを使用する同様のレポートがあり、そのレポートは問題ありません。データセットパラメーターの値を1または何かに設定しようとしましたが、それは問題ありませんが、Parameter!viewOption.value it .....に設定しようとすると、通常、ストアドプロシージャにJoinを渡しますチルダ〜を使用してパラメータを設定しますが、単純に保ち、一般的に機能するようにしようとしています(複数値のviewOptionパラメータの最初の値を渡すか、そのパラメータを単一のselectに渡し、値)が、結合も機能しません。これらはすべて、ストアドプロシージャでもある他のデータセットに対して機能します。

これは私のエラーです:
レポート処理中にエラーが発生しました。 (rsProcessingAborted)クエリパラメーター '@viewOption'の値式にエラーが含まれています:式がレポートパラメーターコレクション内の存在しないパラメーターを参照しました。 (rsRuntimeErrorInExpression)

これは明らかに、私のパラメーターは存在しないと言っていますが、どこでも見ることができます。そして、他のデータセットのパラメーター値の1つを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つの他のレポートで同じ設定のパラメータを使用します(作業レポートから関連するコードセクションをコピーして貼り付けようとしましたが、まだエラーが発生します) 。それで、これは何が問題なのでしょうか?

28
gloomy.penguin

私の状況では、実際にはパラメーター名の大文字小文字がわずかに変更されており、同じエラーがスローされていることがわかりました。

名前を正しい大文字に変更し、そのパラメーターを参照するコードビハインドで検索し、大文字と小文字を修正する必要がありました。その後正常に展開されました。

22
logixologist

上/下矢印を使用して、パラメーターの順序を変更してみてください。

それらは依存の順に表示される必要があります。

30
charles

依存関係に基づいてレポートパラメーターを並べ替えると、問題が修正されました。リストの一番下にレポートパラメータがありましたが、上のパラメータはこの一番下に依存していました。したがって、レポートパラメータを作成/再作成するときは、順序が正しいことを確認してください。

10
RDeveloper

同じ問題がありました。 [データセットプロパティ]の[パラメーター]タブを確認し、式(fx)ボタンをクリックします。パラメーターはここでは自動的に更新されないようです。私のパラメーターの1つは、小文字ではなく大文字のままです

7
user3193880

これは主に、データセットでパラメータ名が更新されていないことが原因である可能性があります。

この 記事は解決に役立ちました

SSRS内のデータセットのパラメーター(名前またはケース)を編集する場合、レポートをプレビューするときに以前のエラーメッセージが表示されることがあります。表面上では、パラメータの設定とデータセットクエリでパラメータの大文字と小文字が同じように見える場合があります。変更が必要な別の場所があります。

  1. エラーメッセージのパラメーターを使用するデータセットのデータセットプロパティを開きます。
  2. 左側のリストペインで[パラメータ]プロパティを選択します。
  3. 指定したパラメーターの[式エディター]ボタンをクリックします。

enter image description here

  1. ここで、式に赤い下線が付いていることに気付くでしょう。ここで、パラメータ名の大文字と小文字を修正する必要があります。

    enter image description here

6
thebenman

この問題は、「早すぎる」パラメーターを参照する場合にも発生します。オーバーライドされたOnInit内から。その場合、データセット自体が問題のパラメーターに関連していない場合でも、使用可能な値やパラメーターのデフォルト値にデータセットを使用することはできません。

2
lilalinux

新しいレポートを作成し、コードを新しいレポートにコピーして保存しました。新しいレポートで完全に機能するようになりました...古いレポートを削除して新しいレポートの名前を変更し、サーバーにデプロイしたところ、すべて問題ありません。もっと早くこのことを考えていたらよかったのに。 SSRSはとてもおもしろいですが、実際に何が問題を引き起こしているのかさえわかりません。

そのアイデアはありますか?

(SSRSを数回再起動し、コンピューターを数回再起動し、.dataファイルを削除し、サーバー上でコピーを削除しましたが、これは単に安全のためにコンピューター上で行われていました...このすべての間に、)

1
gloomy.penguin

SSRSでも同様の問題が発生しました。コードは正しく、SQLパラメーターは正しいが、レポートはパラメーターエラーをスローしていました。共有データセットを使用していました。同じSQLを埋め込みデータセットにコピーすると、レポートは完全に機能しました。したがって、SSRSソフトウェアには奇妙な動作を引き起こすバグがあることに同意します。

0
RedZebra

私にとっては、rdlファイルを開いて、新しいパラメーターをorder/position(xml nodes)に追加する必要がありました。

0
Daniel B

上記のすべての答えが役立ったため、この問題もありました。

私の扱いにくいのは、データセットがSSASデータセットであったため、非表示になっていることです。パラメータのコードを検索して、それがどこで使用され、どこで見つかったかを確認する必要がありました。

非表示のデータセットを表示するには、[レポートデータ]タブで[データセット]フォルダーを右クリックし、[非表示のデータセットを表示]ボックスにチェックマークを付けます。

0
Will Wainwright

私にも起こった

別のパラメーターに依存する1つのパラメーターがありました

しかし、依存するものの順序は上でした

矢印を使用して、計算されたパラメーターをすべてのパラメーターの最後に移動しました。

0
asmgx