集計関数の使用
このトピックでは、集計関数 (Sum、Min、Max、Count、および Distinct Count) をメジャーで使用する例について説明します。クエリの例については、関数を変更したことによる結果の違いを把握できるように、次の例と同じキューブ セルに基づいてクエリを作成することにします。
これらの例で使用するキューブは、Sales ファクト テーブル内の Sales_Amount 列に基づいた Sales という 1 つのメジャーを持っています。このキューブには次の 3 つのディメンションがあります。
テーブル Customers に基づく Customers ディメンション。最上位から最下位までのレベルが含まれています。
(All)
メンバ名列として Customer_Name を持ち、メンバ キー列として Customer_ID を持つ顧客
テーブル Retail_Stores に基づく Retail Stores ディメンション。最上位から最下位までのレベルが含まれています。
(All)
メンバ名列として Retail_Store_Name を持ち、メンバ キー列として Retail_Store_ID を持つ小売店
テーブル Products に基づく Products ディメンション。最上位から最下位のレベルが含まれています。
(All)
メンバ名列およびメンバ キー列として Product_Category を持つ製品カテゴリ
メンバ名列として Product_Name を持ち、メンバ キー列として Product_ID を持つ製品
ディメンションとレベルの詳細については、「ディメンション」および「レベル」を参照してください。
次に、キューブのスキーマについて説明します。
キューブのファクト テーブルである Sales の内容は次のとおりです。
Transaction_ID |
Customer_ID |
Product_ID |
Retail_Store_ID |
Sales_ Amount |
---|---|---|---|---|
1 |
1 |
1 |
1 |
300 |
2 |
1 |
1 |
1 |
250 |
3 |
1 |
1 |
1 |
250 |
4 |
1 |
2 |
1 |
100 |
5 |
1 |
4 |
1 |
700 |
6 |
2 |
1 |
2 |
290 |
7 |
2 |
2 |
2 |
90 |
8 |
2 |
3 |
3 |
510 |
9 |
3 |
1 |
4 |
350 |
10 |
3 |
2 |
3 |
110 |
11 |
4 |
3 |
4 |
550 |
12 |
4 |
4 |
4 |
750 |
キューブのディメンション テーブルの 1 つである Customers の内容は次のとおりです。
Customer_ID |
Customer_Name |
Customer_Address_ Line_1 |
Customer_Address_ Line_2 |
---|---|---|---|
1 |
A |
1 A Street |
Aville, AA 55555 |
2 |
B |
2 B Street |
Bville, BB 55555 |
3 |
C |
3 C Street |
Cville, CC 55555 |
4 |
D |
4 D Street |
Dville, DD 55555 |
キューブの別のディメンション テーブルである Retail_Stores のスキーマの内容は次のとおりです。
Retail_ Store_ID |
Retail_Store_ Name |
Retail_Store_ Address_Line_1 |
Retail_Store_ Address_Line_2 |
---|---|---|---|
1 |
A |
1 A Avenue |
Atown, AA 55555 |
2 |
B |
2 B Avenue |
Btown, BB 55555 |
3 |
C |
3 C Avenue |
Ctown, CC 55555 |
4 |
D |
4 D Avenue |
Dtown, DD 55555 |
キューブの最後のディメンション テーブルである Products の内容は次のとおりです。
Product_ID |
Product_Name |
Product_Description |
Product_Category |
---|---|---|---|
1 |
A |
aaaa aaaa aaaa |
AB |
2 |
B |
bbbb bbbb bbbb |
AB |
3 |
C |
cccc cccc cccc |
CD |
4 |
D |
dddd dddd dddd |
CD |
SUM
メジャーの Aggregate Function プロパティ値が Sum の場合、キューブ セルのメジャー値は、セルとそのメンバの子孫を定義しているメンバの組み合わせを示す行のメジャーの変換元列にある値を加算して計算されます。
例
次は、Sales の累積値を表す値を返す例です。
A: 1 つのアトミック キューブ セルに対するクエリ
顧客 A、小売り店 A、および製品 A の Sales メジャーに対するクエリでは 800 が返されます。
B: 1 つの非アトミック キューブ セルに対するクエリ
顧客 A、小売り店 A、および製品カテゴリ AB の Sales メジャーに対するクエリでは 900 が返されます。
C: 複数のキューブ セルに対するクエリ
Sales メジャーに対するクエリにより、各小売り店は X 軸に配置され、製品カテゴリ下の製品は Y 軸に入れ子にされ、[All Customers (すべての顧客)] でスライスされます。次のデータセットが返されます。
すべての小売り店 |
A |
B |
C |
D |
|||
すべての製品 |
4250 |
1600 |
380 |
620 |
1650 |
||
AB |
1740 |
900 |
380 |
110 |
350 |
||
A |
1440 |
800 |
290 |
350 |
|||
B |
300 |
100 |
90 |
110 |
|||
CD |
2510 |
700 |
510 |
1300 |
|||
C |
1060 |
510 |
550 |
||||
D |
1450 |
700 |
750 |
Min
メジャーの Aggregate Function プロパティ値が Min の場合、キューブ セルのメジャー値は、セルとそのメンバの子孫を定義しているメンバの組み合わせを示す行のメジャーの変換元列にある最小値を取得して計算されます。
例
次は、Sales 価格の最小値を表す値を返す例です。
A: 1 つのアトミック キューブ セルに対するクエリ
顧客 A、小売り店 A、および製品 A の Sales メジャーに対するクエリでは 250 が返されます。
B: 1 つの非アトミック キューブ セルに対するクエリ
顧客 A、小売り店 A、および製品カテゴリ AB の Sales メジャーに対するクエリでは 100 が返されます。
C: 複数のキューブ セルに対するクエリ
Sales メジャーに対するクエリにより、各小売り店は X 軸に配置され、製品カテゴリ下の製品は Y 軸に入れ子にされ、[All Customers (すべての顧客)] でスライスされます。次のデータセットが返されます。
すべての小売り店 |
A |
B |
C |
D |
|||
すべての製品 |
90 |
100 |
90 |
110 |
350 |
||
AB |
90 |
100 |
90 |
110 |
350 |
||
A |
250 |
250 |
290 |
350 |
|||
B |
90 |
100 |
90 |
110 |
|||
CD |
510 |
700 |
510 |
550 |
|||
C |
510 |
510 |
550 |
||||
D |
700 |
700 |
750 |
Max
メジャーの Aggregate Function プロパティ値が Max の場合、キューブ セルのメジャー値は、セルとそのメンバの子孫を定義しているメンバの組み合わせを示す行のメジャーの変換元列にある最大値を取得して計算されます。
例
次は、Sales 価格の最大値を表す値を返す例です。
A: 1 つのアトミック キューブ セルに対するクエリ
顧客 A、小売り店 A、および製品 A の Sales メジャーに対するクエリでは 300 が返されます。
B: 1 つの非アトミック キューブ セルに対するクエリ
顧客 A、小売り店 A、および製品カテゴリ AB の Sales メジャーに対するクエリでは 300 が返されます。
C: 複数のキューブ セルに対するクエリ
Sales メジャーに対するクエリにより、各小売り店は X 軸に配置され、製品カテゴリ下の製品は Y 軸に入れ子にされ、[All Customers (すべての顧客)] でスライスされます。次のデータセットが返されます。
すべての小売り店 |
A |
B |
C |
D |
|||
すべての製品 |
750 |
700 |
290 |
510 |
750 |
||
AB |
350 |
300 |
290 |
110 |
350 |
||
A |
350 |
300 |
290 |
350 |
|||
B |
110 |
100 |
90 |
110 |
|||
CD |
750 |
700 |
510 |
750 |
|||
C |
550 |
510 |
550 |
||||
D |
750 |
700 |
750 |
Count
メジャーの Aggregate Function プロパティ値が Count の場合、キューブ セルのメジャー値は、セルとそのメンバの子孫を定義しているメンバの組み合わせを示す行のメジャーの変換元列にある値の数を加算して計算されます。
例
次は、Sales トランザクションの数を表す値を返す例です。
A: 1 つのアトミック キューブ セルに対するクエリ
顧客 A、小売り店 A、および製品 A の Sales メジャーに対するクエリでは 3 が返されます。
B: 1 つの非アトミック キューブ セルに対するクエリ
顧客 A、小売り店 A、および製品カテゴリ AB の Sales メジャーに対するクエリでは 4 が返されます。
C: 複数のキューブ セルに対するクエリ
Sales メジャーに対するクエリにより、各小売り店は X 軸に配置され、製品カテゴリ下の製品は Y 軸に入れ子にされ、[All Customers (すべての顧客)] でスライスされます。次のデータセットが返されます。
すべての小売り店 |
A |
B |
C |
D |
|||
すべての製品 |
12 |
5 |
2 |
2 |
3 |
||
AB |
8 |
4 |
2 |
1 |
1 |
||
A |
5 |
3 |
1 |
1 |
|||
B |
3 |
1 |
1 |
1 |
|||
CD |
4 |
1 |
1 |
2 |
|||
C |
2 |
1 |
1 |
||||
D |
2 |
1 |
1 |
Distinct Count
メジャーの Aggregate Function プロパティ値が Distinct Count の場合、キューブ セルのメジャー値は、セルとそのメンバの子孫を定義するメンバの組み合わせを示す行のメジャーの変換元列にある一意の値の数を加算して計算されます。
Aggregate Function プロパティ値が Distinct Count のメジャーは、"個別のカウント メジャー" と呼ばれます。個別のカウント メジャーを使用すると、ファクト テーブルにおけるディメンションの最下位レベル メンバの出現数をカウントできます。カウントは重複しないため、メンバが複数回発生した場合も 1 つとしてカウントされます。
個別のカウント メジャーを使用するのは、あるディメンションの各メンバについて、別のディメンションの重複しない最下位レベルのメンバが、ファクト テーブル内で行をいくつ共有しているかを調べる場合です。たとえば、Sales キューブの場合、顧客および顧客グループごとに、何種類の製品が購入されたかを調べます。つまり、Customers ディメンションの各メンバに対して、Products ディメンションの重複しない最下位レベル メンバがファクト テーブル内でいくつの行を共有しているかを調べます。または、Internet Site Visits キューブの場合、サイト閲覧者や閲覧者グループごとに、インターネット サイト上で閲覧された重複しないページ数を調べる場合もあります。つまり、Site Visitors ディメンションのメンバごとに、Page ディメンションの重複しない最下位レベルのメンバがファクト テーブル内の行をいくつ共有しているかを調べます。これらの各サンプルでは、2 番目のディメンションの最下位レベル メンバが個別のカウント メジャーによってカウントされます。
このような分析では、ディメンションを 2 つに制限する必要はありません。実際、カウント対象となるメンバを含んでいるディメンションなど、キューブ内のディメンションを自由に組み合わせることによって個別のカウント メジャーを分割およびスライスできます。
メンバをカウントする個別のカウント メジャーは、ファクト テーブル内の外部キー列に基づきます。つまり、メジャーの Source Column プロパティでこの列を識別します。この列は、個別のカウント メジャーによってカウントされたメンバを識別するディメンション テーブル列と結合します。
標準キューブでは、個別のカウント メジャーの使用に制限があります。標準キューブでは、個別のカウント メジャーを 1 つだけ使用できます。また、使用するには、カスタム ロールアップ演算子やカスタム ロールアップ式が標準キューブに含まれていないことが条件です。ただし、仮想キューブにはこのような制限はありません。仮想キューブでは、個別のカウント メジャーを複数使用できます。また、個別のカウント メジャーと共にカスタム ロールアップ演算子およびカスタム ロールアップ式を使用することもできます。
個別のカウント メジャーは非加法であるため、個別のカウント メジャーが存在すると、キューブを事前集計する Microsoft® SQL Server™ 2000 Analysis Services の機能が大幅に制限されます。このため、それぞれの個別のカウント メジャーは、他のメジャーがない独自のキューブに配置するようにお勧めします。個別のカウント メジャーがあるこれらのキューブは、すべてのメジャーを効率よく管理する仮想キューブ内の他のキューブと結合できます。
注意 |
---|
キューブで個別のカウント メジャーが使用されている場合、そのキューブ全体は非加法として扱われます。非加法キューブでは、動的に作成されたメンバはサポートされません。したがって、動的にメンバを作成する VisualTotals などの MDX 関数は、非加法キューブで使用された場合にエラーを返します。また、動的に作成されたメンバに関連する表示部分の合計をディメンション セキュリティ内で有効にする機能など、他の機能にも影響を与えます。 |
例
次は、Sales 価格が一意の Sales トランザクションの数を表す値を返す例です。
A: 1 つのアトミック キューブ セルに対するクエリ
顧客 A、小売り店 A、および製品 A の Sales メジャーに対するクエリでは 2 が返されます。
B: 1 つの非アトミック キューブ セルに対するクエリ
顧客 A、小売り店 A、および製品カテゴリ AB の Sales メジャーに対するクエリでは 3 が返されます。
C: 複数のキューブ セルに対するクエリ
Sales メジャーに対するクエリにより、各小売り店は X 軸に配置され、製品カテゴリ下の製品は Y 軸に入れ子にされ、[All Customers (すべての顧客)] でスライスされます。次のデータセットが返されます。
すべての小売り店 |
A |
B |
C |
D |
|||
すべての製品 |
11 |
4 |
2 |
2 |
3 |
||
AB |
7 |
3 |
2 |
1 |
1 |
||
A |
4 |
2 |
1 |
1 |
|||
B |
3 |
1 |
1 |
1 |
|||
CD |
4 |
1 |
1 |
2 |
|||
C |
2 |
1 |
1 |
||||
D |
2 |
1 |
1 |