mysql多维数据仓库指南--第一篇第3章

度量可加性

       一个度量总是一个可计算的值。事实表关于度量最重要的特性之一就是度量的可加性。从度量的可加性看,度量可以分为完全可加或者半可加。如果你在各种情况下都可以累计一个度量的值,这个度量就是完全可加的。如果你只能在部分情况下累加它的值,则该度量是半可加的。理解度量可加性的关键是在事实表中选取一个数据项作为度量。例如,销售订单事实表sales_order_fact的订单金额order_amount是完全可加的,因为你可以沿着它的任何一个或者全部维正确的累加它。就是说,你可以在任何时间,为任何产品,任何客户以及任何订单类型对订单金额order_amount度量进行累加处理。

       本章主要介绍度量的全可加性,度量的半可加性将在24累积度量进行解释。

完全可加度量

       如果一个度量沿着任何一个维累加,它所有值的总和与沿着任何其他的维或者任何一些(包括所有)维的组合进行累加的总和一样,则该度量是完全可加的。

       本小节用事实表sales_order_fact的订单金额order_amount度量对完全可加性进行说明。我将通过沿着所有维和其他维的组合进行查询事实表sales_order_fact,来说明这个度量是完全可加的。你可以用这种查询方式对任何度量进行测试。

       你可以用列表3-1的脚本来添加数据记录。该脚本往order_dim表插入10条记录,往date_dim表插入1条记录,往sales_order_fact插入10条记录。

列表3-1: 为证明完全可加度量插入数据

/*****************************************************************/
/*                                                               */
/* additive_data.sql                                             */
/*                                                               */
/*****************************************************************/
 
USE dw;
 
INSERT INTO order_dim VALUES
  (NULL, 1, CURRENT_DATE, '9999-12-31')
, (NULL, 2, CURRENT_DATE, '9999-12-31')
, (NULL, 3, CURRENT_DATE, '9999-12-31')
, (NULL, 4, CURRENT_DATE, '9999-12-31')
, (NULL, 5, CURRENT_DATE, '9999-12-31')
, (NULL, 6, CURRENT_DATE, '9999-12-31')
, (NULL, 7, CURRENT_DATE, '9999-12-31')
, (NULL, 8, CURRENT_DATE, '9999-12-31')
, (NULL, 9, CURRENT_DATE, '9999-12-31')
, (NULL, 10, CURRENT_DATE, '9999-12-31')
 
INSERT INTO date_dim VALUES
  (NULL, '2005-10-31', 'October', 10, 4, 2005, CURRENT_DATE,
  '9999-12-31')
; 
 
INSERT INTO sales_order_fact VALUES
  (1, 1, 2, 1, 1000)
, (2, 2, 3, 1, 1000)
, (3, 3, 4, 1, 4000)
, (4, 4, 2, 1, 4000)
, (5, 5, 3, 1, 6000)
, (6, 1, 4, 1, 6000)
, (7, 2, 2, 1, 8000)
, (8, 3, 3, 1, 8000)
, (9, 4, 4, 1, 10000)
, (10, 5, 2, 1, 10000)
;
 
/* end of script              

                                 */

 

在你的mysql控制终端上键入如下所示的该脚本的全路径名称

,来运行该脚本:

mysql> \. c:\mysql\scripts\additive_data.sql

回车后,在你的控制台上将显示如下信息:

Database changed

Query OK, 10 rows affected (0.26 sec)

Records: 10  Duplicates: 0  Warnings: 0

 

Query OK, 1 row affected (0.09 sec)

 

Query OK, 10 rows affected (0.11 sec)

Records: 10  Duplicates: 0  Warnings: 0

 

测试完全可加性

       如果所有的查询结果都是一样的,则订单金额的度量是完全可加的。为了验证订单金额的完全可加性,我们使用列表3-2,3-3,3-4,3-5中所列的查询。我们将验证,所有这四种的查询都将得到一个值为58,000的订单总额。

       第一个查询,列表3-2中的across_all_dimensions.sql 脚本,沿着所有的维对order_amounts字段累加求和(也就是选择所有的维,对order_amounts值累加)。

 

列表3-2 沿着所有的维查询

/*****************************************************************/
/*                                                               */
/* across_all_dimensions.sql                                     */
/*                                                               */
/*****************************************************************/
 
USE dw;
 
SELECT SUM (order_amount) sum_of_order_amount
FROM sales order fact a
;
 
/* end of script <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> */</span>

用如下命令运行该脚本。

mysql> \. c:\mysql\scripts\across_all_dimensions.sql

你将看到:

Database changed

+---------------------+

| sum_of_order_amount |

+---------------------+

|            58000.00 |

+---------------------+

1 row in set (0.04 sec)

       第二个查询,是列表3-3所示的across_date_product_order.sql 脚本。沿着日期,产品,订单类型维对order_amount值进行累加(只选择客户维累加order_amount值)。

列表3-3:沿着时间,产品,订单类型维查询。

/**********************************************************************/
/*                                                                    */
/* across_date_product_order.sql                                      */
/*                                                                    */
/**********************************************************************/
 
USE dw;
 
SELECT
  customer_number
, SUM (order_amount) sum_of_order_amount
FROM
  sales_order_fact a
