プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Business Intelligence Enterprise Editionメタデータ・リポジトリ作成者ガイド
12c (12.2.1.2.0)
E82973-02
目次へ移動
目次

前
前へ
次
次へ

時系列データのモデル化

時系列関数によって期間ごとのビジネス・パフォーマンスを比較することができ、複数の期間にまたがるデータを分析することが可能になります。

たとえば、時系列関数を使用して、現在の売上を1年前や1か月前などの売上と比較することができます。

SQLには時間による比較を直接行うための方法がないため、Oracle BIリポジトリ内で時系列データをモデル化する必要があります。最初に、データ・ウェアハウス内の期間表に基づいて時間ディメンションを設定します。次に、この時間ディメンションを活用するメジャーを定義することによって、AGOTODATEPERIODROLLINGの関数が使用できるようになります。問合せ時には、時間オフセットの処理を可能なかぎりデータベースにまかせる、高度に最適化されたSQLがOracle BIサーバーによって生成され、最良のパフォーマンスと機能が実現されます。

この項では、次の項目について説明します。

時系列関数について

時系列関数は、時系列的なディメンションを操作します。

特定のディメンションでこれらの関数を使用するには、そのディメンションを時間ディメンションとして指定し、1つ以上のキーを1つ以上のレベルで時系列キーとして設定する必要があります。これらのキーは、ディメンション・レベル内のメンバーの時系列の順序を特定します。

時系列関数には、TODATEおよびPERIODROLLINGがあります。これらの関数を使用することによって、物理表に別名を付けて論理的にモデル化することなく、時系列計算を行う論理関数を式ビルダーを使用して呼び出すことができます。時系列関数では、SQLの標準の日付操作関数ではなく、データ・ウェアハウス内のカレンダ表に基づいて、AGO関数、TODATE関数およびPERIODROLLING関数を計算します。

この図は、時系列関数を使用して導出されたいくつかのメジャーを含むレポートを示しています。

時間問合せでは様々なグレインが使用できます。次に例を示します。

  • 問合せグレイン

    要求の中で最も小さな時間グレインです。

  • 時系列グレイン

    時系列グレインは、AGO関数およびTODATE関数で集計またはオフセットを要求するグレインです。図のレポートの例では、時系列グレインは四半期です。時系列問合せは、時系列グレインが問合せグレインと同じか、またはそれより大きい場合にのみ有効です。PERIODROLLING関数は時系列グレインを持たず、関数の開始期間と終了期間はユーザーが指定します。
  • 記憶域グレイン

    例に表示されているように、毎日または毎月の売上からレポートを生成できます。ソースのグレインは記憶域グレインと呼ばれます。問合せが動作するためには、このレベルに時系列キーを定義する必要があります。ただし、問合せグレインにも時系列キーを定義することによって、一般的に大きなパフォーマンスの向上が得られます。

時系列データに対する問合せが、問合せキャッシュにアクセスするには、完全一致する必要があります。

次の項では、時系列変換の関数を説明しています。

AGO関数について

AGO関数は、過去のデータを表示するために時間ディメンションをオフセットさせます。

この関数は比較を行う際に便利です(「ドル」と「1四半期前のドル」の比較など)。

注意:

2008/08の月におけるDollars Qagoは、2008/05の月におけるDollarsと同じです。

この図は、DollarsおよびDollars Qagoのメジャーの値の例を示しています。

前述の図の例では、Dollars QagoのメジャーはDollarsのメジャーから導出されています。

式ビルダーでは、AGO関数には次のテンプレートがあります。

Ago(<<Measure>>, <<Level>>, <<Number of Periods>>)

<<Measure>>は、導出元となる論理メジャーの列を表します。この例では、既存の論理ファクト表からメジャー"Dollars"を選択します。

<<Level>>は、オプションで使用する時系列グレインです。この例では、時間ディメンションから"Quarter"を選択します。

<<Number of Periods>>はオフセットのサイズ(<<Level>>引数で指定されるグレインが単位)です。たとえば、<<Level>>がQuarterで、<<Number of Periods>>が2の場合、この関数は2四半期前のドルを表示します。

この関数テンプレートを使用することによって、次のような1四半期前のメジャーの式を作成することができます。

