セマンティック・モデルでの時系列データのモデリング
このトピックでは、セマンティック・モデルで時系列データをモデリングするための関数の理解および使用に役立つ情報を提供します。
セマンティック・モデルの時系列関数について
時系列関数は、セマンティック・モデルの時系列的なディメンションを操作します。これらを使用してビジネス・パフォーマンスを以前の期間と比較し、複数の期間にまたがるデータを分析できます。
たとえば、時系列関数を使用すると、現在の売上を1年前または1か月前の売上と比較できます。
SQLで時間による比較を直接行う方法はないため、セマンティック・モデルで時系列データをモデル化する必要があります。最初に、データ・ウェアハウス内の期間表に基づいて時間ディメンションを設定します。次に、この時間ディメンションを活用するメジャーを定義することによって、AGO
、TODATE
、PERIODROLLING
の関数が使用できるようになります。問合せ時には、時間オフセットの処理を可能なかぎりデータベースにプッシュする、高度に最適化されたSQLがOracle Analytics問合せエンジンによって生成され、最良のパフォーマンスと機能が実現されます。
特定のディメンションで時系列関数を使用するには、ディメンションを時間ディメンションとして指定し、1つ以上のレベルで1つ以上のキーを時系列キーとして設定する必要があります。これらのキーは、ディメンション・レベル内のメンバーの時系列の順序を特定します。
物理表に別名を付けて論理的にモデル化することなく、式エディタを使用して時系列計算を実行する論理関数を呼び出します。時系列関数では、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リファレンス・ガイド』を参照してください。
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リファレンス・ガイド』を参照してください。
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リファレンス・ガイド』を参照してください。
セマンティック・モデルでの論理時間ディメンションの作成について
時間ディメンションを作成するには、時間階層タイプを選択し、すべてのディメンション階層のすべてのレベルに時系列キーを割り当てる必要があります。
時系列データをモデル化する際には、次のガイドラインを使用します。
-
データ・ソースに履歴が含まれている場合、時系列関数を使用します。履歴が含まれるデータ・ソースでは、明示的な時間ディメンション表を持つスター・スキーマまたはスノーフレーク・スキーマを使用することがあります。正規化された履歴データベースには、スノーフレークに似たスキーマ状のレベルを持つ時間階層が含まれることがあります。単純な日付フィールドは、時系列関数とともに使用するには適切ではありません。
-
Oracle Analytics Serverでは、時間ディメンションの物理表、または正規化された表のセットは、関連する物理ファクト表から分離している必要があります。
一般的なソース・スキーマ・パターンは、時間ディメンション列がファクトおよび他のディメンションと同じ表にある完全非正規化表です。この一般的なソース・スキーマ・パターンを時間ディメンションと見なすことはできません。それは、時間ディメンション表はファクト表と結合されているためです。ソース・モデルを変更できないため、個別物理時間ディメンション表として機能する時間列を含む物理表のSELECT文を作成できます。SELECT文の時間ディメンションは、ファクトを含む物理表に結合する必要があります。
-
物理レイヤーでは、時間ディメンション表または正規化/スノーフレークの場合は最下位の表は、介在する表を使用せずに直接ファクト表と結合する必要があります。
-
時間ディメンションを含む物理モデル内の表は、最も詳細なレベルを除き、他のデータ・ソースと結合させることはできません。
-
メンバーの値は、すべての階層レベルにおいてすべての期間、物理的に存在する必要があります。順序でスキップされる行が含まれないようにします。ファクト・データがない期間はあってもかまいません。完全であることが必要なのはディメンション・データのみです。
-
month、half、yearなど、メンバー間の距離のそれぞれの単位は、個別の階層レベルでモデル化する必要があります。
セマンティック・モデルでの論理時間ディメンションの作成を参照してください。
セマンティック・モデルでの時系列キーの設定について
設定した時系列キーによって、時間ディメンション・レベル内のメンバー順序が識別されます。
時系列キーは、標準のSQL ORDER BY
句と同等である必要があります。時系列キーのORDER BY
句は、そのキーによって表される時間ディメンション・メンバーの現実的な時系列順序を反映している必要があります。たとえば、時間ディメンション・メンバーがJan-3-2022、Jan-4-2022、Jan-5-2022である場合、同じ順序で時系列キー1、5、9をこれらのメンバーに割り当てることができます。ただし、2、1、3などの時系列キーを割り当てると、その結果はJan-4-2022、Jan-3-2022、Jan-5-2022となって、時系列順序として正しくありません。
Oracle Analytics問合せエンジンは、時系列キーを使用して、「1月+ 2か月= 3月」など数学的に正しい時系列予測を作成します。すべてのレベル(「総計」レベルを除く)に対して時系列キーを設定し、十分なパフォーマンスを保ってすべてのレベルに対して時系列操作を実行できるようにする必要があります。これにより、何会計月前、何カレンダ年前、何日前など、すべての時間ディメンション階層のすべてのレベルに対してAGO
、TODATE
またはPERIODROLLING
関数を使用できます。
理論上は、論理階層の最下位レベル・キーのみが時系列であれば、時系列関数は正しく処理を実行します。ただし、実際には、これはパフォーマンスの問題を起こします。それは、物理問合せで最も小さいグレインの使用を強制するので、桁違いに多数の行の結合が実行されるためです(たとえば、「年前」に対して「日」のグレインで365回行を結合する)。
あらゆるレベル・キーと同様に、キーはそのレベルにおいて一意であるようにしてください。たとえば、1月などのシンプルな月名が含まれている列は、年の名前が含まれている列と連結しないかぎり、一意にはなりません。
時間ディメンションでの時系列キーの選択とソート
時間ディメンションでは、少なくとも1つのレベルに時系列キーが存在する必要があります。任意のレベルで1つ以上の時系列キーを選択し、レベル内でキーをソートできますが、Oracle Analyticsでは最初の時系列キーのみが使用されます。
多数の列がある時系列キーの列の順序に注意してください。SQLのORDER BY
句を列に使用して列の順序を設定し、「時系列キー」フィールドに実際の時系列順を反映させます。1年に四半期の範囲は1から4までであるため、年の前に四半期を使用してORDER BY
句を使用する(Quarter, Year)ことは、正しい使用方法ではありません。正しくない順序だと、すべての第1四半期がすべての年にわたって表示され、その次に第2四半期があれば表示されるというように続きます。結果を修正するには、ORDER BY
句で(Year, Quarter)を使用します。
時間ディメンションの作成の詳細は、「レベルベース階層でのディメンションの手動作成」を参照してください。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 論理レイヤーで論理表をダブルクリックし、論理表のタブで「階層」をクリックします。
- 総計レベルの下の論理レベルをクリックします。
- 「時系列キー」フィールドをクリックし、時系列キーを選択します。
- 「保存」をクリックします。
セマンティック・モデルでの論理時間ディメンションの作成
ディメンションで時系列関数を有効にするには、論理ディメンション表で「時間」階層タイプを選択し、各ディメンション階層のすべてのレベルに時系列キーを割り当てます。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 論理レイヤーで、時系列関数を有効にする論理表をダブルクリックし、論理表のタブで「階層」をクリックします。
- 「階層タイプ」フィールドをクリックし、「時間」を選択します。
- 階層レベルをクリックし、その詳細で「時系列キー」をクリックしてキーを選択します。
- キーを設定する必要がある階層レベルごとに、レベルの詳細に移動し、「時系列キー」をクリックしてキーを選択します。
- 「保存」をクリックします。
セマンティック・モデルでのAGO、TODATEおよびPERIODROLLINGメジャーの作成
ベース・メジャーから派生した式を作成することによって、時系列メジャーを構築することができます。
時系列関数をモデル化する際には、次のガイドラインに従います。
-
時系列関数は、断片化形式のフェデレーションを使用するメジャーから派生できません。このルールによって、1つのソースのいくつかの時間ディメンション行を別のソースのファクト行のいくつかに結合する必要性など、問合せ生成および結果マージにおける複雑な境界条件およびソース間の想定を防ぎます。メンテナンスを軽減し、正確性を高めるために、1つの基準となるメジャーを作成し、それから時系列メジャーのファミリを派生させることをお薦めします。たとえば、基準となるメジャーから始めて、月前、年前および過去1か月間のバリエーションを定義します。
-
時間ディメンション内に構築された時系列キーを利用できるようにするため、この単位は時間ディメンションのレベルとして定義する必要があります。
式で時系列関数を使用する方法の詳細は、「AGO時系列関数について」、「TODATE時系列関数について」および「PERIODROLLING時系列関数について」を参照してください。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 論理レイヤーで、時系列関数を追加する論理列を含む論理表をダブルクリックします。「列」をクリックします。
- 列を見つけてクリックし、「詳細ビュー」をクリックします。「ソース」までスクロールし、「論理式」をクリックします。
- 「式エディタを開く」をクリックします。
- 「式ビルダー」で、「関数」パネルに移動し、「時系列計算」までスクロールして、これらの関数を使用して式を作成します。
- 「保存」をクリックします。