2017-05-09 9 views
0

私は毎日実行されるレポートを持っています。このレポートの出力をcsvファイルに送信したいと思います。レポートの性質上、一部のデータが失われることがあります(ジョブが実行されると新しいデータが生成されることがありますが、時には長いジョブであるためこのプロセスで失われるデータもあります)。SQLサーバレポートのクロスチェック

前日のデータが失われていないことを日常的にチェックする方法はありますか?おそらく、データが表示されていないことを示すために各行の最後にティックまたはクロスが付いていますcsvとしてエクスポートされますか?

私は機密情報を扱っており、レポートの詳細を共有することはできません。

+2

これは、それほど広すぎます。データ、スキーマ、データを生成するために使用しているメソッド、および直面している問題の実際の例に関する情報はほとんどありません。重要な情報を含まないダミーのレポートデータを作成し、実際の問題を確認できる単純なプロセスフローを作成する必要があります。 – Tanner

答えて

0

これはかなり一般的な質問です。具体的な内容がなければ、具体的な答えを伝えることは非常に難しいですが、これまで私が使ってきた解決策がいくつかあります。

通常、このようなレポートには「総計」行があります。ウィジェットレポートは、月、地域、営業担当者、製品タイプなどで細分化されていますが、通常は「総ウィジェット売り」があります。これがクイッククエリー(結合や他の改良を取り除く必要があるかもしれません)の場合、レポートデータを生成した後にそのクエリーを実行すると、レポートの総計とレポートの最後の総計を比較できます。結果が異なる場合は、レポートの実行中にデータが変更されたことがわかります。

SQLServer固有のもう1つのオプションは、レポート対象のデータに対してchecksumを使用することです。レポート実行の開始と終了の間にチェックサムが変更されると、データが変更されたことがわかります。最後に

- 最も劇的 - レポートの精度が重要な場合は、特定の行が、レポートの実行に含まれていたことを記憶することができます。これにより、レポートがはるかに複雑になりますが、必要なすべてのデータが含まれていることを明確にすることができます。例えば、

insert into reporting_history 
select @reportID, widget_sales_id 
from widget_sales 

--- reporting logic here 
select widget.cost, 
     widget_sales.date, 
     widget_sales.price, 
     widget_sales...... 
from widgets inner join widget sales on ... 
      inner join reporting_history on widget_sales.widget_sales_id = widget_sales.widget_sales_id 

---- all your other logic 
+0

パーフェクト - ちょうど必要なものを正確に実行しました – JWain