iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Quick BI 的模型设计与生成SQL原理剖析
  • 180
分享到

Quick BI 的模型设计与生成SQL原理剖析

2024-04-02 19:04:59 180人浏览 独家记忆
摘要

Quick BI 的模型设计与生成sql原理剖析一、  摘要随着互联网的高速发展,数据量呈现井喷式的增长,如何来分析和使用这些数据,使数据产生商业价值,已经变得越来越重要。值得高兴的是,当前越来越

Quick BI 的模型设计与生成sql原理剖析

一、  摘要

随着互联网的高速发展,数据量呈现井喷式的增长,如何来分析和使用这些数据,使数据产生商业价值,已经变得越来越重要。值得高兴的是,当前越来越多的人已经意识到了用数据分析决定商业策略的重要性,也都在进行着各行各业的数据分析。众所周知数据分析的核心是数据,为了更容易的分析数据,数据模型的设计需要遵循一定的规范。当前最流行的联机分析处理(OLAP)的规范为维度建模规范。本文介绍Quick BI如何进行维度建模,基于维度模型如何来自动化的生成分析查询的SQL语句,从而使数据分析变得更容易。

 

关键字: Quick BI、OLAP、维度建模、SQL

 

二、  维度模型的分类

OLAP(On-line Analytical Processing,联机分析处理)根据存储数据的方式不同可以分为ROLAP、MOLAP、HOLAP。ROLAP表示基于关系数据库存储的OLAP实现(Relational OLAP),以关系数据库为核心,以关系型结构进行多维数据的表示和存储;MOLAP表示基于多维数据存储的OLAP实现(Multidimensional OLAP);HOLAP表示基于混合数据存储的OLAP实现(Hybrid OLAP),如低层用关系型数据库存储,高层是多维数组存储。接下来主要介绍基于关系型数据库的ROLAP的建模原理。

ROLAP将多维数据库中的表分为两类:事实表和维度表。事实表用于存储维度关键字和数值类型的事实数据,一般是围绕业务过程进行设计,例如:销售事实表,一般来存储用户在什么时间、地点购买了产品,销量和销售额等信息。维度表用于存储维度的详细数据,例如销售事实表中存储了产品维度的ID,产品维度表中存储产品的名称、品牌信息,两者通过产品ID进行关联。

ROLAP根据事实表、维度表间的关系,又可分为星型模型(Star Schema)、雪花模型(Snowflake Schema)。

1.    星型模型

星型模型它由事实表(FactTable)和维表(DimensionTable)组成。事实表中的维度外键分别与相对应的维表中的主键相关联,关联之后由于形状看起来像是一个星星,所以形象的称为星型模型。以下示例为星型模型:其中sales_fact_1997为事实表,存储客户在某个时间、某个商店、购买了某个产品,购买量和销售额的信息,记录的是一个下单过程。事实表sales_fact_1997通过外键product_id、customer_id、time_id、store_id分别与维度表product(产品维表)、customer(客户维表)、time_by_day(时间维表)、store(商店维表)相关联,关联关系为多对一关联。

 

Quick BI 的模型设计与生成SQL原理剖析

2.    雪花模型

雪花模型是当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像一个雪花,故称雪花模型。下面示例product(产品)维度表与product_class(产品类别)维度表通过product_class_id相关联,关联关系为多对一。product_class没有与sales_fact_1997事实表直接关联。

 

Quick BI 的模型设计与生成SQL原理剖析

三、  基于ROLAP模型的SQL生成原理

模型构建好了后,接下来的重点就是针对分析需求来生成满足分析需要的SQL语句,然后将SQL语句下发到DB中来查询数据,返回分析结果。下面通过具体的需求场景来介绍如何生成SQL语句。

1.    基于星型模型(或雪花模型)生成SQL

需求场景:

按日期、产品查看总的销售额、销售量,日期限定在1997年,总销售额限定在1000元以上,结果按照总的销售额倒序排列,看前5个。

Quick BI 的模型设计与生成SQL原理剖析

生成SQL思路

1.        分析需要用到的字段和表,目标是明确查询需要用到哪些表、表间关系、表上分组字段、聚合字段,确定SQL中select和from信息。

2.        分析筛选条件,目标是明确SQL中where中需过滤的值。

3.        分析分组维度,目标是明确SQL中group by的字段。

4.        分析聚合后的筛选条件,目标是明确having中需要过滤的值。

5.        分析需要排序的列和排序类型(升序还是降序)。

6.        生成结果个数限制条件

7.        根据以上信息生成查询SQL:

select 分组字段、聚合字段 from 表(含表关联) where 筛选条件 group by 分组维度 having 聚合后的筛选条件 order by 排序信息 结果条数限制。

生成SQL

按照上面的步骤,和本例子中的需求,分析查询中的关键信息(以下步骤与生成SQL思路中的步骤一一对应)

1.        用到的分组字段:the_date、product_name, 其中分组字段the_date为日粒度,需处理为年粒度:DATE_FORMAT(`the_date` , '%Y')

聚合字段:store_sales、unit_sales,聚合方式都为sum;

用到的表:sales_fact_1997、product、time_by_day;

