Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

ファクト・テーブルおよびディメンジョン・テーブルの詳細

DeepSee の内部ではスター・スキーマが使用されます。これは、ファクト・テーブルと、ファクト・テーブルが参照するディメンジョン・テーブルで構成されます。ディメンジョン・テーブルはスター・テーブルとも呼ばれることに注意してください。これらのテーブルには、直接クエリを実行することができます。これらは、キューブを構築する際に DeepSee によって生成され、変更が発生すると DeepSee によって更新されます。この章は、以下のセクションで構成されます。

Important:

許可されたインタフェースを使用する場合を除き、これらのテーブルの再定義やこれらへのデータの書き込みはしないでください。"DeepSee 実装ガイド" の “キューブの最新状態の維持” の章を参照してください。

キューブ定義クラスをコンパイルすると、Listing という名前のテーブルもファクト・テーブルと同じパッケージ内に生成されます。この Listing テーブルは内部使用専用のため、使用しないでください。

ファクト・テーブル

キューブ定義クラスをコンパイルすると、DeepSee によって Package_CubeClass.Fact という名前の対応するファクト・テーブルが生成されます。Package_CubeClass は、パッケージとクラス名をテーブル名に変換する際の通常のルールに従い、キューブ定義のパッケージとクラスに対応します。

キューブを構築したり、インクリメンタルに更新すると、常にファクト・テーブルが更新されます。

このテーブルおよびそれを使用するクラス定義を調べると、役に立ちます。

このファクト・テーブルには以下のフィールドがあります。

  • ID — この行の ID。行の作成時に割り当てられます。

  • %dspartition — 将来使用予定。このフィールドは無視してください。

  • %sourceID — このレコードの基となるベース・クラスにおけるレコードの ID。このフィールドは、ソース・テーブルを参照するポインタです。

  • メジャーごとにフィールドが 1 つ存在し、このレコードに対するこのメジャーの値が格納されます (ただし、1 つ例外があります。この付録で後述の “ファクト・テーブルにおけるソース・プロパティの再使用” を参照してください)。

    このフィールドには、実際のメジャー値が格納されます。ファクト・テーブル・クラスは、これらの値にビットスライス・インデックスを定義します。以下はその例です。

    /// Index for measure M1.
    Index MxAge On MxAge [ Type = bitslice ];
    
    
    /// Measure: MxAge <br/>
    /// Source: Age
    Property MxAge As %Integer;
    
  • レベルごとにフィールドが 1 つ存在し、このレコードが属するレベル・メンバを示します (ただし、1 つ例外があります。この付録で後述の “ファクト・テーブルにおけるソース・プロパティの再使用” を参照してください)。

    • データ・ディメンジョン内のレベルの場合、ファクト・テーブルにはレベル・メンバの ID が格納されます。この ID は、メンバを定義するテーブルへのポインタです。

      ファクト・テーブル・クラスは、これらの値にビットマップ・インデックスを定義します。以下はその例です。

      /// Index for fact 1. Index DxGender On DxGender [ Type = bitmap ];
      
      /// Dimension: DxGender <br/>
      /// Source: Gender
      Property DxGender As Test.TestCube.DxGender;
      
      

      このディメンジョンが別のキューブによって共有される場合、このポインタは他方のキューブの該当するディメンジョン・テーブルのレコードを参照します。共有ディメンジョンの詳細は、"DeepSee 上級モデリング・ガイド" を参照してください。

    • 時間タイプおよび年齢タイプのレベルでは、ファクト・テーブルに整数が格納されます。

      ファクト・テーブル・クラスは、対応するプロパティを計算値として定義し、そのビットマップ・インデックスを定義します。 以下はその例です。

      /// Index for fact 4. Index DxBirthDateFxYear On DxBirthDateFxYear [ Type = bitmap ]; 
      
      /// Dimension: DxBirthDateFxMonthYear<br/> 
      /// Source: BirthDate Property DxBirthDateFxMonthYear As %Integer [ details omitted ]; 
      Property DxBirthDateFxYear As %Integer [ Calculated, SqlComputeCode = ... , SqlComputed ];
      
    • キューブ間の <relationship> の場合、このキューブでリレーションシップの sourceProperty または sourceExpression が指定されているときは、ファクト・テーブルに他方のファクト・テーブルの対応する行の ID が格納されます。この ID は、他方のファクト・テーブルへのポインタです。

  • 時間タイプ・ディメンジョンまたは年齢タイプ・ディメンジョンごとにフィールドが 1 つ存在し、このレコードの時刻ディメンジョンまたは年齢ディメンジョンの完全な値が格納されます (ただし、1 つ例外があります。この付録で後述の “ファクト・テーブルにおけるソース・プロパティの再使用” を参照してください)。

    この値は %DeepSee.Datatype.dateTimeOpens in a new tab という形式で、インデックスは作成されません。

