DB Stories

DBに関する過去、現在、未来の話題をプロフェッショナルの視点で紹介

ファクトテーブル(7)

「スタースキーマの横断検索」

二つのプロセスを比較する分析を「横断検索(drilling across)」と呼びます。この用語自体が混乱を呼ぶこともあります。「ドリル」という用語が使われてはいるのですが、分析ツールなどで利用される「ドリルアップ(drill-down)」「ドリルダウン(drill-down)」「ドリルスルー(drill-through)」といったものとは関連なく、複数のプロセスを横断して検索するということを意味します。横断検索と表現していますが、クエリの発行は1回ではなく複数回実行されるのが普通です。

横断検索はそれぞれの要素を個別に検索することで実施されます。1段階目でそれぞれのスターに対する共通の分析項目についての問い合わせを実施します。2段階目でそれらを一つの結果にマージさせます。このテクニックは異なるRDBMSに存在する複数のスタースキーマについても適用されます。またこのテクニック自体は1つのスタースキーマにおける分析結果の比較を行う場合にも有効です。

スタースキーマ横断検索の具体例

ある商品の2008年における受注(order)と出荷(shipment)の比較を実行するという場合、まず受注と出荷それぞれを別々に集計を行います。以下の図においてそれぞれのファクトテーブルは別々に分析が実施されます。受注検索においては商品ごとの受注量を、出荷検索において商品ごとの出荷量を示します。それぞれの検索結果は2008年1月という同じ条件で実施されています。

f:id:good-value:20171109204842j:plain

二つの検索結果は同じ粒度のディメンションによってマージされます。つまり2つの検索結果においてそれぞれの商品ごとに一行結果が存在して、検索結果にマージされることを意味します。2つの検索結果が同じ粒度で集計されているからです。

2つの検索結果が同じ粒度で実行された後にこの中間結果は一つにマージされます。SQLとしては完全外部結合(full outer join)となります。それぞれの検索結果を合わせた中にすべての商品データの結果が含まれていることが必要となります。(片方の検索結果に該当データが含まれないことも当然ありえます)このマージした結果が図の下段に示されています。このマージ操作において比較を別の視点で実施することも可能です。図においては受注に対する出荷の割合について追加で表示しています。

二つの検索に分離することで、横断検索は受注における商品222の2重計上や商品333のデータロストを避けることができます。

スタースキーマ横断検索実施の流れ

すべの横断検索は2つのフェーズで実行されます。

  • Phase 1 ディメンションの任意の粒度について適切な検索条件を利用してそれぞれのファクトテーブルからデータの取得を実施する。
  • Phase 2 二つの結果をマージする。このマージ処理において2つの結果を比較する項目の追加が可能。

この流れはファクトテーブルが2つという制約があるわけではありません。3つ、4つ…、など処理がいくつであっても同じ考えとなります。 次の図は4つのファクトテーブルにおける横断検索の例を示します。

f:id:good-value:20171109204907j:plain

一つ目が営業活動、2つ目は営業提案、3つ目が受注、4つ目が出荷における利益(販売利益)を求めています。下のレポートはある時期と販売地域における示し、営業活動と受注についての率(成約率)を追加しています。

[TIP] 異なるプロセスを比較計算するのは非常に有用ではあるのですが注意があります。この計算部分について実際のテーブル上の定義があるわけではないので、この計算定義が不明になる可能性があります。この計算方法は設計段階で明確に定義しておく必要があります。

この横断検索においてスタースキーマが同一のデータベースに存在する必要はありません。Phase1検索において異なるDB(ことなるベンダー製品でもよい)で実施することも可能です。

個々の方法において、すべてのDBにおいてディメンションが同一の構成で同一のデータで存在することが必要となります。同一の構成のディメンションが存在することにより同じ内容のデータを取得することが可能になり、同一データを持つことによりPh2においてデータをマージすることが可能になります。

図においては、四半期(period)と地域(region)がすべてのスタースキーマに存在しています。これによりPhase1検索にいて四半期と地域での集計を可能にしています。またデータについても同様です。すべてのデータべスにおいて四半期は「Q1, Q2, Q3, Q4」で表され、地域は「North, South, East, West」という値を持っています。これによりPh2においてデータをマージすることが可能となります。もし一部のDBにおいて「First Quarter」「Fourth Quarter」というデータとなっていた場合マージすることができなくなります。

このディメンションテーブルのデータの同一性というのが非常に重要になります。このことについては後程ディメンションテーブルの整合性(comformed dimensions)で説明します。

横断検索は一つのスタースキーマにおいてもデータを比較するテクニックとしても利用できます。例えば、「前期と今期の比較」においては前期のデータと今期のデータを取得して、マージを行うタイミングで前期と今期の比較(%)を表示することになります。

(続く)次回はこのスタースキーマ横断検索の実装についてです。