Ago("Sales"."Base Measures"."Dollars" , "Sales"."Time MonthDim"."Quarter" , 1)

<<Level>>パラメータはオプションです。AGO関数で時系列グレインを指定しない場合、問合せグレインが時系列グレインとして使用されます。

たとえば、Dollars_AgoをAgo(Dollars, 1)として定義したとします。この場合、次の論理問合せを実行できます。

SELECT Month, Dollars, Dollars_Ago

この結果は、Dollars_AgoをAgo(Dollars, Month, 1)として定義した場合と同じです。または、次の論理問合せを実行できます。

SELECT Quarter, Dollars, Dollars_Ago

この結果は、Dollars_AgoをAgo(Dollars, Quarter, 1)として定義した場合と同じです。

『Oracle Business Intelligence Enterprise Edition論理SQLリファレンス・ガイド』のAGOに関する項を参照してください。

TODATE関数について

TODATE関数は、時系列グレインの開始期間から現在表示されている問合せグレインの期間までのメジャーを合計します。

たとえば、次の図はDollars QTDメジャーを使用したレポートを示しています。このメジャーは、Dollarsメジャーの「現時点までの四半期」バージョンです。

図の例では、2008/05の月のDollars QTDは、2008/04と2008/05のドル建ての合計金額です。つまり、Dollars QTDは、現在の時系列グレインの期間(四半期)の、すべての問合せグレイン期間(月)の値の合計です。次の四半期には別の加算が始まります。

図の例では、Dollars QTDのメジャーはDollarsのメジャーから導出されています。

式ビルダーでは、TODATE関数には次のテンプレートがあります。

ToDate(<<Measure>>, <<Level>>)

<<Measure>>は、導出元となる論理メジャーの列を表します。この例では、既存の論理ファクト表からメジャー"Dollars"を選択します。

<<Level>>は、使用する時系列グレインです。この例では、時間ディメンションから"Quarter"を選択します。

この関数テンプレートを使用することによって、次のようなメジャーの式を作成することができます。

ToDate("Sales"."Base Measures"."Dollars" , "Sales"."Time MonthDim"."Quarter" )

問合せグレインは実行時に問合せ自体に指定されることに注意してください。たとえば、このメジャーは日付グレインにおけるその時点までの四半期を表示しますが、加算は四半期の最後まで続きます。

『Oracle Business Intelligence Enterprise Edition論理SQLリファレンス・ガイド』のTODATEに関する項を参照してください。

PERIODROLLING関数について

PERIODROLLING関数では、固定の時系列グレインの中で集計を実行するのではなく、一連の問合せグレインの期間を指定することによって集計を実行します。

最も一般的な使用方法は、移動平均の作成です(13週間の移動平均など)。

PERIODROLLING関数には時系列グレインがないため、移動シーケンスの長さは問合せグレインによって決定されます。たとえば、ドルの3期間の移動平均は、問合せグレインが月である場合は過去3か月の値の平均が計算され、問合せグレインが年である場合は過去3年の値の平均が計算されます。

この図は、これら2つのメジャーを使用したレポートを示しています。

前述の例では、ドルの3期間の移動合計のメジャー、およびドルの3期間の移動平均のメジャーはドルのメジャーから導出されています。

式ビルダーでは、PERIODROLLING関数の書式は次のようになります。

PeriodRolling(<<Measure>>, <<Starting Period Offset>>, <<Ending Period Offset>>)

<<Measure>>は、導出元となる論理メジャーの列を表します。ドルの3期間の移動合計のメジャーを作成するには、既存の論理ファクト表からメジャーDollarsを選択します。

<<Starting Period Offset>>および<<Ending Period Offset>>では、移動集計の最初の期間と最後の期間を指定します。この整数は、表示されている期間からの相対的な期間の数です。この例では、問合せグレインは月であり、3か月の移動合計は2期間前から始まり、現在の期間も含まれます。つまり、月が2008/07の場合は、2008/05、2008/06および2008/07を含めた移動合計になります。ドルの3期間の移動合計のメジャーを作成するには、これらのオフセットを示す整数を-2と0にします。

この関数の書式を使用すると、次のようなメジャーの式を作成できます。

PeriodRolling("Sales"."Base Measures"."Dollars" , -2, 0)