表间关系:sales_fact_1997. product_id= product. product_id

   sales_fact_1997. time_id= time_by_day .time_id

2.        筛选条件:

the_date`= STR_TO_DATE('1997-01-01 00:00:00' ,'%Y-%m-%d %H:%i:%s')

3.        分组维度:DATE_FORMAT(`the_date` , '%Y')、product_name

4.        聚合后的筛选条件:SUM(`store_sales`) > 1000

5.        排序:order by 聚合后的别名 desc

6.        限制结果个数:limit 0,5

7.        生成的SQL如下

Quick BI 的模型设计与生成SQL原理剖析

 

四、  附录-用到的表

下面罗列出以上示例中用到的表的建表语句,需要在 Mysql数据库下执行,其他类型数据库需要做一些调整。

1.        sales_fact_1997表

Quick BI 的模型设计与生成SQL原理剖析


2.        product表

Quick BI 的模型设计与生成SQL原理剖析

 

3.        product_class表

Quick BI 的模型设计与生成SQL原理剖析

 

4.        time_by_day表

Quick BI 的模型设计与生成SQL原理剖析


5.        customer表

Quick BI 的模型设计与生成SQL原理剖析


6.        store表

 Quick BI 的模型设计与生成SQL原理剖析


您可能感兴趣的文档:

--结束END--

本文标题: Quick BI 的模型设计与生成SQL原理剖析

本文链接: https://www.lsjlt.com/news/52814.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Quick BI 的模型设计与生成SQL原理剖析
    Quick BI 的模型设计与生成SQL原理剖析一、  摘要随着互联网的高速发展,数据量呈现井喷式的增长,如何来分析和使用这些数据,使数据产生商业价值,已经变得越来越重要。值得高兴的是,当前越来越...
    99+
    2024-04-02
  • JavaScript 原型模式的深入剖析:从原理到应用
    原型模式是 JavaScript 中一种强大的机制,允许您创建和扩展对象。通过理解原型链的概念和原型方法的使用,您可以编写出更强大、更灵活的代码。 原型链 每个 JavaScript 对象都有一个原型对象,原型对象也是一个 JavaSc...
    99+
    2024-02-06
    JavaScript 原型 原型链 原型方法 继承
  • 详解Java单例模式的实现与原理剖析
    目录一、什么是单例模式二、哪些地方用到了单例模式三、单例模式的优缺点优点缺点四、手写单例模式饿汉式枚举饿汉式DCL懒汉式双检锁懒汉式内部类懒汉式小结一、什么是单例模式 单例模式(Si...
    99+
    2024-04-02
  • 怎么理解Java设计模式的原型模式
    本篇内容主要讲解“怎么理解Java设计模式的原型模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Java设计模式的原型模式”吧!一、前言单例模式可以避免重复创建消耗资源的对象,但是却不...
    99+
    2023-06-25
  • 深入剖析Golang Facade模式的内部机制与运行原理
    Golang中的Facade模式是一种结构型设计模式,用于隐藏系统复杂性并提供一个简单的接口供客户端使用。它通过为客户端提供一个统一...
    99+
    2023-10-08
    Golang
  • Golang Facade模式的设计思想与实现原理
    Golang中的Facade模式是一种结构型设计模式,它提供了一个统一的接口,用于隐藏子系统的复杂性,使得子系统更容易使用。Faca...
    99+
    2023-10-08
    Golang
  • 类和原型的设计模式之复制与委托差异
    目录小引“类”设计模式举个例子:“原型”设计模式小结小引 JavaScript 技能持有者一定有问过这个问题: JavaScript ...
    99+
    2024-04-02
  • SAP CRM调查问卷的模型设计原理是什么
    这篇文章主要讲解了“SAP CRM调查问卷的模型设计原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SAP CRM调查问卷的模型设计原理是什么”吧!看这个名为Jerry's ...
    99+
    2023-06-02
  • 基于PHP+MySQL学生成绩管理系统的设计与实现
    基于PHP的学生成绩管理系统主要高校内部提供服务,系统分为管理员,教师用户和学生用户三部分。 在基于PHP的学生成绩管理系统中分为管理员用户,教师用户和学生用户三部分,其中管理员用户主要是用来管理教师...
    99+
    2023-09-25
    php 开发语言
  • C语言详细分析贪心策略中最小生成树的Prime算法设计与实现
    目录浅析最小生成树Prime算法思想此算法核心部分结构体的选择实现思路构造实例构造过程代码详解调试结果总结浅析最小生成树 设G=(V,E)是无向连通带权图。E中每条边(v,w)的权为...
    99+
    2024-04-02
  • 如何设计MySQL表结构来支持在线考试系统的试卷生成与管理?
    如何设计MySQL表结构来支持在线考试系统的试卷生成与管理?在设计MySQL表结构来支持在线考试系统的试卷生成与管理之前,我们需要先了解在线考试系统的基本需求和功能。在线考试系统一般包括用户管理、试卷管理、题目管理和考试管理等模块。本文将重...
    99+
    2023-10-31
    关键词:MySQL 表结构 在线考试系统
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作