Collection Contents 上一页 下一页 PDF

ASA SQL 用户指南

使用 OLAP

使用 CUBE


CUBE 操作是一项 OLAP 功能。OLAP 是一种组织数据的方法,它可以适应您分析和管理数据的方式,以便省时省力地生成您需要的结果集。您要预先计算报告的摘要值,这样可以加快报告计算的速度。如果要在报告中处理大量数据,CUBE 很有用。

像 ROLLUP 一样,CUBE 运算符为结果集的集合值提供小计。对变量执行 CUBE 操作时,结果集包括许多基于变量值组合的小计行。与 ROLLUP 不同的是,CUBE 可返回您在查询中指定的所有可能的变量组合。

CUBE 运算符会返回增加了数据维数信息的结果集。您可以进一步分析数据的列,这些列称为维。CUBE 提供所有可能的维组合的交叉表格报告,并生成一个结果集,该结果集显示所选列中的值的所有组合的集合。

注意 
当维不是同一层次的一部分时,CUBE 特别有用。
此 SQL 语法... 定义以下集合...
GROUP BY CUBE (A, B, C);
(A, B, C)

(A, B)

(A, C)

(A)

(B, C)

(B)

(C)

( )

有关 CUBE 查询返回的行的详细信息,请参见关于 OLAP 操作。有关在查询中使用 GROUP BY 子句的详细信息,请参见 GROUP BY 子句

示例 

在后面的示例中,查询会返回一个结果集,该结果集汇总了订单总数,然后按年和季度计算订单数的小计。

注意 
随着要比较的变量数量的增加,查询返回的 CUBE 的复杂程度也会增加。
SELECT year (order_date) AS Year, quarter (order_date) AS Quarter, COUNT (*) AS Orders
FROM sales_order
GROUP BY CUBE (Year, Quarter)
ORDER BY Year, Quarter

下面的表是查询的结果集。在结果集中突出显示小计行。每一小计行在计算小计的列中的值为 NULL。

A result set from a CUBE query showing the grand total and subtotalled number of sales orders.

第一个突出显示的行 [1] 表示两年和所有季度内的订单总数。Orders 列中的值是每个标有 [3] 的行中的值的总和。它也是标有 [2] 的行中的四个值的总和。

注意 
所有 CUBE 操作返回的结果集均至少有一行在除集合列以外的每个列中显示 NULL。该行表示对执行集合函数的每一列的汇总。

下一组突出显示的行 [2] 按季度表示两年内的订单总数。后面的标有 [3] 的两行分别表示 2000 年和 2001 年中所有季度的订单总数。

了解 CUBE 

CUBE 操作等效于包括所有可能的变量组合的 GROUPING SETS 查询。

此 CUBE 查询... 等效于没有 CUBE 的此查询...
SELECT A, B, C, SUM( D )
FROM t
GROUP BY CUBE( A, B, C)
SELECT A, B, C, 
     SUM( D )
FROM t
GROUP BY GROUPING SETS( 
     ( A, B, C ), 
     ( A, B ), ( A ), ( B, C ), 
     ( B ), ( A, C ), ( C ), 
     () )

有关在前面的 SQL 查询中使用的 GROUPING SETS 语法的信息,请参见使用 GROUPING SETS


Collection Contents 上一页 下一页 PDF