1

従業員のグループと特定の日付とスーパーバイザのレコードを返すレポートを作成し、従業員がレポートをレンダリングするようにしたい(バッチの場合など)。私はメインレポートと3つのサブレポートでこれをやっています。サブレポートは個別に動作し、メインからレンダリングするサブレポートは1つだけですが、グループの1番目のレコードのみが表示されます。SSRSサブレポートでグループのレコードが1つだけ表示される

メインセットのデータセットには、USERID、BegDate、EndDateの3つのパラメータがあります。サブレポートのデータセットには、EMPID、BegDate、EndDateが使用されます。次のように私は、メインとサブレポートのパラメータにサブレポートを挿入:

DATASET1で WHERE EMPID = @CurEmp

メインレポートのパラメータがある。すなわちCurEmpがDATASET1/SQLクエリのWHERE句で使用されている

Name  Value 

    CurEmp  =First(Fields!EMPID.Value, "DataSet1") 
    BegDate [@BegDate] 
    EndDate [@EndDate] 

Name  Value 
@USERID  [@USERID] 
@BegDate [@BegDate] 
@EndDate [@EndDate] 

の式のValueは、最初のレコードだけをレンダリングするはずですが、レンダリングするために何も変更しないと思います。私はtutorialsをやって、2日間グーグルで遊んだ。私は単純なサブレポートを動作させることができますが、私がしようとしていることには何も適用されないようです。誰かが私の状況に当てはまる例に私を導くことができますか?

私は自分のVS2008環境をビジネスインテリジェンスプロジェクトに設定しました。

更新: @Samの提案ごとに説明するために、以下のSQLクエリを追加しました。私は実際には、おそらく私は間違ってクエリを書いているという事実を見始めていた。私はメインのクエリクエリをサブクエリと比較しなければならないことについて混乱しています....私はこれが私の意味を明確にするのに役立つことを願っています。

メインレポートデータセット=

SELECT 
v.EMPID, 
UPPER(p.FirstName + ' ' + p.LastName) as EmpFullName, 
v.dtmDate, 
v.TCode, 
v.Hours, 
v.ProjectNo, 
from vwPersonSummary v 
join tblPerson t on v.EMPID = p.EMPID 
WHERE v.USERID = @USERID --Supervisor’s EMPID 
AND 
v.dtmDate BETWEEN @BegDate AND @EndDate 
ORDER BY v.EMPID, v.dtmDate 

サブレポートのデータセット=

SELECT 
v.EMPID, 
UPPER(p.FirstName + ' ' + p.LastName) as EmpFullName, 
v.dtmDate, 
v.Tcode, 
v.Hours, 
v.ProjectNo 
from vwPersonSummary v 
join tblPerson t on v. EMPID = t. EMPID 
WHERE 
v.EMPID = @CurEmp 
AND v.dtmDate BETWEEN @BegDate AND @EndDate 
ORDER BY v.dtmDate 
+0

サンプルデータがある場合は、ビットが明確になります。 **ここでCurEmpはDataSet1/SQLクエリのwhere句で使用されます。つまり、WHERE EMPID = @ CurEmp **は混乱します。 – Sam

+0

@Sam質問で質問を更新しました – Doreen

+0

2番目のレポートにレコードが入力されていないということですか?フィルタがなければ、EmpIdフィールドをDataSet1から2番目のレポートのグリッドにバインドし、そこでデータを取得できるかどうかを確認します。 DataSet1にデータが入力されたことを確認したいだけです。 – Sam

答えて

0

だからあなたの修正/答えは以下のようなものになるだろう。

メインレポートからパラメータを定義するときは、次のようにする必要があります。

=Join(LookupSet(1,1,Fields!EMPID.Value,"DataSet1"),",") 

ことが定義されるとテキストがチェックされている複数の値を許可するように、サブレポートパラメータのデータ型が設定されていることを確認してください。

その後、サブレポートのデータセットでは、条件を設定しません。代わりに、データセットのプロパティでフィルタに行ってください。

セット

=CStr(Fields!EMPID.Value) 

のようなものとはでとしてオペレータを設定し、以下のようなものとしてを設定します。

=Split(Parameters!EmpId.Value(0),",") 

まあ基本的にそれはそれです。お役に立てれば。

+0

Join/LookupSet(etc etc)関数をどこに置くべきか正確にはわかりませんでしたが、手順をありがとうございました。メインレポートページのサブレポートプロパティのCurEmpのパラメータ値式フィールドに配置しました。質問:サブレポートデータセットのWHERE句を削除すると、@ CurEmpパラメータはどのように使用されますか?また、LookupSet関数はSSRS 2008では動作しません(2008 R2はありません)。私は、式ボックスに赤い波打ち線「認識できない識別子」を表示します。プレビューでエラーが表示されます: "サブレポートにはエラーがあります:[BC30451}名前 'LookupSet'が宣言されていません"。 – Doreen

+0

パラメータを配置する場所が正しい。 where句は、フィルタ条件を設定するフィルタ部分によって処理されます。 SSRSバージョンバンプと同じです。 2008年にそれをやろうとすると、複数のデータセットで回り込むことになります。 – Sam

+1

私はSSRS 2008の私のバージョンでは動作しませんが、私は理論的に理解しているので、サムの答えは正しいとマークしませんでした。サムにありがとう - これは確かに他の人を助けるでしょう。私は、(3)ネストされたリストでtablixを1つのリストに、フリーフォームのテキストボックスを他の2つのリストに、そして1つのデータセットを3つのパラメータで使用して行グループを使い始めました。私は試みていることを達成するためにEmpID/CurEmpパラメータを必要としないことを(あなたの気持ちで)実感しました。 – Doreen

関連する問題