このクラスには、iKnow レベルまたは iKnow メジャーのプロパティは含まれません。これらは別の方法で処理されます。

レベルに dependsOn 属性を指定した場合、ファクト・テーブルにレベルの組み合わせに対する追加のインデックスが格納されます。

Index DxPostalCodeViaHomeCityANDDx2642257510 On (DxPostalCodeViaHomeCity, Dx2642257510) [ Type = bitmap ];

<cube><index> 要素を定義した場合は、ファクト・テーブルに追加のカスタム・インデックスが格納されます。以下はその例です。

Index %UserIndexName On (MxAge, DxGender) [ Type = bitmap ];

これらのカスタム・インデックスは、独自で使用するためのものです。DeepSee はこのようなインデックスを使用しません。

フィールド名

以下のテーブルに、DeepSee でメジャー、レベル、およびディメンジョンの各フィールドの名前を決定する方法をまとめます (factName 属性が指定されない場合)。

項目およびシナリオ ファクト・テーブルのフィールド名 (factName 属性でオーバーライドされていない場合)
ソース・プロパティに基づくメジャー Mxprop_nameprop_name はプロパティの名前です。 MxAge
別のテーブルのソース・プロパティに基づくメジャー、via ドット構文を使用 (まれなケース) Mxother_prop_nameViaprop_nameother_prop_name は他のクラスのプロパティの名前です。ただし、生成されるフィールド名が長すぎる場合は、一意の番号が生成されます。 MxAgeViaOtherTable
ソース式に基づくメジャー MxnnnnnnnnnTnnnnnnnnn は整数、T はメジャー・タイプを示します (例えば、I は整数メジャーを表します)。 Mx1968652733I
ソース・プロパティに基づくデータ・レベル (範囲式は不使用) Dxprop_name DxGender
範囲式を使用するソース・プロパティに基づくデータ・レベル Dxprop_nameRgnnnnnnnnnnnnnnnnnnn は整数です。 DxAgeRg855025875
別のテーブルのソース・プロパティに基づくデータ・レベル、via ドット構文を使用 Dxother_prop_nameViaprop_name

ただし、生成されるフィールド名が長すぎる場合は、一意の番号が生成されます。

DxPostalCodeViaHomeCity
ソース式に基づくデータ・レベル Dxnnnnnnnnnn Dx2163088627
時間タイプ・ディメンジョンまたは年齢タイプ・ディメンジョン Dxdim_namedim_name はディメンジョンの名前です (このフィールドはこのディメンジョンのレベルによって使用されます)。 DxBirthDate
時間タイプ・レベルまたは年齢タイプ・レベル Dxdim_nameFxfunc_namefunc_name はこのレベルの timeFunction 属性で指定されている名前です。 DxBirthDateFxYear
リレーションシップ Rxgenerated_namegenerated_name は、ソース・プロパティの名前またはソース式に基づいて生成された名前です。 RxMainCity

ファクト・テーブルにおけるソース・プロパティの再使用

キューブに、(sourceProperty を介して) 同じプロパティを使用する複数のメジャーが存在する場合、ファクト・テーブルにはこれらのメジャーの 1 つ (キューブ定義内の最後のメジャー) のフィールドのみが格納されます。例えば、キューブに以下のメジャー定義が含まれているとします。

