12

データ ウェアハウスにいくつかのエンティティがあります。

  1. Person - personId、dateFrom、dateTo などの属性を使用して、姓、生年月日などを変更できます - 徐々に変化するディメンション

  2. ドキュメント- documentId、番号、タイプ

  3. 住所- addressId、city、street、house、flat

(Person と Document) の関係は 1 対多、(Person と Address) の関係は多対多です。

私の目標は、次の質問に答えることができる履歴ファクト テーブルを作成することです。

  1. 定義された日付に定義された住所に住んでいたのは、どの文書を持ったどの人物ですか?

2, 定義された住所には、定義された時間間隔でどのような居住者の履歴がありますか?

これはDWが設計したものだけではなく、DWの設計で最も難しいことだと思います。

たとえば、personId=1 の Miss Brown と documentId=1 および documentId=2 のドキュメントは、2005 年 1 月 1 日から 2010 年 2 月 2 日まで addressId=1 のアドレスに存在し、その後 addressId=2 に移動しました。 2010 年 2 月 3 日から現在の日付まで住んでいます (NULL?)。しかし、彼女は 2006 年 4 月 5 日から姓を Mrs Green に変更し、2007 年 6 月 7 日から documentId=1 の最初のドキュメントを documentId=3 に変更しました。personId=2、documentId=4 の Mr Black は、2010 年 2 月 3 日から現在の日付まで addressId=1 に住んでいます。

addressId=1 で、時間間隔が 2000 年 1 月 1 日から現在までである質問 2 のクエリで期待される結果は、次のようになります。

行:

last_name="Brown", documentId=1, dateFrom=01/01/2005, dateTo=04/04/2006

last_name="Brown", documentId=2, dateFrom=01/01/2005, dateTo=04/04/2006

last_name="Green", documentId=1, dateFrom=04/05/2006, dateTo=06/06/2007

last_name="Green", documentId=2, dateFrom=04/05/2006, dateTo=06/06/2007

last_name="Green", documentId=2, dateFrom=06/07/2007, dateTo=02/01/2010

last_name="Green", documentId=3, dateFrom=06/07/2007, dateTo=02/01/2010

last_name="Black", documentId=4, dateFrom=02/03/2010, dateTo=NULL

複合キー (personId、documentId、addressId、dateFrom) を使用してファクト テーブルを作成するというアイデアがありましたが、このテーブルをロードして、この構造で期待される結果を得る方法がわかりません。

どんな助けでも喜んでします!

4

1 に答える 1

5

興味深い質問@Argnist!

したがって、私の例に共通の言語を作成するには、

  • DimPerson (PK=kcPerson、一意の Persons=kPerson のサゴレート キー、タイプ 2 ディム)
  • DimDocument (PK=kcDocument、一意のドキュメントのサゴレート キー=kDocument、タイプ 2 ディム)
  • DimAddress (PK=kcAddress、一意のアドレスのサゴレート キー=kAddress、タイプ 2 ディム)

同僚が 2 つの代理キーの使用法に関する短いブログを書いて、上記のディメンションについて説明しています。

私は常に、yyyymmdd の形式で PK を含む DimDate を追加の属性列を持つデータ ウェアハウスに追加します。

次に、ファクトテーブルを次のようにします

  • FactHistory (FKs=kcPerson、kPerson、kcDocument、kDocument、kcPerson、kPerson、kDate) と追加のメジャー。

次に、「kc」に参加すると、現在の人/文書/住所のディメンション情報を表示できます。"k" で結合した場合は、過去の個人/ドキュメント/住所のディメンション情報を表示できます。

これの欠点は、このファクト テーブルでは、人物/ドキュメント/住所/日付の組み合わせごとに 1 つの行が必要になることです。しかし、テーブルにはいくつかの外部キーしかないため、実際には非常に狭いテーブルです。

これの利点は、求めていた種類の質問を非常に簡単に照会できることです。

または、ファクトテーブルを次のようにすることもできます

  • FactHistory (FKs=kcPerson、kPerson、kcDocument、kDocument、kcPerson、kPerson、kDateFrom、kDateTo) に加えて、追加のメジャー。

これは明らかにはるかにコンパクトですが、クエリはより複雑になります。クエリを簡単にするために、Fact テーブルにビューを配置することもできます。

ソリューションの選択は、データの変更頻度によって異なります。すぐに変更されることはないと思われるので、ファクト テーブルの別の設計の方が優れている可能性があります。

それが役立つことを願っています。

于 2011-05-27T15:23:17.357 に答える