イベントに参加した人々を報告するレポートがあります。各行は出席者のレコードを表し、レポート出力は個々のスプレッドシートに分割されるため、各スプレッドシートは BusinessEntity と EventType によってイベント出席者を表します。これは、次のグループ化を持つ 1 つのグループによって実現されます。BusinessEntityName でグループ化し、次に EventTypeCode でグループ化します。グループの各インスタンス間に改ページがあります。
つまり、BusinessEntity と EventType のすべての組み合わせに対して 1 つのスプレッドシートがあり、各スプレッドシートには 0 行以上のイベント出席者が含まれています。私の特定のシナリオでは、次のようなスプレッドシートがある場合があります。
- #1 - BusinessEntity ABC、EventType ブリーフィング
- #2 - BusinessEntity XYZ、EventType ブリーフィング
- #3 - BusinessEntity ABC、EventType ワークショップ
- #4 - BusinessEntity XYZ、EventType ワークショップ
(私のレポートは、大部分が連結されたデータを取り込むストアド プロシージャに対して実行されるため、レポート自体で行われるデータ操作はほとんどありません。)
各行には、NULL の場合もそうでない場合もある TechnicalCenter というフィールドがあります。イベントは TechnicalCenter に関連付けられている可能性があり、関連付けられている場合はその情報を表示したいと考えています。上記の例を続けると、データは次のようになります。
- #1 には 2 つの会議に 10 人の出席者がいて、各イベントに TechnicalCenter が割り当てられています
- #2 には 1 つの会議に 5 人の出席者がいて、イベントにテクニカル センターが割り当てられていません
したがって、スプレッドシート #A2 に TechnicalCenter を含む行がない場合、そのスプレッドシートの Technical Center 列を非表示にします。
これは、「そのグループに表示している特定のセットにデータがない場合、列を非表示にできますか?」という長い例だと思います。NOROWS または IF(COUNT) を使用して条件付きで列を非表示にできることはわかっていますが、単一のグループ/スプレッドシートの限られたデータ セットでそれを行う方法がわかりません。パラメータの選択に基づいてデータを非表示にする方法も知っていますが、これは異なります。
私が理にかなっていることを願っています。前もって感謝し、私が残したギャップを埋めることができるように質問してください.
~~~~~~~~~~~~~~
Scope
OK、 withを使用するためのポインタをありがとうCount
。それがどのように機能するかはわかりますが、まだ完全ではありません。この式でレポートを実行すると
=Count(Fields!Center.Value, "BusinessEntityName")
詳細行に、TechnicalCenter を含む詳細行の数の正しいカウント値が表示されます。(Center.Value はテクニカル センターの名前で、BusinessEntityName は実際には、BusinessEntity と EventType の両方でグループ化されている行グループの名前です。)
これは私を幸せにします。
次に、同じロジックを適用して列を非表示にしようとします。この式に基づいて、列の表示/非表示を設定します。
=IIF(Count(Fields!Center.Value, "BusinessEntityName")=0, "True", "False")
レポートをプレビューしようとすると、次のエラーが表示されます: Tablix '' の非表示の式に、集計関数に対して無効なスコープ パラメーターがあります。スコープ パラメーターは、含まれるグループの名前、含まれるデータ領域の名前、またはデータセットの名前のいずれかに等しい文字列定数に設定する必要があります。
含まれているグループの名前である BusinessEntityName を使用していると思っていたため、エラーを理解できませんでした。明らかに欠けているロジックを誰かが説明してくれますか?
~~~~~~~~~~~~~~~~~~~
http://msdn.microsoft.com/en-us/library/ms159673(v=sql.100).aspx
スコープについてもっと学ぼうとしていますが、問題は「デフォルトのスコープを使用するか、包含順序でより高いスコープを指定する必要がある」ことだと思います。そのため、適用するデータ (データ領域だと思います) よりも包含順序 (行グループ) が低いスコープを適用しようとしています。
この式を使用して、非表示にしたい列のセルを条件付きで非表示にすることができます。
=IIF(CountDistinct(Fields!Center.Value, "BusinessEntityName") < 1, True, False)
ただし、同じ式を列の可視性に適用しようとすると、スコープ パラメーター エラーが発生します。この封じ込め命令の問題を解決するにはどうすればいいですか?
スコープをデータセット名 (EventMemberAttendance) に変更しようとしました。列の可視性は、次の式に基づいています。
=IIF(CountDistinct(Fields!Center.Value, "EventMemberAttendance") < 1, True, False)
レポートのプレビューを実行すると、エラーが発生しなくなり、データセット全体で Center 値が null である可能性が低くなり、列が実際に非表示になります。ただし、データセット全体に少なくとも 1 つの Center 値がある場合、その列は、Center データが存在するシートだけでなく、すべてのシートで表示されます。また、スコープを Tablix 自体に変更してみましたが、今説明したのと同様の結果が得られました。
スコープが、改ページと組み合わされたグループの結果である単一のタブの出力であることを指定するにはどうすればよいですか? この要件を回避するにはどうすればよいですか: 「組み込み関数が現在のスコープまたは包含スコープを指定する必要があると述べている場合、現在のスコープよりも包含順序が低いか同じレベルのスコープを指定することはできません。」
ありがとう!