次の方法で共有


集計関数の使用

このトピックでは、集計関数 (SumMinMaxCount、および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 の機能が大幅に制限されます。このため、それぞれの個別のカウント メジャーは、他のメジャーがない独自のキューブに配置するようにお勧めします。個別のカウント メジャーがあるこれらのキューブは、すべてのメジャーを効率よく管理する仮想キューブ内の他のキューブと結合できます。

ms365396.note(ja-jp,SQL.90).gifメモ :
キューブで個別のカウント メジャーが使用されている場合、そのキューブ全体は非加法として扱われます。非加法キューブでは、動的に作成されたメンバはサポートされません。したがって、動的にメンバを作成する 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

参照

概念

準加法の動作の定義

その他の技術情報

MDX 関数リファレンス (MDX)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手