この記事について
- 以下の書籍の読書メモです
アジャイルデータモデリング-組織にデータ分析を広めるためのテーブル設計ガイド
ディメンション
ディメンションとは
- ビジネスイベントの主語、目的語、補足情報
- 7Wにおける「誰が、何を、いつ、どこで、なぜ、どのように」
- DWHのユーザーインターフェイスになる
デイメンションを発見する方法
- BEAM✲テーブルの「誰が、何を、いつ、どこで、なぜ、どのように」がディメンション候補になる
- つまり、イベントにおける数量や「どのように」以外がディメンション候補になる
ディメンションのモデリング手順
- BEAM✲テーブルの主語(誰が)について、重複を削除した具体例をディメンションテーブルに記入する
- 以下のショートコードを追加する
- MD(必須項目)
- 以下のショートコードを追加する
- 主語を一意に識別する識別子をディメンションテーブルに追加する
- 識別子には以下のショートコードを記載する
- BK(ビジネスキー)
- MD
- 識別子には以下のショートコードを記載する
- 主語以外のディメンションで、データのソート、グループ化、フィルタリングを可能にしたい属性をリストアップする
- リストアップした属性が、任意の一時点で値のパターンが1つしかないことを確認する
- 例えば、自宅住所と勤務先住所のように、「住所」が2つある場合
- プライマリー住所として1つだけの住所をディメンションとする
- 「配送」という別イベントで新しいディメンションとして住所を定義する
- 例えば、自宅住所と勤務先住所のように、「住所」が2つある場合
- 排他的な属性となるディメンションを探す
- 例えば、個人特有の属性と法人特有の属性は同一顧客に対して同時に成り立たない
- 互いに排他的な属性は以下のショートコードを記載する
- DCn
- 区分項目
- 排他的属性を決定する属性(個人or法人等)
- Xn(nはグループ番号)
- 排他的属性グループ番号
- X1は個人にしか成り立たない属性、X2は法人にしか成り立たない属性
- DCn
- ディメンションテーブルのイメージ
主語 | 主語の識別子 | 区分項目 | 排他的属性グループ1 属性1 |
排他的属性グループ1 属性2 |
排他的属性グループ2 属性1 |
排他的属性グループ2 属性2 |
---|---|---|---|---|---|---|
MD | BK,MD | MD,DC | X1 | X1,MD | X2,MD | X2 |
ディメンション階層
なぜ階層が必要か
- ユーザーがデータをどのように整理したいかという要望のヒアリングから、ディメンションのより良いモデリングにつながる
階層の種類
- バランス階層
- 深さの数が固定で、それぞれに固有にレベル名がある
- 例えばカレンダーデータ
- 日、月、四半期、年の4つのレベルがある
- 不規則階層
- 深さの最大数が既知で、各階層に一意な名前がある一方で、全てのレベルが全てのパスの上下に存在するわけではない
- 例えば商品カテゴリ
- コンピュータ「カテゴリ」には属するが、モバイル、デスクトップといった「サブカテゴリ」には存在しない商品がある
- 可変深度階層
- 名前がつけられていないレベルが存在し、その深さが可変
- 例えば人事情報
- スタッフとマネージャーの関係を記録する人事情報の階層では、全てのレベルが従業員
- 複数親階層
- それぞれの子レベルが複数の親にロールアップできる
- 例えば商品カテゴリ
- スマートフォンは電話カテゴリにも、メディアプレイヤーカテゴリにも属する
階層タイプのモデリング
- 階層図を作成し、属性の低〜高レベルを把握
- 低レベル属性から高レベル属性の順に、ディメンションテーブルに階層を配置
ディメンションの履歴
履歴に関するショートコード
- CV(現在値)
- 現在の値の記述のみを含むディメンショナル属性
- 上書きされると変更履歴が失われる
- FV(固定値)
- 誤った値の修正変更のみ可能で、原則変更してはならないディメンショナル属性
- 例:生年月日
- HV(履歴値)
- 履歴データを保持しているディメンショナル属性
- PV(前値)
- 最終変更の前の値のみを保持しているディメンショナル属性
履歴を保持したい場合
- 属性のラベルにHVか、HV/CV(両方のデータ保持)ショートコードを追加する
- データ変更後の例として行を追加する
- (理想的には)「更新理由」の列を追加する
- 「有効開始日」「有効終了日」「現在有効か」の列を追加する