3

テーブル内のレコードには、有効な日付の範囲が含まれています。たとえば、*tbl1.start_date*および*tbl1.end_date*です。したがって、特定の日付範囲で有効なすべてのレコードを確実に取得するために、選択ロジックは次のようになります<...> WHERE end_date >= @dtFrom AND start_date < @dtTo( SQLステートメントで使用される@dtToパラメーターは、実際にはレポートで使用される* @ prmDt_To *パラメーターの翌日に計算されます)。

ここで、レポートに、指定されたデータ範囲内の各日のレコード数をカウントし、有効なレコードがなかった日があればそれを含める必要があります。したがって、取得されたレコードは、数日でカウントされる場合があります。データセット内の再帰CTEを使用すると比較的簡単に実行できますが、経験則では、SQLデータベースへの不要な負荷を回避し、代わりに必要な生データのみを返し、レポートエンジンにグループ化を処理させます。では、SSRS内でこれを行う手段はありますか?

ありがとう、セルゲイ

4

1 に答える 1

1

カスタム コードを使用して SSRS で何かを実行できる場合もありますが、それはお勧めしません。これを行う場所はデータセットです。SSRS は、データセットに存在しないグループを埋めるようには設計されていません。それはあなたがやろうとしていることのように聞こえます.SSRSは、その日付がデータセットにあるかどうかにかかわらず、日付ごとにグループを作成する必要があります.

データベースに数値または日付テーブルがない場合は、言及したように、関心のある範囲内のすべての日付のレコードを含む再帰 CTE を作成します。次に、これをテーブルに外部結合しCOUNT(tbl1.start_date)、適切な日を見つけるために使用します。これは、SQL サーバーのクエリとしてはそれほど苦痛ではありません。

本当に CTE を回避する必要がある場合は、範囲内の日付を生成するために使用する日付または数値テーブルを作成します。

于 2013-03-06T19:21:48.667 に答える