<measure name="Age" sourceProperty="Age" aggregate="SUM" factName="AgeFact"/>
<measure name="Avg Age" sourceProperty="Age" aggregate="AVG" factName="AvgAgeFact"/>

これら 2 つのメジャーは複数のレコード間の集約方法のみが異なります。ファクト・テーブルでは、どのレコードについてもこれらのメジャーに同じ値が格納されることになります。効率化を図るため、ファクト・テーブルには、フィールド AvgAgeFact は組み込まれますが、 AgeFact は組み込まれません。

キューブに同じプロパティを使用する複数のレベルが存在する場合も同じロジックが適用されます。このロジックは、キューブに同じプロパティを使用する複数の年齢ディメンジョンまたは時刻ディメンジョンが存在する場合にも適用されます。

指定のメジャー、レベル、またはディメンジョンに対して sourceExpression を使用し、%source.propertyname を介してプロパティにアクセスする場合、DeepSee は、常にその値に対して別個のフィールドを生成します。

ディメンジョン・テーブル

キューブ定義クラスをコンパイルする際、年齢タイプおよび時間タイプのレベル以外の各レベルにもテーブルが生成されます。これらのテーブルは、ファクト・テーブルと同じパッケージ内に存在します。

キューブを構築したり、インクリメンタルに更新すると、常にディメンジョン・テーブル (スター・テーブルとも呼ばれる) が更新されます。

レベルのディメンジョン・テーブルには、そのレベルのメンバごとに 1 つの行が含まれます。ディメンジョン・テーブルは、DeepSee がベース・テーブルのレコードを処理する際に動的に作成されます。指定のレベルに対して、新たな一意の値が検出されるたびに、適切なディメンジョン・テーブルにその値が新しい行として追加されます。つまり、ディメンジョン・テーブルには必要な時点で行が自動的に追加され、特に操作する必要はありません。

ディメンジョン・テーブルの名前

キューブ定義で対応するレベルに factName 属性が指定されている場合、その値が該当するディメンジョン・テーブルの名前として使用されます。

この指定がない場合、ディメンジョン・テーブルの名前の形式は以下のとおりです。

Stargenerated_name

generated_name はファクト・テーブルの対応するフィールド名で、先頭に Dx は使用されません。例えば、ファクト・テーブル内で、Home City レベルのフィールド名が DxPostalCodeViaHomeCity であるとします。この場合、対応するディメンジョン・テーブルは StarPostalCodeViaHomeCity と名付けられます。

ディメンジョン・テーブル内の列

この行の列は以下のようになります。

  • ID — この行の ID。行の作成時に割り当てられます。

  • 列が 1 つ存在し、このメンバのキーが格納されます。このフィールドの名前は、このレベルに対応するファクト・テーブルの列名のフィールドと同じになります。前のセクションを参照してください。

  • このレベルのプロパティごとに 1 つの列が存在し、このメンバの実際のプロパティ値が格納されます。

    このフィールド名は Dx で始まり、前述したように、ソース・プロパティ名に基づくか、一意の番号として生成されます。

    linkClasslinkProperty を使用して、プロパティと、そのプロパティが属するレベルの両方を定義する場合、プロパティとレベルのフィールドの名前は同じものになります。このシナリオでは、DeepSee によりプロパティのフィールド名の末尾に _Link が追加されます。

  • このレベルの親レベルごとに 1 つの列が存在し、このメンバの親の ID が格納されます。

    このフィールドの名前は、親レベルに対応するファクト・テーブルの列名と同じになります。

レベルの定義方法に応じて、メンバ名は以下のように確認できます。

  • 既定では、キーが名前として使用され、その名前は個別には格納されません。

  • レベルに isName="true" で定義されているプロパティが含まれる場合、 (1 つの例外を除いて) メンバ名はそのプロパティが含まれる列に格納されます。例外は、プロパティが isReference="true" でも定義されている場合です。この場合、フィールドは実行時に計算されます。

FeedbackOpens in a new tab