2

サブレポートを非表示/表示する式を使用して非表示のプロパティを設定できますが、SQL プロファイラーを使用して見つけたのは、サブレポートが非表示になっていても、サブレポートのストアド プロシージャがまだ実行されていることです。

ストアドプロシージャ自体を変更する以外に、これを回避する方法を知っている人はいますか? そうでない場合、サブレポートが非表示になっているにもかかわらず、ストアド プロシージャが実行される理由を知っている人はいますか?

これはThis oneと同じ質問ですが、そこには答えがないので、もう一度質問します。

4

2 に答える 2

6

7 つのサブレポートに 1:n の行がある大規模で複雑なレポート (最大 10,000 の制御行) があります。これは、サブレポートでの SQL 実行を抑制できない限り、犬のように実行されます (ほとんどのサブレポートはほとんど非表示になっているため)。

苦労の末、サブレポートのレンダリングとデータセットの実行を簡単に抑制できることがわかりました。必要なのは、サブレポートの必須レポート パラメーターだけです。通常、サブレポートには ID フィールドが渡されるため、これは問題になりません。

メイン レポートでは、パラメータは次のような式で渡されます。

=Iif(Fields!SubReportXisHidden.Value,Nothing,Fields!ID.Value)

サブレポートは、欠落しているパラメーターをバーフし、レンダリングせず、SQL を実行しません。

深い喜び!

于 2014-07-18T16:01:58.010 に答える
0

そのロジックを SQL Management Studio で実行するだけです。SSRS は実際にはイベント ドリブン システムではなく、コード ブロックや Visual Basic でいくつかの小さなことを実行できますが、多くは実行できません。複雑な if then else シナリオで実行時の実行計画を実行するための実行計画レベルのコーディングをプログラムすることを意図したものではありません。実際、このアドオンよりもサーバー向けであるため、高度なループとインデックスを実行しようとすると怒ってしまいます。与えられたデータと、要素の非常に基本的な条件付けを提示することを目的としています。クエリとそのコストを本当に実行したい場合、または SQL Management Studio で作成された proc にビット フリップを追加したくない場合は、次のようにします。

create procedure dbo.ToCreateOrNotToCreate 
    (
        @input varchar(32)
    ,   @Run bit
    )
as 

BEGIN
    if @Run = 1 
        Select 'You selected to run "' + @input + '" at a cost!'
    else 
        Select 'Don''t run and save performance'
END


exec dbo.ToCreateOrNotToCreate @input = 'My Input', @Run = 1
exec dbo.ToCreateOrNotToCreate @input = 'My Input', @Run = 0
于 2013-08-14T15:57:09.720 に答える