セマンティック・モデルでのレベルベース階層の作成および管理
このトピックでは、セマンティック・モデルでのレベルベース階層とそのディメンションの理解と作成に役立つ情報を提供します。
レベルベース階層について
各ビジネス・モデルは1つ以上のディメンションを持つことができ、各ディメンションは1つ以上の論理レベルを持つことができ、各論理レベルには1つ以上の属性(列)を関連付けることができます。
「ディメンション階層、レベル・キーおよびコンテンツ・レベル」も参照してください。
論理レベルを作成する場合は、最初に総計レベルを作成し、次に子レベルを作成して、一番下のレベルまでこれを繰り返します。
ディメンションの構成要素を次に示します。
総計レベル
総計レベルは、ディメンションのすべての合計の総計を表します。各ディメンションが持つことのできる総計レベルは1つのみです。総計レベルにはディメンションの属性は含まれず、レベル・キーはありません。総計レベルにはメジャーを関連付けることができます。それらのメジャーの集計レベルは、ディメンションの総計になります。総計レベルは列なしで存在できます。
レベル
レベルには1つ以上の列が存在している必要があります。表のすべての列を論理レベルに明示的に関連付ける必要はありません。論理レベルに関連付けられていない列は、ディメンション表に対応するディメンションの最下位レベルに自動的に関連付けられます。同じディメンション表内のすべての論理列は、同じディメンションに関連付ける必要があります。
ディメンションのレベルの数に制限はありません。
階層
各ディメンションには1つ以上の階層が含まれます。すべての階層に共通リーフ・レベルが必要です。たとえば、時間ディメンションには会計上の階層とカレンダ上の階層が含まれることがあり、それらは共有の日のレベルを持つことがあります。この例では、日には会計年度とカレンダ年の2つの親があり、それらはいずれも全ルート・レベルの子となります。
プレゼンテーション・レイヤーの階層とは異なり、論理レイヤーの論理階層は、独立したメタデータ・オブジェクトとして定義されません。論理階層はレベル間の関連を通じて暗黙に存在します。
1つのレベルで非常に多くのメンバーが指定されるのを避けるために、階層に中間レベルを定義できます。たとえば、500車種のモデルに関するデータを追跡する自動車会社に対してProductディメンションを作成する場合、グレインのより細かい階層レベル(SUV、サブコンパクト、中型セダンなど)を作成できます。問合せパフォーマンスが向上し、読取りとナビゲーションの容易なレポートやダイヤグラムを作成できます。「論理ディメンション表での論理レベルの作成」を参照してください。
レベル・キー
それぞれの論理レベル(総計レベルを除く)には、レベル・キーを構成する1つ以上の属性が存在する必要があります。レベル・キーは、各論理レベルの一意の要素を定義します。ディメンション表の論理キーをディメンションの一番下のレベルに関連付ける必要があります。
論理レベルは複数のレベル・キーを持つことができます。論理レベルに複数のレベル・キーがある場合、レベルの主キーとしてキーを指定します。特定のレベルに集計コンテンツを持つすべてのディメンション・ソースには、そのレベルの主キーとなる列が含まれている必要があります。それぞれの論理レベルは1つのレベル・キーを持つ必要があります。このレベル・キーは、ユーザーがオブジェクトを選択してドリルダウンするときに表示されます。レベルへのユーザー・アクセスを提供するために任意のレベル・キーを使用できます。
一意のレベル・キーを作成する必要があります。月を含む一意のレベル・キーを作成するには、年属性をキーの一部として含めます。
問合せで予期しない結果が返されないように、上位レベルの属性を含めることによって、レベル・キーを確実に一意のものにします。たとえば、Oracle Analytics問合せエンジンで、複数の物理問合せからの結果セットを結合する必要がある場合、レベル・キー定義に従って一意でない予測行が結果から除外される可能性があります。
time_key='1023793'などの生成された代理キーではなく、Month_name='2022 July'などの共通のビジネス・キーを使用して有効なレベル・キーを作成します。生成された代理キーは、ソース表の単一のインスタンスにのみ適用される物理アーティファクトです。ビジネス・キーはその論理列の物理インスタンスにマップできます。たとえば、month_nameは、詳細な表、集計スターからの集計表、またはフェデレーテッド・データ・ソースの列にマップできます。物理レイヤーは結合で代理キーを使用できますが、Oracleではビジネス・キーを使用することをお薦めします。
時間ディメンションおよび時系列キー
ディメンションを時間ディメンションとして指定することができます。時間ディメンションを設定および使用する場合は、この項のガイドラインを使用します。「時間ディメンションの設計」も参照してください。
-
時間ディメンションでは、少なくとも1つのレベルに時系列キーが存在する必要があります。「時間ディメンションでの時系列キーの選択とソート」を参照してください。
-
AGO
関数、TODATE
関数およびPERIODROLLING
関数を使用するすべての時系列メジャーは、時間レベルにあります。派生論理列として、AGO
、TODATE
およびPERIODROLLING
の集計が作成されます。 -
AGO
、TODATE
およびPERIODROLLING
機能は、断片化されたディメンション論理表ソース、または同じ時間ディメンションでフラグメント化されたファクト・ソースのいずれに対してもサポートされていません。ファクト・ソースは他のディメンションでフラグメント化される場合があります。「論理表ソースのデータ断片化の操作」を参照してください。「セマンティック・モデルの時系列関数について」を参照してください。
階層構造について
論理階層は、バランス型、不規則またはスキップレベルの構造を持つことができます。
バランス型階層
バランス型階層の構造には、同じレベルの子孫であり、各メンバーの親がそのすぐ上にあるメンバーが含まれます。
不均衡または不規則な階層
不均衡または不規則な階層とは、リーフ(子を持たないメンバー)の深さが必ずしも一定ではない階層を指します。たとえば、現在の月は日レベルでデータを持ち、前月は月レベルでデータを持ち、過去5年間は四半期レベルでデータを持つよう選択できます。
ユーザー・アプリケーションは、IS_LEAF
関数を使用することによって、特定のメンバーから下に移動できるかどうかを判断できます。
データ・ソース内の存在しないメンバーについては、そのメンバーの値としてnull値が実装されます。すべての計算では、null値はその親の中の個別の子として扱われます。レベルベースのメジャーおよび集計計算では、存在しないすべてのノードがグループ化されます。
不均衡階層は、必ずしも親子階層と同じではありません。親子階層は生来不均衡です。不均衡なレベルベースの階層が可能です。
スキップレベル階層
スキップレベル階層とは、特定の祖先レベルに値を持たないメンバーが存在する階層を指します。たとえば、Country-State-City-Districtの階層において、Washington D.C.というCityはStateには属しません。この場合、Countryレベル(USA)からCityレベル(Washington D.C.)以降にドリルダウンします。
問合せでは、スキップしたレベルは表示されず、計算には影響しません。階層順にソートすると、メンバーは最も近い祖先の下に表示されます。
データ・ソース内の特定のレベルにおいて存在しないメンバーについては、そのメンバーの値としてnull値が実装されます。すべての計算では、null値はその親の中の個別の子として扱われます。レベルベースのメジャーおよび集計計算では、スキップされたすべてのノードがグループ化されます。
不規則レベルとスキップレベルを含む階層の例
この図は、不規則レベルとスキップレベルの両方の特徴を持つ階層を示しています。たとえば、A-Brand 4、B-LOB 3およびType 5は不均衡なブランチであり、A-Brand 2とType 3の間やB-LOB 2とProduct 6などの間には、スキップが存在します。
レベルベース階層におけるディメンション階層レベルの使用について
ディメンション階層レベルの使用方法を学習します。
ディメンション階層レベルを使用して、次の操作を実行できます。
-
集計ナビゲーションを設定する
-
レベルベース・メジャー計算を構成します。「レベルベース・メジャーの計算」を参照してください。
-
ユーザーがデータ要求をドリルダウンするときに表示される属性を決定します。
レベルベース階層のディメンションの自動作成
論理ディメンション表にディメンションが存在しない場合、その表から論理ディメンションを自動的に設定できます。
レベルベース階層を持つディメンションを自動的に作成する際には、セマンティック・モデルは論理表ソースとそれらのソース内の列マッピングを調べ、論理表ソース内の物理表の間の結合を使用して、論理レベルおよびレベル・キーを決定します。ベスト・プラクティスとして、ディメンション表にすべての論理表ソースを定義した後に、レベルベース階層を持つディメンション表を作成します。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 「論理レイヤー」
をクリックし、どのディメンションにも関連付けられていない論理ディメンション表を見つけてダブルクリックします。
- 論理表で、「階層」タブをクリックします。
- 「階層タイプ」フィールドで、「レベル・ベース」または「親子」を選択します。
- 「保存」をクリックします。
レベルベース階層でのディメンションの手動作成
各ディメンションを、1つ以上の論理ディメンション表内の属性(列)、および論理ファクト表内のレベルベース・メジャーに関連付けることができます。
物理レイヤーに設定されている物理階層タイプと、論理レイヤーで選択するディメンション・プロパティを一致させることが、ベスト・プラクティスとなります。また、問合せが正しく機能するように、不規則およびスキップされたレベルのディメンションのプロパティを正しく設定してください。
論理ディメンション表での論理レベルの作成
論理ディメンション表内に論理レベルを作成するときには、レベルのタイプを特定し子レベルを定義することによって階層も作成します。
レベルをGrand Total level
として定義する場合、デフォルト値は1です。
この数は正確である必要はありませんが、論理レベル間の数の比率は正確である必要があります。レベル・キーの行数を取得し、その数を要素数として使用できます。多次元ソースの場合、そのレベルのメンバー数を使用することができます。
Oracle Analytics問合せエンジンは、使用する集計ソースを選択するときにこの数を使用します。たとえば、集計ナビゲーションが使用される場合、異なるグレインに複数のファクト・ソースが存在します。Oracle Analytics問合せエンジンは、それぞれの修飾ソースの合計行数を推測する方法として、その修飾ソースの各レベルの要素数を乗算します。次に、Oracle Analytics問合せエンジンは、各ソースの結果を比較し、要素数の合計が最も少ないソースを選択して、問合せに回答します。要素数の合計が最も少ないソースが最も高速であると想定されます。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 論理レイヤーで論理表をダブルクリックし、論理表のタブで「階層」をクリックします。
- 「階層タイプ」フィールドをクリックし、「レベル・ベース」を選択するか、ディメンションが時間ディメンションの場合は「時間」を選択します。
- 「新規レベル」をクリックします。
- 総計レベルおよび詳細レベルを追加して構成します。
- オプション: 総計レベルおよび詳細レベルの名前を変更します。たとえば、Products TotalやProducts Detailなどです。
- 子の論理レベルを追加および定義するには、階層を選択して「新規レベル」をクリックします。
- 「このレベルの要素」フィールドで、この論理レベルに存在する要素数を指定します。
- 特定のレベルのメジャー値がその親レベルの完全な集計メジャーを構成する場合は、「上位レベルへのロールアップをサポート」を選択します。
- 「合計」以外のすべてのレベルで、「主キー」を選択します。
- 「合計」以外のすべてのレベルで、「表示キー」を選択します
- 「保存」をクリックします。
論理列およびその表のディメンション・レベルへの関連付け
ディメンション内にすべての論理レベルを作成した後、総計レベルを除く各論理レベルに、論理ディメンション表の1つ以上の列を関連付けます。
ディメンションに最初に列を追加するとき、その論理表をディメンションに関連付けます。ドラッグ・アンド・ドロップ操作によって、該当するディメンションのレベルに論理列を関連付けます。論理列に論理レベルを関連付けるには、ある論理レベルの列を別の論理レベルにドラッグします。
ディメンション表の論理キーを構成する論理列は、ディメンションの最下位レベルに関連付ける必要があります。
ディメンション・レベルに論理列を関連付けると、「ディメンション」ダイアログ・ボックスの「表」タブに、それらの列が存在する表が表示されます。
例については、「レベルベース・メジャーの計算について」および「総計ディメンション階層の例」を参照してください。
時間ディメンションの場合、ソース表内の時間に関連するすべての列を時間ディメンション内で定義するようにしてください。たとえば、時間に関連する論理表にMonth Name列およびMonth Code列が含まれている場合、ディメンション内の適切なレベルで両方の列が定義されていることを確認する必要があります。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 「論理レイヤー」
をクリックし、ディメンション・レベルに関連付ける論理表を見つけてダブルクリックします。
- 「列」タブをクリックします。
- 論理列をクリックして選択し、「詳細ビュー」をクリックします。
- 「レベル」フィールドをクリックし、論理レベルを選択して、「総計レベル」を選択しないようにします。
- 「保存」をクリックします。
レベルベース・メジャーの計算について
レベルベース・メジャーとは、集計の特定のレベルにおいて値が常に計算される列です。
その場合、CountryRevenue、RegionRevenueおよびCityRevenueを測定する列を設定することができます。たとえば、ある企業が国、地域および都市に基づいて収益を測定するとします。
プレゼンテーション階層を含む問合せにレベル・ベースのメジャーの列が含まれており、問合せグレインがその列固有の集計レベルよりも上位の場合、問合せの結果としてnullが返されます。リクエストに通常の列のみが含まれていて、階層列が含まれていない場合は、レベルベースのメジャーはnullに置換されません。
総計レベルでレベルベース・メジャーとしてAllProductRevenueメジャーを作成できます。レベルベース・メジャーでは、1回の問合せで複数の集計レベルのデータを返すことができます。レベルベースのメジャーはシェア・メジャーを作成する際にも便利です。シェア・メジャーは、なんらかのメジャーをレベルベース・メジャーで除算してパーセントを算出することにより計算します。たとえば、営業担当者の売上を地域の売上で除算することによって、その地域で各営業担当者が貢献した売上の比率を計算することができます。
たとえば、これらの計算を設定するには、総計、国、リージョンおよび市区町村レベルを含むセマンティック・モデルにディメンション階層を構築する必要があります。この階層には、CountryとRegionの間に1対多の関係を定義し、RegionとCityの間に1対多の関係を定義するメタデータが含まれます。各国には多くの地域がありますが、各地域は1つの国の中にあります。同様に、各地域には多くの都市がありますが、各都市は1つの地域の中にあります。
ディメンション階層を構築したら、CountryRevenue、RegionRevenue、およびCityRevenueのそれぞれに1つの論理列を作成する必要があります。これらの列は、ソースとしてRevenue論理列を使用します。Revenue列にはデフォルトの集計ルールSUM
があり、基礎となるデータベース内にソースがあります。
CountryRevenue列、RegionRevenue列およびCityRevenue列を、国レベル、リージョン・レベルおよび市区町村レベルにそれぞれ割り当てます。これらの列のいずれかを要求する問合せでは、そのレベルで集計された売上が返されます。
総計ディメンション階層の例
この例を使用して、売上に総計ディメンション階層を使用する方法を学習します。
製品ディメンション階層にTotalProducts (総計レベル)、BrandsおよびProductsレベルと、合計のデフォルト集計ルールで定義されたRevenue列が含まれている場合、AllProductRevenue論理列を作成できます。AllProductRevenue列は、ソースとしてRevenueを使用します。AllProductRevenue列を総計レベルに関連付けます。AllProductRevenue列を含む問合せは、すべての製品の総売上を返します。BrandsまたはProductsのいかなる制約にも関係なく値が返されます。
他の表内の列に制約がある場合、総計は問合せのスコープに制限されます。たとえば、問合せのスコープが2000年および2021年のデータを要求する場合、製品売上の総計は、2000年および2021年のすべての製品のものになります。
A、B、Cの3つの製品があり、それぞれの売上の合計が100、200、300である場合、製品売上の総計は600です(各製品の売上の合計)。この例で説明しているセマンティック・モデルを設定している場合の問合せとその結果を示します:
SELECT product, productrevenue, allproductrevenue FROM sales_subject_area WHERE product IN ('A','B')
結果は次のとおりです。
PRODUCT;;PRODUCTREVENUE;;ALLPRODUCTREVENUE A;;;;;;;;100;;;;;;;;;;;;;600 B;;;;;;;;200;;;;;;;;;;;;;600
AllProductRevenue列は、問合せで制約が設定された製品に関係なく、常に600の値を返します。
ディメンション・レベルの主キーの特定
論理ディメンション表の「階層」タブと「主キー」フィールドを使用して、ディメンション・レベルの主キーとして使用する列を識別します。
LOOKUP
関数の結果である派生論理列は、1次論理レベル・キーの一部として使用できません。集計が行われた後にLOOKUP
操作が適用されるため、この制限が存在します。ただし、レベル・キー列によって集計の計算粒度が定義されるため、レベル・キー列は集計を行う前に使用可能にしておく必要があります。
LOOKUP
関数の結果である派生論理列は、2次論理レベル・キーとして使用できます。
時間ディメンション内のレベルである場合は、時系列キーを選択し、名前によってキーをソートすることができます。
主キーの管理に役立つように、論理表の「列」タブに移動し、主キーとして使用される列を見つけて、その「説明」フィールドに情報を追加できます。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 論理レイヤーで、論理ディメンション表を右クリックし、「編集」をクリックします。
- 「論理レイヤー」
をクリックし、主キーを追加するディメンション・レベルの論理表を見つけてダブルクリックします。
- 「階層」タブをクリックします。
- クリックして、総計レベルの下のレベルを選択します。
- 「主キー」フィールドをクリックし、リストからレベル・キーを選択して変更を保存します。1つのキーのみが存在する場合は、それがデフォルトで主キーとなります。
- 「保存」をクリックします。