0

Mondrian と Pentaho および Saiku を使用して、MySQL データベースで OLAP 分析を行っています。ファクト テーブルにリンクする 2 つのディメンション (受益者とメンバー) を持つデータ ウェアハウスがあります。受益者には次のフィールドがあります: beneficiary_type1、beneficiary_type2、beneficiary_type3。メンバーには性別のフィールドがあります。

以下で定義されたモンドリアンスキーマを作成しました。

<Dimension type="StandardDimension" visible="true" foreignKey="beneficiary_id" highCardinality="false" name="beneficiary">
  <Hierarchy visible="true" hasAll="true" primaryKey="id">
    <Table name="beneficiary">
    </Table>
    <Level name="beneficiary_type1" visible="true" column="beneficiary_type1" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">
    </Level>
    <Level name="beneficiary_type2" visible="true" column="beneficiary_type2" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
    </Level>
    <Level name="beneficiary_type3" visible="true" column="beneficiary_type3" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
    </Level>
  </Hierarchy>
</Dimension>

<Dimension type="StandardDimension" visible="true" foreignKey="member_id" highCardinality="false" name="member">
  <Hierarchy visible="true" hasAll="true" primaryKey="id">
    <Table name="member">
    </Table>
    <Level name="gender" visible="true" column="gender" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">
    </Level>
  </Hierarchy>
</Dimension>

(個別に)閲覧できるようにしたい:受益者_type1の男女数、受益者_type2の男女数、受益者_type3の男女数、

性別を受益者タイプ 1 の上にドラッグすると、次のように表示されますが、これは正しいものです。

オラップ1

性別を受益者タイプ 2 にドラッグすると、次のように表示されますが、これは正しくありません。

olap2

これは beneficiary_type2 列であるため、両方のフィールドを追加するとわかるように、benefiiary_type1 でグループ化されます。

ここに画像の説明を入力

beneficiary_type2 で性別を表示すると、「成人」用と「19 歳までの子供」用の 2 つの行しか表示されないことが予想されます。私が読んだことから、uniqueMembers 属性は beneficiary_type2 レベルで設定する必要があるようですが、これにより次の結果が得られます。

ここに画像の説明を入力

これにより、正しい番号付けされた結果が得られますが、行は依然として受益者タイプ 1 によってグループ化されているかのように表示されます。また、この方法では、3 番目のイメージのように、beneficiary_type1 の下に正しくグループ化された beneficiary_type2 を生成できません (番号付けされた結果は、親レベルに従ってグループ化されることはありません)。

分析に含めた親レベルによって決定される行数を持つように、スキーマをどのように構築すればよいですか? (saiku を使用してキューブにドラッグ)つまり、beneficiary_type1 と beneficiary_type2 をドラッグすると、beneficiary_type2 は beneficiary_type1 に従ってグループ化され(3 番目の画像のように)、beneficiary_type2 のみの場合は、固有の値に従ってグループ化されます(2 行、「Adults」用に 1 行)。 」と「19歳までの子供」用の1つ)。

私は OLAP に比較的慣れていないので、理解できない基本的な概念がいくつかあるかもしれません。説明があれば遠慮なく分岐してください。

-------------------- 更新 --------------------

@nsousa で説明されているように、同じ階層は、親子関係を意味します。スキーマの正しい変更は次のようになりますか?

<Dimension type="StandardDimension" visible="true" foreignKey="beneficiary_id" highCardinality="false" name="beneficiary">
  <Hierarchy visible="true" hasAll="true" primaryKey="id">
    <Table name="beneficiary">
    </Table>
    <Level name="beneficiary_type1" visible="true" column="beneficiary_type1" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">
    </Level>
  </Hierarchy>
  <Hierarchy visible="true" hasAll="true" primaryKey="id">
    <Table name="beneficiary">
    </Table>
    <Level name="beneficiary_type2" visible="true" column="beneficiary_type2" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
    </Level>
  </Hierarchy>
  <Hierarchy visible="true" hasAll="true" primaryKey="id">
    <Table name="beneficiary">
    </Table>
    <Level name="beneficiary_type3" visible="true" column="beneficiary_type3" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
    </Level>
  </Hierarchy>
</Dimension>

別の解決策として、受益者テーブルに 3 つの個別のディメンションをロードするという理解で正しいでしょうか? これは、3 つの別個のテーブル (受益者メンバーごとに 1 つ) がデータベースにも存在する必要があることを意味しますか?それとも、同じテーブルを複数のディメンションに使用できますか? 明らかに、メンバーごとにデータベース テーブルを用意するのは理想的ではありません。このようにする利点はありますか?

4

1 に答える 1

2

あなたの beneficiary_type2 レベルは、beneficiary_type1 の子孫です。そのため、メンバー名が一致していても、レベル 2 の 2 つの「大人」は、親が同じでない限り、同じメンバーではありません。

両親が違うので、同じ名前のいとこです。したがって、複数の行を取得します。

必要なことを行うための唯一の安全な方法は、親子階層を持たずに、さまざまなレベルを複数のディメンション/階層に分割することです。

異なる階層では、type1 と type2 の間に関係はなく、必要な 2 つの異なる文字列のみが得られます。

于 2014-09-24T08:08:29.883 に答える