web-dev-qa-db-ja.com

SSRSレポートにデータが表示されない

SQL Server 2005 SSRSレポートを作成しましたが、データがプレビューウィンドウに表示されていません。

データセットは、Stringパラメーターに対してストアドプロシージャから正しく設定されます。データペインで実行できます。プレビューペインでレポートを実行すると、正しい行数が表示されますが、セルの内容にはデータが含まれていません

Missing Data

ソースデータセットは、一時テーブルの内容を返すSQL Server 2005の文字列パラメーターで渡されるストアドプロシージャに基づいています。次に、データセットはフィールドをローカルにマップします。これをデータビューで正しく実行できます。

ストアドプロシージャ

ALTER PROCEDURE spWebReportStage25BuildReview
    @BuildNumber as nvarchar(50)

一時テーブルスキーマ

CREATE TABLE #tmpModelZones
(
    BuildID bigint NOT NULL,
    BuildNo nvarchar(50) NOT NULL,
    ModelID int NOT NULL,
    ModelName nvarchar(50) NOT NULL,
    ZoneID int NOT NULL,
    ZoneName nvarchar(50) NOT NULL,
    SortOrder int NOT NULL,
    Created bit DEFAULT 0 NOT NULL,
    Closed bit DEFAULT 0 NOT NULL,
    PRIMARY KEY (BuildID, ZoneID)
)

SSRSデータセット

enter image description here

SSRSデータセットマッピング

enter image description here

SSRSデータセットパラメーター enter image description here

パラメータ付きのデータセットの実行

enter image description here

表示されたテーブルには、追加のグループ化、フィルター、または集約はありません。単なる平らなテーブルです

14
Phil Murray

一時テーブルを使用する場合、SSRSはメタデータの取得に失敗します。したがって、SSRSに列名を知らせるには基本的に2つの方法があります。

  1. 追加 SET FMTONLY ON。これによりメタデータが取得されますが、データは表示されません。

  2. [データ]タブに移動し、[汎用クエリデザイナー]をクリックして、[フィールドの更新]をクリックします。これにより、パラメータ値を指定するためのダイアログボックスが表示されます。クエリデザイナでクエリを実行すると、SSRSはストアドプロシージャからスキーマとデータを取得します。これで、データがプレビューペインで利用可能になります。

8
praveen

これを見たことがない。ただし、SSRSは時々「オフ」になることがあるので、試してみるべきことのリストを示します。これらのほとんどは、「電源を切ってから入れ直してみましたか?」というタイプのものだと思います。

  • レポートに関連付けられている.dataファイルを削除.
  • レポートを複製またはバックアップし、新しい基本的なTablixにデータセットを追加するを試して、データが表示されるかどうかを確認します。
  • hiddenプロパティを確認してください。 (他のバカな理由で)(他の健全な製品のように)VisibleY/Nフィールドではなく、Hiddenではないことを忘れないでくださいY/Nフィールド。
  • 再確認フォントの色とサイズなど.
  • レポートを実行しますレポートサーバーで(プレビューではなく)、それが機能するかどうかを確認します。
  • パラメータの実際の値を表示に一時的なテキストボックスを使用して、データセットをテスト実行したときとまったく同じかどうかを確認します。
  • コードビハインドを確認(rdlのxml)で、Tablixの予期しないフィルター、非表示のプロパティ、式などを確認します。 RDLを「読む」ことができなくても、構文を強調表示することで、それをざっと読み、これに関する多くの情報を抽出できるはずです。
  • ExecutionLog2およびその他のログをチェックして、レポート実行で返される行数を確認します。

さらに、質問を更新/編集するとさらに情報が得られます。

  • Tablixにはどのようなグループ分けがありますか?
  • Tablix、行グループ、および列グループのフィルターは何ですか?
  • データセットの一般的な構造とその結果は何ですか?
  • パラメーターはどのように構成され、使用されますか?
11
Jeroen

同様の問題もありました。私の場合、パラメータや何もなしで発生しました。想像できる最も単純なレポートです。単一のフィールドを持つテーブルが含まれ、フィルターは使用されませんでした。なんとかデータを表示することはできましたが、セルに収まらない行のみが表示されたため、行の高さが強制的に増加しました。

この問題に対する私の修正:フォントまたはフォントサイズを標準(サイズ10、Segoe UI)から変更します。その後、すべてのデータが表示されました。これをSegoe UIに戻すと、データは再び消えました。

3
Stijn

同じ問題がありました。これが私が見つけたものです。ここに私のコードがあります:

    DECLARE @tblPigProblems TABLE (
    Id          INT IDENTITY, 
    PPId            INT, 
    GaugeColor      VARCHAR(25), 
    FullStartTime       VARCHAR(25), 
    PigSystem         VARCHAR(25)
    )

    IF (1 = 0)
    BEGIN
        SELECT * FROM @tblPigProblems
    END

    ...

    SELECT '@tblPigProblems'    [PigProblems],  
    @p_vchLine      [Line],         
    GaugeColor      [Product],
    FullStartTime       [Start Time],
    PigSystem       [Pig System]
FROM @tblPigProblems

最初の "SELECT * FROM @tblPigProblems"を使用して、データセットを返す最終的な選択ステートメントの前にコードでエラーメッセージが指定された場合、SSRSがストアドプロシージャからフィールドを決定できるようにしました。次に、結果が決まると、フィールドにエイリアスを割り当てました。問題は、フィールドのエイリアスが宣言されたフィールド名と一致しないことです(つまり、宣言されたフィールド「GaugeColor」は、結果セットを作成するためにselectで指定したエイリアス「[Product]」と一致しませんでした。これは、SSRSレポートのデータセクションのフィールドを更新し、データセットフィールドを表示したときに、テーブル宣言からフィールド名がリストされた(つまり、「GaugeColor」)ことです。 (!をクリックすると)、SSRSにリストされた結果セットにフィールドエイリアスが表示されました(例: "Product")。これらは一致しなかったため、フィールドを割り当てたテキストボックスに何も表示されませんでした。 !ColorGauge.Value ")。SSRSはこの不一致を検出せず、レポートの作成を許可しましたが、値の表示は許可しませんでした。修正は簡単でした。

    IF (1 = 0)
    BEGIN
        SELECT * FROM @tblPigProblems
    END

で:

    IF (1 = 0)
    BEGIN
        SELECT '@tblPigProblems'    [PigProblems],  
        @p_vchLine      [Line],         
        GaugeColor      [Product],
        FullStartTime   [Start Time],
        PigSystem       [Pig System]
    FROM @tblPigProblems
    END

ダン

3
Dan Goodell

作業レポートでデータの表示が停止する場合がありました。同じデータセットにリンクされた、書式設定のない別のテーブルを追加しました。SSRSによってパラメーターが渡されたときに、クエリがデータを返さないことを確認しました。調査した後、「アンカー日付」値のテストパラメーターがYYYY-MM-DDとしてフォーマットされていることに気づき、更新されたクエリで、日付パラメーターの文字の順序について想定していました(YYYYに切り捨てます) -MMは1つの結合になります)。

SSRSが別の形式で日付を渡しているのではないかと疑っていました(MM/DD/YYは現在のデフォルトの日付の文化的設定です)。そのため、その思いつきで実行して、渡された日付形式で動作するようにSQLロジックを変更しました。 -例left(convert(date、@anchorDate、20)、7)

これは私の問題を修正しました-私がテストしたフォーマットの仮定(開発中にクエリをテストするためにハードコードされた値)は悪い仮定でした。 SSRSは、ローカル形式でもデータを渡すことができます。したがって、この種の仮定に注意してください。