3

私はデータキューブのファクトテーブルを設計中ですが、正しく集計する方法がよくわからないメジャーがあります。次のSQLコードは、小さなサンプルファクトテーブルとディメンションテーブルを作成します。

create table FactTable (
    ID      int,
    Color   int,
    Flag    int)

insert into FactTable (ID, Color, Flag) values (1, 'RED',   1)
insert into FactTable (ID, Color, Flag) values (1, 'WHITE', 0)
insert into FactTable (ID, Color, Flag) values (1, 'BLUE',  1)
insert into FactTable (ID, Color, Flag) values (2, 'RED',   0)
insert into FactTable (ID, Color, Flag) values (2, 'WHITE', 0)
insert into FactTable (ID, Color, Flag) values (2, 'BLUE',  1)
insert into FactTable (ID, Color, Flag) values (3, 'RED',   1)
insert into FactTable (ID, Color, Flag) values (3, 'WHITE', 1)
insert into FactTable (ID, Color, Flag) values (3, 'BLUE',  1)

create table ColorDim (
    CID     int, 
    Color  int)

insert into ColorDim (CID, Color) values (1, 'RED')
insert into ColorDim (CID, Color) values (2, 'WHITE')
insert into ColorDim (CID, Color) values (3, 'BLUE')

FactTableとColorDimは、FactTable.Color=ColorDim.Colorで結合されます。キューブには、赤、白、または青(少なくとも1つの色)を含むオブジェクトIDをカウントする「Patriotic」と呼ばれるメジャーが必要です。必要な出力は次のとおりです。

  • キューブを参照するときに、ユーザーが愛国的なメジャーをプルする(ディメンションをプルしない)場合、3つの色の少なくとも1つを含む2つのID(つまり、1と3)があるため、表示される合計は2になります。ID 1は、2つの色がありますが、愛国心の合計値に1を与える必要があることに注意してください。
  • ユーザーが愛国的なメジャーを色ディメンションで参照すると、次のような表が表示されます。ID 1は、1がREDカウントに、1がBLUEカウントに寄与することに注意してください。

    + -------- + ----------- +
    | 色| 愛国心が強い|
    + -------- + ----------- +
    | 赤| 2 |
    | ホワイト| 1 |
    | ブルー| 2 |
    + -------- + ----------- +

(このWebアプリを使用してテーブルを作成しようとしましたが、間隔が正しくないようです。十分に読みやすく、理解できるといいのですが。)

これは非常に基本的なキューブの設計状況であると確信していますが、これまでキューブを操作したことはなく、使用したメジャーは通常、単純な列のSUM、または列のSUMの積などです。感謝します。

(関連する場合は、MS SQL Server 2008でファクト/ディメンションテーブルを作成するSQLクエリを実行し、MS Visual Studio 2008でキューブ自体を設計します。)

4

3 に答える 3

0

質問を理解できるかどうかは100%わかりませんが、試してみます。また、コメントにクエリを投稿して、それらが有効かどうかを確認したくありません。私が離れていて、これが役に立たない場合は、答えを削除します。

キューブを参照するときに、ユーザーが愛国的なメジャーをプルする(ディメンションをプルしない)場合、3つの色の少なくとも1つを含む2つのID(つまり、1と3)があるため、表示される合計は2になります。ID 1は、2つの色がありますが、愛国心の合計値に1を与える必要があることに注意してください。

WITH MyCTE (id, Count)
AS
(
select id, count(flag) as count
from FactTable
where Flag=1
group by id
having COUNT(flag) >=2
)
select COUNT(*) from MyCTE

ユーザーが愛国的なメジャーを色ディメンションで参照すると、次のような表が表示されます。ID 1は、1がREDカウントに、1がBLUEカウントに寄与することに注意してください。

select a.Color, COUNT(*)
from FactTable a
    join ColorDim b
    on a.Color = b.Color
where Flag = 1
group by a.Color
于 2012-08-02T01:22:20.600 に答える
0

ファクトテーブルが「ID」と「カラー」の間のクロス結合である必要がある理由が完全にはわかりません。すべてのFlag=0行を単純に削除し、ID列の単純なカウントを愛国的な尺度として使用できます。個別のカウントにより、愛国的な行の合計が得られます。

ColorDimテーブルによって提供される追加情報がないため、Colorディメンションも必要ありません。

ただし、行にさらに色が追加された場合は、「愛国心が強い」フラグをColorDimテーブルに追加できます。その後、クエリは「愛国的」フラグでフィルタリングし、愛国的な行の正確なカウントを取得できます。

create table FactTable (
    ID      int,
    Color   int
    )

insert into FactTable (ID, Color) values (1, 'RED')
insert into FactTable (ID, Color) values (1, 'BLUE')
insert into FactTable (ID, Color) values (2, 'BLUE')
insert into FactTable (ID, Color) values (3, 'RED')
insert into FactTable (ID, Color) values (3, 'WHITE')
insert into FactTable (ID, Color) values (3, 'BLUE')

   create table ColorDim (
        CID     int, 
        Color  int,
        PatrioticFlag int
    )

insert into ColorDim (CID, Color) values (1, 'RED',1)
insert into ColorDim (CID, Color) values (2, 'WHITE',1)
insert into ColorDim (CID, Color) values (3, 'BLUE',1)
insert into ColorDim (CID, Color) values (4, 'BEIGE',0)
于 2012-08-03T01:59:19.733 に答える
0

私はついにそれを理解しました。まず、IDごとに1つの行を、そのIDの事前に集計されたデータを含むファクトテーブルに追加したため、ファクトテーブルは次のようになります。

create table FactTable (
    ID      int,
    Color   int,
    Flag    int)

insert into FactTable (ID, Color, Flag) values (1, 'RED',   1)
insert into FactTable (ID, Color, Flag) values (1, 'WHITE', 0)
insert into FactTable (ID, Color, Flag) values (1, 'BLUE',  1)
insert into FactTable (ID, Color, Flag) values (1, 'PATRIOTIC',  1)
insert into FactTable (ID, Color, Flag) values (2, 'RED',   0)
insert into FactTable (ID, Color, Flag) values (2, 'WHITE', 0)
insert into FactTable (ID, Color, Flag) values (2, 'BLUE',  1)
insert into FactTable (ID, Color, Flag) values (2, 'PATRIOTIC',  1)
insert into FactTable (ID, Color, Flag) values (3, 'RED',   1)
insert into FactTable (ID, Color, Flag) values (3, 'WHITE', 1)
insert into FactTable (ID, Color, Flag) values (3, 'BLUE',  1)
insert into FactTable (ID, Color, Flag) values (3, 'PATRIOTIC',  1)

同様に、色ディメンションテーブルに行を追加します。

create table ColorDim (
    CID     int, 
    Color  int)

insert into ColorDim (CID, Color) values (1, 'RED')
insert into ColorDim (CID, Color) values (2, 'WHITE')
insert into ColorDim (CID, Color) values (3, 'BLUE')
insert into ColorDim (CID, Color) values (4, 'PATRIOTIC')

次に、MS Visual Studioで、ColorDimensionのColor属性のDefaultMemberプロパティを次のように編集します。

[Color Dimension].[ColorDim].&[PATRIOTIC]

DefaultMemberプロパティは、色'PATRIOTIC'を持つファクトテーブルの行が、同じIDおよび他の色の値を持つ他の行の集計であることをMSVisualStudioに通知します。

于 2012-08-09T14:27:49.583 に答える