none
データウェアハウスでのデータの持ち方 RRS feed

  • 質問

  • SQLServer 2012 でデータウェアハウスを構築しようと考えています。

    基幹システム系のOLTPデータベースを元データとして作成しようと考えていますが、データの持ち方で悩むところがあり質問しました。

    例えば受注データ、受注明細データがあった場合に、どのようにデータを持った方が良いのでしょうか?

    受注データ

    • 受注ID
    • 受注日
    • 得意先コード
    • 担当コード
    • 合計金額
    • 伝票値引額
    • 消費税額
    • 備考

    受注明細データ

    • 受注明細ID
    • 受注ID
    • 商品コード
    • 数量
    • 金額
    • 仕入先コード

    のようなイメージのOLTPデータがあるとして、受注明細をファクトにしたときに、受注データの合計金額、伝票値引額、消費税額をどう扱えば良いのかわかりません。

    明細ではないので、ファクトに入れることはできないし、金額項目なので、ディメンションというのも変だと思いますしどうすれば良いか判断できなく悩んでいます。

    この例だとディメンションとファクトはこういうイメージで持った方が良いや設計時のアドバイスなどあればお願いしたいです。


    • 編集済み JBOYA 2014年1月16日 7:13
    2014年1月16日 7:12

回答

  • こんにちは。

    最終的に、どのような結果を望んでいるか?つまり、どのようなクロス集計をイメージしているか?で変わってくると思いますが。

    明細データ(数量、金額)がメジャーであるとすれば、

    受注データ:合計金額 => メジャーを受注IDで集計された値と捉えられるのではないでしょうか。
    消費税は計算列として用意できると思います。
    こうすると、値引値はどうするんだ?ということになりますが、値引き値に対する明細IDデータがあれば問題ないように思えます。
    (値引きを消費税計算前に適用するという前提ですが)
    消費税を計算列で用意する場合、母集合(Dimension)によって消費税計算結果が変わってしまう可能性がありますから、計算列側でCASE文などで条件を判定するなど必要となるかもしれません。たとえば、受注IDによる集合では消費税が正しく計算できるが、仕入先コードを母集合とした場合はうまく計算されないかもしれないなどです。
    あらかじめ、明細データに日付を結び付けておくことが必要と思います。

    また別のアプローチでは、明細の分析と、受注データの分析を別CUBEとして用意するという方法もありそうです。
    別CUBE(分析)であれば、付帯的な情報は単にIDに対する属性として用意すれば良いだけですし。

    このようなことから、何に対するどのような分析を行いたいか?を整理してみるとよいのではないでしょうか。

    後あまりRDBの構造を考えすぎないように(囚われない)したほうがよいかもしれません。

    って投稿してから、ふっっと思いましたが、もしかして、受注データの受注IDで受注明細に論理リレーションシップ張り(DSN)、両者合わせてメジャー系とすればよいだけかもって思いました。
    もしくは、それぞれのメジャー系を用意して、受注IDで結びつくのだから、何も問題ないような・・・とか
    結局目的次第ですね。

    • 編集済み Keiichi Oumi 2014年1月17日 0:07 追記
    • 回答の候補に設定 星 睦美 2014年1月20日 2:38
    • 回答としてマーク 星 睦美 2014年1月27日 2:42
    2014年1月17日 0:00

すべての返信

  • こんにちは。

    最終的に、どのような結果を望んでいるか?つまり、どのようなクロス集計をイメージしているか?で変わってくると思いますが。

    明細データ(数量、金額)がメジャーであるとすれば、

    受注データ:合計金額 => メジャーを受注IDで集計された値と捉えられるのではないでしょうか。
    消費税は計算列として用意できると思います。
    こうすると、値引値はどうするんだ?ということになりますが、値引き値に対する明細IDデータがあれば問題ないように思えます。
    (値引きを消費税計算前に適用するという前提ですが)
    消費税を計算列で用意する場合、母集合(Dimension)によって消費税計算結果が変わってしまう可能性がありますから、計算列側でCASE文などで条件を判定するなど必要となるかもしれません。たとえば、受注IDによる集合では消費税が正しく計算できるが、仕入先コードを母集合とした場合はうまく計算されないかもしれないなどです。
    あらかじめ、明細データに日付を結び付けておくことが必要と思います。

    また別のアプローチでは、明細の分析と、受注データの分析を別CUBEとして用意するという方法もありそうです。
    別CUBE(分析)であれば、付帯的な情報は単にIDに対する属性として用意すれば良いだけですし。

    このようなことから、何に対するどのような分析を行いたいか?を整理してみるとよいのではないでしょうか。

    後あまりRDBの構造を考えすぎないように(囚われない)したほうがよいかもしれません。

    って投稿してから、ふっっと思いましたが、もしかして、受注データの受注IDで受注明細に論理リレーションシップ張り(DSN)、両者合わせてメジャー系とすればよいだけかもって思いました。
    もしくは、それぞれのメジャー系を用意して、受注IDで結びつくのだから、何も問題ないような・・・とか
    結局目的次第ですね。

    • 編集済み Keiichi Oumi 2014年1月17日 0:07 追記
    • 回答の候補に設定 星 睦美 2014年1月20日 2:38
    • 回答としてマーク 星 睦美 2014年1月27日 2:42
    2014年1月17日 0:00
  • 遅くなってしまいましたが、アドバイスありがとうございます。

    RDBの構造に囚われない方が良いというのはなるほどと思いました。

    色々試しながらやってみたいと思います。

    2014年2月13日 2:51