この例では、3か月の移動平均も示されます。このメジャーを計算するには、前に作成した移動合計を3で割って、3期間の移動平均を算出します。3で割るという前提は、移動合計の<<Starting Period Offset>><<Ending Period Offset>>のフィールドの-2と0が根拠になります。

3か月の移動平均の式は次のとおりです。

PeriodRolling("Sales"."Base Measures"."Dollars" , -2, 0) /3

移動平均の作成には、AVG関数を使用しません。AVG関数では、記憶域グレインでアクセスされるデータベース行の平均を計算します。移動平均を実行する場合は、分母が問合せグレインでの移動期間の数になる平均が必要になります。

PERIODROLLING関数には、オプションの4番目の階層引数があります。この引数では、yr、mon、dayなど、時間ウィンドウの計算に使用する時間ディメンション内の階層の名前を指定します。このオプションは、時間ディメンション内に複数の階層がある場合、または複数の時間ディメンションを区別する場合に便利です。『Oracle Business Intelligence Enterprise Edition論理SQLリファレンス・ガイド』のPERIODROLLINGに関する項を参照してください。

論理時間ディメンションの作成

時間ディメンションを作成するには、時間オプションを選択し、すべてのディメンション階層のすべてのレベルに時系列キーを割り当てる必要があります。

時系列データをモデル化する際には、次のガイドラインに従います。

  • 時系列関数の使用が意味を持つのは、データ・ソースに履歴が含まれている場合のみです。通常、履歴が含まれるリレーショナル・データベースでは、明示的な時間ディメンション表を持つスター・スキーマまたはスノーフレーク・スキーマを使用します。正規化された履歴データベースは非常にまれですが、それでもスノーフレークに似たスキーマ状のレベルを持つ時間階層が含まれることになります。単純な日付フィールドは適切ではありません。

  • Oracle Business Intelligenceでは、時間ディメンションの物理表(または正規化された表のセット)は、関連する物理ファクト表から分離している必要があります。

    ただし、どちらかと言えば一般的なソース・スキーマ・パターンは、時間ディメンション列がファクトおよび他のディメンションと同じ表にある完全非正規化関係表またはフラット・ファイルです。これは、時間ディメンションと見なすことはできません。それは、時間ディメンション表はファクト表と結合されているためです。この場合、ソースのモデルを変更できないときは、個別物理時間ディメンション表として機能する時間列を含む物理表の不透明なビューを作成することをお薦めします。この不透明なビューの時間ディメンションは、その後、ファクトを含む物理表に結合する必要があります。

  • 物理レイヤーでは、時間ディメンション表または正規化/スノーフレークの場合は最下位の表は、介在する表を使用せずに直接ファクト表と結合する必要があります。この結合は外部キー結合である必要があります。

  • 時間ディメンションを含む物理モデル内の表は、最も詳細なレベルを除き、他のデータ・ソースと結合させることはできません。

  • メンバーの値(たとえばリレーショナル・ソース内の行)は、すべての期間、すべての階層レベルにおいて物理的に存在する必要があります。シーケンス内にスキップがあってはいけません。これは、すべての期間においてファクト・データが存在するかどうかとは関係ないことに注意してください。完全である必要があるのは、ディメンション・データのみです。

  • "month"、"half"、"year"など、メンバー間の距離のそれぞれの単位は、個別の階層レベルでモデル化する必要があります。

「論理ディメンション」ダイアログでの「時間」オプションの選択

「論理ディメンション」ダイアログの「一般」タブで「時間」オプションを選択すると、このディメンションで時系列関数が有効になります。

時系列関数のAGOTODATEおよびPERIODROLLINGで時間ディメンションとして使用できるのは、Timeオプションが選択された論理ディメンションのみです。

この図は、「論理ディメンション」ダイアログの「時間」オプションを示しています。

各レベルに対する時系列キーの設定

各ディメンション階層のすべてのレベルに時系列キーを割り当てます。

時系列キーは、標準のSQL ORDER BY句と同等である必要があります。時系列キーのORDER BY句は、そのキーによって表される時間ディメンション・メンバーの現実的な時系列順序を反映している必要があります。たとえば、時間ディメンション・メンバーがJan-3-2013、Jan-4-2013、Jan-5-2013である場合、同じ順序で次の時系列キー、1、5、9をこれらのメンバーに割り当てることができます。ただし、2、1、3などの時系列キーを割り当てると、その結果はJan-4-2013、Jan-3-2013、Jan-5-2013となって、時系列順序として正しくありません。

