使用彙總函式
本主題包含在量值中使用彙總函式 (Sum、Min、Max、Count 和 Distinct Count) 的範例。查詢的範例是根據與下列範例相同的 Cube 資料格,好讓您可以看到變更函數的影響。
這些範例所使用的 Cube 有單一量值 Sales,這個量值是根據 Sales 事實資料表中的 Sales_Amount 資料行;此 Cube 有三個維度:
客戶維度,以 Customers 資料表為根據,且包含從最高到最低的以下層級:
(全部)
將 Customer_Name 當做成員名稱資料行及 Customer_ID 當做成員索引鍵資料行的客戶
零售商維度,以 Retail_Stores 資料表為根據,且包含從最高到最低的以下層級:
(全部)
將 Retail_Store_Name 當做成員名稱資料行及 Retail_Store_ID 當做成員索引鍵資料行的零售商
產品維度,以 Products 資料表為根據,且包含從最高到最低的以下層級:
(全部)
將 Product_Category 當做成員名稱資料行及成員索引鍵資料行的產品類別目錄
將 Product_Name 當做成員名稱資料行及 Product_ID 當做成員索引鍵資料行的產品
如需有關維度和層級的詳細資訊,請參閱<維度>和<層級>。
以下顯示此 Cube 的結構描述。
這裡會顯示此 Cube 的事實資料表 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 |
以下顯示此 Cube 的其中一個維度資料表 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 |
以下顯示此 Cube 的另一個維度資料表 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 |
以下顯示此 Cube 的最後一個維度資料表 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
如果量值的**「彙總函式」**屬性值為 Sum,則 Cube 資料格之量值的計算方式,是針對定義此資料格之成員及這些成員下階的組合,只將這個組合之資料列中量值來源資料行內的值相加。
範例
下列範例會傳回代表累積銷售量的值。
A:查詢一個不可部分完成的 Cube 資料格
客戶 A、零售商 A 及產品 A 的銷售量值查詢傳回 800。
B:查詢一個非不可部分完成的 Cube 資料格
客戶 A、零售商 A 及產品類別目錄 AB 的銷售量值查詢傳回 900。
C:查詢多個 Cube 資料格
銷售量值的查詢會將每一家零售商放在 X 軸上,並將產品放在 Y 軸上的產品類別目錄之下,然後由「所有客戶」切割;此查詢會傳回下列資料集。
所有零售商 |
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
如果量值的**「彙總函式」**屬性值為 Min,則 Cube 資料格之量值的計算方式,是針對定義此資料格之成員及這些成員下階的組合,只取這個組合之資料列中量值來源資料行內的最小值。
範例
下列範例會傳回代表最低銷售價格的值。
A:查詢一個不可部分完成的 Cube 資料格
客戶 A、零售商 A 及產品 A 的銷售量值查詢傳回 250。
B:查詢一個非不可部分完成的 Cube 資料格
客戶 A、零售商 A 及產品類別目錄 AB 的銷售量值查詢傳回 100。
C:查詢多個 Cube 資料格
銷售量值的查詢會將每一家零售商放在 X 軸上,並將產品放在 Y 軸上的產品類別目錄之下,然後由「所有客戶」切割;此查詢會傳回下列資料集。
所有零售商 |
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
如果量值的**「彙總函式」**屬性值為 Max,則 Cube 資料格之量值的計算方式,是針對定義此資料格之成員及這些成員下階的組合,只取這個組合之資料列中量值來源資料行內的最大值。
範例
下列範例會傳回代表最高銷售價格的值。
A:查詢一個不可部分完成的 Cube 資料格
客戶 A、零售商 A 及產品 A 的銷售量值查詢傳回 300。
B:查詢一個非不可部分完成的 Cube 資料格
客戶 A、零售商 A 及產品類別目錄 AB 的銷售量值查詢傳回 300。
C:查詢多個 Cube 資料格
銷售量值的查詢會將每一家零售商放在 X 軸上,並將產品放在 Y 軸上的產品類別目錄之下,然後由「所有客戶」切割;此查詢會傳回下列資料集。
所有零售商 |
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
如果量值的**「彙總函式」**屬性值為 Count,則 Cube 資料格之量值的計算方式,是針對定義此資料格之成員及這些成員下階的組合,只將這個組合之資料列中量值來源資料行內的值數目相加。
範例
下列範例會傳回代表銷售交易數目的值。
A:查詢一個不可部分完成的 Cube 資料格
客戶 A、零售商 A 及產品 A 的銷售量值查詢傳回 3。
B:查詢一個非不可部分完成的 Cube 資料格
客戶 A、零售商 A 及產品類別目錄 AB 的銷售量值查詢傳回 4。
C:查詢多個 Cube 資料格
銷售量值的查詢會將每一家零售商放在 X 軸上,並將產品放在 Y 軸上的產品類別目錄之下,然後由「所有客戶」切割;此查詢會傳回下列資料集。
所有零售商 |
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
如果量值的**「彙總函式」**屬性值為 Distinct Count,則 Cube 資料格之量值的計算方式,是針對定義此資料格之成員及這些成員下階的組合,只將這個組合之資料列中量值來源資料行內的唯一值數目相加。
具有**「彙總函式」**屬性值 Distinct Count 的量值稱為相異計數量值;相異計數量值可用來統計事實資料表中某維度之最低層級成員的出現次數。因為當成員出現多次時,此計數便會不同,所以只會計算一次。
相異計數量值通常是用來針對維度的每一個成員判斷,另一個維度有多少相異的最低層級成員共用事實資料表中的資料列;例如在 Sales Cube 中,針對每一個客戶及客戶群組判斷,已經購買了多少數量的相異產品?(也就是說,對於客戶維度的每一個成員而言,產品維度中有多少相異的最低層級成員共用事實資料表中的資料列?)或者在 Internet Site Visits Cube 中,針對每一個網站造訪者及網站造訪者群組判斷,此網際網路網站上造訪過的相異網頁數目。(也就是說,對於網站造訪者維度的每一個成員而言,網頁維度中有多少相異的最低層級成員共用事實資料表中的資料列?)在每一個範例中,第二個維度的最低層級成員是由相異計數量值所統計。
此分析種類不需要限制為兩個維度;事實上,相異計數量值可由 Cube 中的任何維度組合 (包括含有已計算成員的維度) 加以區隔及切割。
計算成員的相異計數量值是以事實資料表中的外部索引鍵資料行為根據 (也就是說,此量值的**「來源資料行」**屬性會識別此資料行);這個資料行會聯結可識別相異計數量值所計算之成員的維度資料表資料行。
正規 Cube 在使用相異計數量值時,有所限制;正規 Cube 中只能有一個相異計數量值,而且只有在正規 Cube 未包含具有自訂積存運算子或自訂積存公式的維度時,才允許使用這個相異計數量值。但是,虛擬 Cube 並不適用這些限制;虛擬 Cube 可以運用多個相異計數量值,也可以將自訂積存運算子和自訂積存公式結合相異計數量值一起使用。
由於相異計數量值是非加總的,所以相異計數量值的存在會大幅限制 Microsoft® SQL ServerÙ 2000 Analysis Services 預先彙總此 Cube 的能力。因此,建議您最好將每一個相異計數放在它自己的 Cube 中,而且不要有任何其他量值;然後可以將具有相異計數量值的這些 Cube 與虛擬 Cube 中有效管理所有量值的其他 Cube 聯結起來。
[!附註]
如果 Cube 使用相異計數量值,則整個 Cube 都會視為非加總的;非加總的 Cube 不支援動態建立的成員;因此,如果在非加總的 Cube 上使用會動態建立成員的 MDX 函數 (如 VisualTotals),將會傳回錯誤;這也會影響與動態建立之成員有關的其他功能,例如,在維度安全性中啟用視覺化總計。
範例
下列範例會傳回代表具有唯一銷售價格之銷售交易數目的值。
A:查詢一個不可部分完成的 Cube 資料格
客戶 A、零售商 A 及產品 A 的銷售量值查詢傳回 2。
B:查詢一個非不可部分完成的 Cube 資料格
客戶 A、零售商 A 及產品類別目錄 AB 的銷售量值查詢傳回 3。
C:查詢多個 Cube 資料格
銷售量值的查詢會將每一家零售商放在 X 軸上,並將產品放在 Y 軸上的產品類別目錄之下,然後由「所有客戶」切割;此查詢會傳回下列資料集。
所有零售商 |
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 |