使用聚合函数

本主题包含在度量值中使用聚合函数(SumMinMaxCountDistinct Count)的示例。 查询示例与下列示例基于相同的多维数据集单元,以便可以查看更改函数的结果。

这些示例使用的多维数据集有一个“销售额”度量值,它基于 Sales 事实数据表中的 Sales_Amount 列。 此多维数据集有三个维度:

  • “客户”,基于表 Customers 并包含下列从最高到最低的级别:

    • (全部)

    • Customer_Name 作为成员名列而 Customer_ID 作为成员键列的客户

  • “零售店”,基于表 Retail_Stores 并包含下列从最高到最低的级别:

    • (全部)

    • Retail_Store_Name 作为成员名列而 Retail_Store_ID 作为成员键列的零售店

  • “产品”,基于表 Products 并包含下列从最高到最低的级别:

    • (全部)

    • 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

此处显示了多维数据集的一个维度表 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

如果度量值的“聚合函数”属性值为 Sum,则通过将度量值源列中仅来自定义此单元的成员行以及这些成员后代的行中的值相加,计算多维数据集单元的度量值。

示例

下列示例返回表示累积销售额的值。

A:查询一个原子多维数据集单元

对客户 A、零售店 A 和产品 A 的“销售额”度量值的查询返回 800。

B:查询一个非原子多维数据集单元

对客户 A、零售店 A 和产品类别 AB 的“销售额”度量值的查询返回 900。

C:查询多个多维数据集单元

对“销售额”度量值的查询在 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,则通过以下方式计算多维数据集单元的度量值:采用度量值源列中仅来自义此单元的成员行以及这些成员后代的行中的最低值。

示例

下列示例返回表示最低销售价格的值。

A:查询一个原子多维数据集单元

对客户 A、零售店 A 和产品 A 的“销售额”度量值的查询返回 250。

B:查询一个非原子多维数据集单元

对客户 A、零售店 A 和产品类别 AB 的“销售额”度量值的查询返回 100。

C:查询多个多维数据集单元

对“销售额”度量值的查询在 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,则通过以下方式计算多维数据集单元的度量值:采用度量值源列中仅来自定义此单元的成员行以及这些成员后代的行中的最高值。

示例

下列示例返回表示最高销售价格的值。

A:查询一个原子多维数据集单元

对客户 A、零售店 A 和产品 A 的“销售额”度量值的查询返回 300。

B:查询一个非原子多维数据集单元

对客户 A、零售店 A 和产品类别 AB 的“销售额”度量值的查询返回 300。

C:查询多个多维数据集单元

对“销售额”度量值的查询在 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,则通过以下方式计算多维数据集单元的度量值:将度量值源列中仅来自定义此单元的成员行以及这些成员后代的行中的值个数进行相加。

示例

下列示例返回表示销售事务数的值。

A:查询一个原子多维数据集单元

对客户 A、零售店 A 和产品 A 的“销售额”度量值的查询返回 3。

B:查询一个非原子多维数据集单元

对客户 A、零售店 A 和产品类别 AB 的“销售额”度量值的查询返回 4。

C:查询多个多维数据集单元

对“销售额”度量值的查询在 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,则通过以下方式计算多维数据集单元的度量值:将度量值源列中仅来自定义此单元的成员行以及这些成员后代的行中的唯一值个数进行相加。

“聚合函数”属性值为 Distinct Count 的度量值称为非重复计数度量值。 非重复计数度量值可以用于对维度的最低级别成员在事实数据表中的出现次数进行计数。 由于计数具有非重复性,因此,如果某个成员出现多次,则仅对此成员进行一次计数。

非重复计数度量值通常用于确定对于某个维度的每个成员,另一维度有多少不同的最低级别成员共享事实数据表中的。 例如,在“销售额”多维数据集中,对于每个客户和客户组,购买了多少不同的产品? (即,对于“客户”维度的每个成员,“产品”维度有多少不同的最低级别成员共享事实数据表中的行?) 或者,例如在“Internet 站点访问”多维数据集中,对于每个站点访问者和站点访问者组,访问了 Internet 站点上有多少不同的页? (即,对于“站点访问者”维度的每个成员,“页”维度有多少不同的最低级别成员共享事实数据表中的行?) 在上述每个示例中,第二个维度的最低级别成员由非重复计数度量值进行计数。

此类分析无需限制为两个维度。 事实上,非重复计数度量值可以由多维数据集中的任何维度组合进行分隔和切片,这些维度组合包括具有计数成员的维度。

对成员进行计数的非重复计数度量值基于事实数据表中的外键列。 (即,度量值的“源列”属性标识此列。) 此列联接标识由非重复计数度量值进行计数的成员的维度表列。

常规多维数据集在使用非重复计数度量值时存在限制。 一个常规多维数据集中只允许使用一个非重复计数度量值,并且仅当常规多维数据集不包含具有自定义汇总运算符或自定义汇总公式的维度时,才允许使用此度量值。 但是,虚拟多维数据集不存在这些限制。 虚拟多维数据集可以使用多个非重复计数度量值,并且还可以将自定义汇总运算符和自定义汇总公式与非重复计数度量值一起使用。

由于非重复计数度量值具有非累加性,因此,非重复计数度量值的存在大大限制了 Microsoft(R) SQL Server(TM) 2000 Analysis Services 预聚合多维数据集的功能。 因此,建议将每个非重复计数放在其自己的多维数据集中,而不与其他度量值放在一起。 然后,可以将这些具有非重复计数度量值的多维数据集与虚拟多维数据集中的其他多维数据集联接起来,该虚拟多维数据集能够有效管理所有的度量值。

注意注意

如果多维数据集使用非重复计数度量值,则会将整个多维数据集视为具有非累加性。 非累加性多维数据集不支持动态创建成员,因此,如果在非累加性多维数据集中使用可动态创建成员的 MDX 函数(如 VisualTotals),则会返回错误。 这还会影响其他功能,例如,在涉及动态创建成员的维度安全性中启用直观合计。

示例

下列示例返回表示具有唯一销售价格的销售事务数的值。

A:查询一个原子多维数据集单元

对客户 A、零售店 A 和产品 A 的“销售额”度量值的查询返回 2。

B:查询一个非原子多维数据集单元

对客户 A、零售店 A 和产品类别 AB 的“销售额”度量值的查询返回 3。

C:查询多个多维数据集单元

对“销售额”度量值的查询在 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