, customer_dim b
WHERE
    a.customer_sk = b.customer_sk
GROUP BY
  customer_number
;
 
/* end of script

用如下命令运行列表3-3脚本。

 

mysql> \. c:\mysql\scripts\across_date_product.sql
 

结果如下所示:

The result is as follows.

Database changed

+-----------------------+----------------------------+

| customer_number  | sum_of_order_amount |

+-----------------------+---------------------------+

|               1 |             7000.00 |

|               2 |             9000.00 |

|               3 |            12000.00 |

|               4 |            14000.00 |

|               5 |            16000.00 |

+-----------------------+----------------------------+

5 rows in set (0.10 sec)

所有订单总计累加的总额是:7,000+9,000+12,000+14,000+16,000=58,000.

       第三个查询,是列表3-4所列的across_date_customer_order.sql脚本,它将沿着日期,客户,订单维对订单值进行累加求和。

列表3-4 沿着日期,客户,订单维的查询

/*****************************************************************/
/*                                                               */
/* across_date_customer_order.sql                                */
/*                                                               */
/*****************************************************************/
 
USE dw;
 
SELECT
  product_code
, SUM (order_amount) sum_of_order_amount
FROM
  sales_order_fact a
, product_dim b
WHERE
    a.product_sk = b.product_sk
GROUP BY
  product_code
;
/* end of script                                                 */


你可以用如下命令运行该脚本:

mysql> \. c:\mysql\scripts\across_date_customer.sql

结果如下:

Database changed

+---------------+----------------------+

|  product_code  |  sum_of_order_amount |

+--------------------+------------------------------+

|             1 |             15000.00 |

|             2 |             23000.00 |

|             3 |             20000.00 |

+--------------------+------------------------------+

3 rows in set (0.09 sec)

同样的,这个查询得到了订单金额的累加总和是58,000 (15,000+23,000+20,000).

第四个查询,是列表3-5所列的across_date_order.sql脚本,沿着日期,订单维对订单总额进行累加求和。

列表3-5 沿着日期,订单维的查询

/*****************************************************************/
/*                                                               */
/* across_date_order.sql                                         */
/*                                                               */
/*****************************************************************/
 
USE dw;
 
SELECT
  customer_number
, product_code
, SUM (order_amount) sum_of_order_amount
FROM
  sales_order_fact a
, customer_dim b
, product_dim c
WHERE
    a.customer_sk = b.customer_sk
AND a.product_sk = c.product_sk
GROUP BY
  customer_number
, product_code
/* end of script  


用如下命令运行该脚本

mysql> \. c:\mysql\scripts\across_date.sql

你将在你的控制台界面上看到:

Database changed

+-----------------------+--------------------+---------------------------+

| customer_number  | product_code  | sum_of_order_amount |

+-----------------------+-------------------+----------------------------+

|               1 |            2 |             1000.00 |

|               1 |            3 |             6000.00 |

|               2 |            1 |             1000.00 |

|               2 |            2 |             8000.00 |

|               3 |            1 |             8000.00 |

|               3 |            3 |             4000.00 |

|               4 |            2 |             4000.00 |

|               4 |            3 |            10000.00 |

|               5 |            1 |             6000.00 |

|               5 |            2 |            10000.00 |

+-----------------------+-------------------+----------------------------+

10 rows in set (0.03 sec)

累加求和的总值再次等于:

58,000 (1,000+6,000+1,000+8,000+8,000+4,000+4,000+10,000+6,000+10,000).

       所有四个查询得到相同的总计值(58,000),可以确定,该度量是完全可加的。

 

小结

       本章你学习了度量的可加性。也证明了sales_order_fact 表中order_amount度量是完全可加的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL多维数据仓库指南是一本关于如何使用MySQL构建多维数据仓库指南多维数据仓库是一种用于存储和分析大量事务数据的数据库结构。它以多维形式组织数据,使得用户可以更容易地进行数据分析和决策支持。 这本指南将从基础的概念开始介绍,帮助读者了解多维数据仓库的原理和优势。然后,它将详细介绍如何在MySQL中创建和管理多维数据仓库。 首先,指南将介绍如何设计和建立多维数据模型。它将介绍维度、事实表和维度表的概念,以及它们之间的关系。然后,它将介绍如何在MySQL中创建表和定义表之间的关系。 接下来,指南将详细介绍如何加载和更新多维数据仓库。它将介绍不同的加载方法,例如全量加载和增量加载,并说明如何在MySQL中使用ETL(Extract, Transform, Load)工具来实现数据加载。 然后,指南将介绍如何查询和分析多维数据仓库。它将介绍如何使用MySQL的SQL查询语言来进行多维分析,例如使用聚合函数、分组和排序。此外,它还将介绍如何使用OLAP(联机分析处理)工具来进行更高级的多维分析。 最后,指南将介绍如何优化和管理多维数据仓库。它将介绍如何使用索引、分区和缓存来提高查询性能,以及如何备份和恢复数据。 总的来说,MySQL多维数据仓库指南是一本全面介绍如何使用MySQL构建和管理多维数据仓库指南。无论是初学者还是有经验的数据库开发人员,都能从中学到很多有关多维数据分析的知识和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值