2011年5月25日水曜日

第8回:ディメンショナルモデリング:ファクト設計:トランザクション、スナップショット、アキュムレーションスナップショット

 前回は、ディメンショナルモデリングで重要なスローリーチェンジングディメンションについて解説しましたが、今回は分析する数値部分にあたるファクトの設計について説明します。

ファクトって何?

 さて、復習です。ファクトって何でしょうか。ファクトはスタースキーマの真ん中に位置するデータで分析する数値のことです。製品によってはメジャーと呼ばれたりします。売上高、ログイン数、会員数などがファクトにあたります。

ファクトの設計 

 そのファクトデータの格納方法ですが、実は大きく分けてファクトの利用目的によって下記の3つの設計方法にわかります。
・トランザクション
・スナップショット
・アキュムレーションスナップショット

 以下順にそれぞれのファクト設計について説明します。
 
トランザクション

 まずはトランザクションからです。これはもっともオーソドックスなファクトの設計方法で、分析するデータがトランザクションデータの積み上げで掲載される場合に使用されます。
 よくわからないと思うので、例をもとに説明します。たとえば、売上高ですが、売上高は、当たり前ですが、それぞれの商品の売り上げを足し上げたものが全体の売上高ですよね。
 あと、会員サイトの会員数やログイン数、Webサイトのページビュー数もそれぞれの会員、ログイン、ページビューの積み上げで計算されますね。

 では、設計はどうすのでしょうか。簡単です。そのまま、各トランザクションのデータをそのままファクトテーブルに挿入していくだけです。とっても簡単ですね。これがトランザクション。


スナップショット

 次はスナップショットです。これは、名前から推測できるようにある時点での状況を分析するために利用します。たとえば、在庫ですね。
 在庫は、入荷や出庫などが頻繁に行われて在庫は常に変わります。そして、分析する場合はここの出庫、入庫というよりもある時点での在庫がどのくらいあるかということを分析します。たとえば、各月末の在庫状況の推移などです。

 では、どのように設計するのでしょうか。もちろん、入庫や出庫などのトランザクションデータを格納しておいて、クエリを投げることによってレポートを作成できるのですが、これでは時間がかかりすぎます。
 そのため、ETLツールなどを利用して、トランザクションデータから必要となる時点のスナップショットデータを作成します。これがスナップショットです。


アキュムレーションスナップショット

 最後にアキュムレーションスナップショットです。これは関連するトランザクションデータを分析したい場合に利用します。
 たとえば、ある製品を販売する場合、注文受付→工場へ発注→工場から商品受取→出荷→商品受取→支払などの一覧のプロセスを経ると思います。
 それぞれ個別に分析する場合もあると思いますが、注文受付から商品支払までどのくらい時間がかかているかなど、プロセス全体を分析したい場合があると思います。
 その際にこのアキュムレーションスナップショットを利用します。

 トランザクションの場合は、トランザクションデータの発生ごとにデータをどんどん追加していきますが、アキュムレーションスナップショットの場合は、プロセスの初めでデータができて、あとはプロセスを経るごとに関連するフィールドを更新していくことになります。たとえば、注文受付の時点でデータの作成と受付日は入ります。次に工場に発注されると、発注日が、工場から商品を受けとると商品受付日が更新されるといった感じです。


 今回は、ファクト設計について説明しました。次回は、ファクト設計の派生版であるファクトレスファクトテーブルについて説明します。 

0 件のコメント:

コメントを投稿