3

データベースを構築する最良の方法を探しています。私は、1997 年から 2012 年までの数千社の四半期財務諸表を持っています。各企業には、損益計算書、貸借対照表、キャッシュ フロー計算書の 3 つの異なる計算書があります。

各四半期を合計して、各ステートメントの各項目の年間合計を取得するなど、データに対して計算を実行できるようにしたいと考えています。

これまでに2つの方法を試しました:

1) 独自のテーブルに各明細書の各項目を格納します。つまり、Sales は 1 つのテーブルであり、追跡しているすべての企業の売上データのみを持ち、会社を主キーとし、各四半期のデータを個別の列にします。これはデータを操作する最も簡単な方法のように思えますが、何百ものテーブルがあるため、四半期ごとにデータを更新するのは時間がかかります。

売上表
会社名 q32012 q22012 q12012
ABC社 500 100 202
XYZ社 230 302 202

2) 更新は少し簡単ですが、データの操作が難しいもう 1 つのオプションは、ステートメントごとに会社ごとに個別のテーブルを用意することです。たとえば、Royal Bank の損益計算書には独自のテーブルがあり、プライマリ カラムが明細項目になります。

Royal Bankの損益計算書
Line_Item q32012 q22012 q12012
販売            
純利益           

ここでの問題は、このデータを年率化しようとすると、グループによる非常に醜い出力が得られることです

SELECT    
(CASE WHEN Line_Item = 'Sales' THEN SUM(q4 + q3 + q2 + q1) ELSE '0' END) AS Sales2012, 
(CASE WHEN Line_Item = 'NetProfit' THEN SUM(q4 + q3 + q2 + q1) 
      ELSE '0' END) AS Inventories2012
FROM            dbo.[RoyalBankIncomeStatement]
GROUP BY Line_Item

どんな助けでも大歓迎です。

4

3 に答える 3

5

四半期ごと、月ごと、年ごとなど、会計レポート用のデータベースを構築しなければならないときはいつでも、スター スキーマの設計とデータ ウェアハウスからコンセプトを借りると便利だと思います。 DW。

借用した概念は、日付ごとにキーが付けられた、日付ごとに 1 つの行を持つテーブル (ALMANAC と呼びましょう) を持つことです。この場合、自然キーがうまく機能します。ここでの依存属性は、日付が属している会計月と四半期、企業が営業していた日付 (TRUE または FALSE)、および会社のカレンダーにあるその他の癖などです。

次に、このテーブルを何もないところから生成するコンピューター プログラムが必要です。会社のカレンダーの奇妙なルールはすべて、この 1 つのプログラムに埋め込まれています。ALMANAC は、3,650 を少し超える行で 10 年間をカバーできます。それは小さなテーブルです。

日付に Date データ型を一貫して使用する場合、運用データのすべての日付を ALMANAC テーブルへの外部キーのように使用できるようになりました。たとえば、各販売には販売日があります。次に、会計四半期、会計年度、または好きなように集計するには、運用データを ALMANAC と結合し、GROUP BY と SUM() を使用して必要な集計を取得するだけです。

シンプルで、大量の期間レポートを簡単に生成できます。

于 2012-12-09T06:47:42.170 に答える
2

あなたへの私のアドバイスは、これを行うために SQL データベースを使用しないことを検討することです。代わりに、SQL Server Analysis Services (SSAS) などの使用を検討してください。SSAS をすぐに使い始めたい場合は、PowerPivot for Excel に慣れることをお勧めします。PowerPivot で開発したモデルを取得し、準備ができたら SSAS にインポートできます。

SQL をお勧めしないのはなぜですか? SQL Server でアカウントを集約する際に問題が発生するためです。たとえば、貸借対照表は、SQL で簡単に集計できるものではありません。たとえば、SQL Server に 2010 年の「現金」を要求すると、 2010 年 12 月末の時点で、その年の Cash のすべてのエントリを合計したいわけではありません (ナンセンスな数値になります)。一方、損益計算書に表示されるような収入と費用の勘定では、それらの値を合計したいと思うでしょう。さらに悪いことに、一部のレポートにはさまざまな種類のアカウントが含まれるため、レポート作成が非常に困難になります。

SSAS には、アカウントの種類に基づいてレポートを集計する方法を "認識" する製品内の規定があり、これを設定する方法を示すことができる多くのチュートリアルがあります。

いずれにしても、データをレポート システムまたは Analysis Services キューブに入れる前に、どこかに保存する必要があります。そのためには、データを次のように構造化する必要があります。Reports というテーブルにデータを保存しているとします。

Reports
--------
[Effective Date]
[CompanyID]
[AccountID]
[Amount]

Account テーブルには、保存しようとしているもの (収入、支出など) の説明が含まれます。[発効日] 列はDates、データが属する年、四半期などを説明する表にリンクします。本質的に、私が説明しているのは、スター スキーマと呼ばれるレポート データベースの古典的な形です。

于 2012-12-08T18:41:58.873 に答える
1

おそらく、1 つのデータ テーブルで次の構造を使用します。

Company
StatementType 
LineItem
FiscalYear
Q1, Q2, Q3, Q4

StatementType は、損益計算書、貸借対照表、またはキャッシュ フロー計算書になります。明細項目は明細書の項目のコード化/非コード化テキストで、会計年度は 2012 年、2011 年などです。ラインアイテムが会社間で一貫していることを確認する必要があります。

この構造により、フラットステートメントを照会できます-

select
LineItem, Q1, Q2, Q3, Q4
from Data
where 
Company = 'RoyalBank'
and FiscalYear = 2012
and StatementType = 'Income Statement'

また

前四半期比

select
FiscalYear,
Q1
from Data
where 
Company = 'Royal Bank'
and 
StatementType = 'Income Statement'
and
LineItem = 'Sales'
order by FiscalYear

骨材に加えて。ステートメントを明細項目の元の順序に戻すことができるように、ある種のインデックス参照を含む明細項目用の別のテーブルが必要になる場合があります。

于 2012-12-08T18:50:15.937 に答える