web-dev-qa-db-ja.com

SSRSは変数または値をサブレポートからメインレポートにプルします

いくつかのサブレポートを含むメインレポートがあります。各レポートには、わずかに異なるクエリとデータの表示方法があります。

したがって、私の状況では、さまざまな基準でいくつかの異なるレポートからデータをコンパイルする必要があるテキストボックスがあります。例えば。

MainReportTextbox =(Sum(columnA, "Main Dataset"))-(SubReportTextBox))

OR

MainReportTextbox =(Sum(columnA, "Main Dataset"))-(subReportVariable))

this など、いくつかの提案された解決策を見ました。 =[Reports]!MainReport!SubReport!Textboxスキームを使用します。問題は、[Reports]が認識された識別子ではないことです。

サブレポートを破棄して、すべてを同じメインレポートで実行することを検討しましたが、2つの場所で同じことを維持せずに、レポートを個別に使用できる機能が失われました。

だから私の質問は、サブレポートから変数または要素(特にテーブル内のテキストボックス)の値を取得できるかどうかです。

答えが単に「いいえ」の場合は、MSDNまたは有効なソースから、なぜ「いいえ」または「いいえ」であるかについての情報を示し、有効なカウンターの提案をいくつか示してください。

15
Elias

質問とコメントのリンクは、SSRS以外のレポートを参照する場合があります。構文[subreport].[Report]![MyFieldName]または[Reports]![YourReportName]![YourSubReportName]![TheValueFromTheSubReportYouWantToReference]はSSRSでは使用されません。ただし、リンク先のディスカッションでojeffreyが指摘しているように、MSAccessレポートの設計に使用されます。

サブレポートのデータにアクセスするための一般的な方法はありません。 SSRSモデルでは、親レポートデータが処理され、サブレポートデータが処理され、サブレポートがレンダリングされ、結果が親に戻されてから、必要に応じてサブレポートを含めて親がレンダリングされます。 2つの間で渡される唯一のデータは、パラメーターがサブレポートに渡され、レンダリングされた出力が親に返されることです。親から渡されたデータは、次のレポートパラメータである必要があります: http://technet.Microsoft.com/en-us/library/ms160348(v = sql.100).aspx

サブレポートに必要なすべてのパラメーターは、パラメーターリストに含まれている必要があります。必要なパラメーターが欠落している場合、サブレポートはメインレポートに正しく表示されません。

信頼できる情報源を引用する場合: この議論はそれを要約します:

いいえ、サブレポートのレポートアイテムを参照することはできません。

しかし、それは少し古いです。Microsoftの従業員とMS BIMVPによって提供されたこの最近の 回避策の説明 もあります。

探している適切な参照を取得できるようにするには、サブレポートアイテムをリスト、テーブル、マトリックスなどのデータ領域に置き換える必要があります。

[別の投稿にスキップ] ...

ここで、メインレポートとサブレポートの差を計算したいようです。また、データソースが異なるため、ネストテーブル/マトリックス/リストを使用できませんよね?もしそうなら、私が考えることができる1つの回避策は、サブレポートにパラメーターを渡し、サブレポートの合計/小計を計算することです。つまり、いくつかの非表示/内部パラメーターを作成し、パラメーターを介してメインレポートからサブレポートに値を渡し、そこで合計/小計を計算します。

リンクされた質問に対するJeroenの回答は、私が進む方向を示しています。「共有データセット」を使用し、データセットの実行が遅い場合はキャッシュを有効にします。その後、同じデータセットの実行を親レポートとサブレポートに使用できます。これにより、パラメーターの使用が変更される可能性があります。通常、パラメーターはSQLクエリからレポート内のデータセットのフィルターに移動されます。

ただし、SSRS 2008R2で導入された Lookup function を使用すると、データセット間のレポートレベルの結合を非常に柔軟に行うことができます。

これをどのように設計するかについての詳細は、他のデータをやり取りする必要がある量と、レポートのクエリをどれだけうまくまとめることができるかに大きく依存します。

9
Jamie F

メインレポートで変数を作成し、サブレポートで更新して、メインレポートに値を戻すことができるようにします

例:メインレポートに{@Total}という名前の数式を作成します。

WhilePrintingRecords;
shared Numbervar myTotal := 0;

注:配置; ;なしで値を出力しません。上記の例の値を出力します数式の値を出力する場合は、値は出力されません。削除するだけです。 2行目からex

WhilePrintingRecords;
shared Numbervar myTotal := 0

メインレポートのレポートヘッダーに{@Total}を配置し、サブレポートに2番目の数式を作成します。メインレポートの数式に{@addTotal}という名前で小計を追加します。次の行を配置します。

WhilePrintingRecords;
shared Numbervar myTotal;
myTotal := myTotal + 200; //or any formula or field

この式を追加して、合計に値を追加するサブレポートに配置します

メインレポートに数式を作成して、{@ showTotal}という名前の総計を表示し、その中に次の行を配置します

WhilePrintingRecords;
shared Numbervar myTotal;
myTotal

この値をレポートに表示するメインレポートに{@showTotal}を配置しますが、サブレポートの後にこの数式を配置する必要があることを1つ覚えておいてください。

注:変数に値を割り当てるにはuse:=演算子

0
Jack Gajanan