Oracle BIサーバーは、時系列キーを使用して、「1月+ 2か月= 3月」など数学的に正しい時系列予測を作成します。すべてのレベル(「総計」レベルを除く)に対して時系列キーを設定し、十分なパフォーマンスを保ってすべてのレベルに対して時系列操作を実行できるようにする必要があります。これにより、何会計月前、何カレンダ年前、何日前など、すべての時間ディメンション階層のすべてのレベルに対してAGOTODATEまたはPERIODROLLING関数を使用できます。

理論上は、「論理ディメンション」の最下位レベル・キーのみが時系列であれば、時系列関数は正しく処理を実行します。ただし、実際には、これはパフォーマンスの問題を起こします。それは、物理問合せで最も小さいグレインの使用を強制するので、桁違いに多数の行の結合が実行されるためです(たとえば、「年前」に対して「日」のグレインで365回行を結合する)。

あらゆるレベル・キーと同様に、キーはそのレベルにおいて一意であるようにしてください。たとえば、"1月"などのシンプルな月名が含まれている列は、年の名前が含まれている列と連結しないかぎり、一意にはなりません。

この図は、「論理レベル」ダイアログで時系列キーを指定する方法を示しています。

AGO、TODATEおよびPERIODROLLINGのメジャーの作成

ベース・メジャーから派生した式を作成することによって、時系列メジャーを構築することができます。

派生式を作成するには、新しい論理列を作成して「式を使用して既存の列から派生」を選択し、式ビルダーを開いて適切な時系列関数を構築する必要があります。

時系列関数をモデル化する際には、次のガイドラインに従います。

  • 時系列関数は、断片化形式のフェデレーションを使用するメジャーから派生できません。このルールによって、1つのソースのいくつかの時間ディメンション行を別のソースのファクト行のいくつかに結合する必要性など、問合せ生成および結果マージにおける複雑な境界条件およびソース間の想定を防ぎます。メンテナンスを軽減し、正確性を高めるために、1つの基準となるメジャーを作成し、それから時系列メジャーのファミリを派生させることをお薦めします。たとえば、基準となるメジャーから始めて、月前、年前、過去1か月間などのバリエーションを定義します。これを行うには、「式を使用して既存の列から派生」を選択し、式で基準となるメジャーを参照します。

次の例は、AGOメジャーを構築する方法を示しています。その他の時系列関数(TODATEおよびPERIODROLLING)の詳細な構文は、Oracle Business Intelligence Enterprise Edition論理SQLリファレンス・ガイドを参照してください。

AGOメジャーの作成

この例は、Sampleappデモンストレーション・リポジトリにAGOメジャーの派生を作成する方法を示しています。

  1. ビジネス・モデルとマッピング・レイヤーで、新しい論理列を作成します。列の名前は2-04 Billed Qty (Mago)とします。
  2. 「列ソース」タブで「式を使用して既存の列から派生」を選択し、「式ビルダー」をクリックします。
  3. 式ビルダーの「カテゴリ」で、「関数」を選択します。
  4. 「関数」から「時系列関数」を選択してから、「時系列関数」からAgoを選択します。
  5. 「メジャー」を選択し、選択ペインを使用して、この列の派生元となるベース・メジャーを選択します。

    この例では、“Sample Sales"."F0 Rev Base Measures"."2-01 Billed Qty (Sum All)”を選択します。

  6. 「レベル」を選択し、選択ペインを使用してagoのオフセットの単位を選択します。

    時間ディメンション内に構築された時系列キーを利用できるようにするため、この単位は時間ディメンションのレベルとして定義する必要があります。

    この例では、「カテゴリ」から「時間ディメンション」を選択し、「時間ディメンション」からHO Timeを選択し、HO TimeペインでHO Timeから「月」を選択します。

  7. 「期間数」を選択し、このメジャーのオフセットのサイズを入力します。この例では、1を入力します。
  8. 式ビルダーで、「OK」をクリックします。
  9. 「論理列」ダイアログで、「OK」をクリックします。