FocusBI:地产分析&雪花模型

微信公众号:FocusBI
关注可了解更多的商业智能、数据仓库、数据库开发、爬虫知识及沪深股市数据推送。问题或建议,请关注公众号发送消息留言;
如果你觉得FocusBI对你有帮助,欢迎转发朋友圈或在文章末尾点赞[1]

在《租房分析&星型模型》中讲了如何创建一个星型模型的SSAS项目方案,这里我做一个雪花模型案例。雪花模型是在星型模型的基础上进行修改。

雪花模型

雪花模型其实就是把多个表合成一个维度,有减少数据沉余的作用,也易于维护和属性扩展,这里使用地产数据举例, 维度有 房间、楼栋、项目、区域、日期,其实房间、楼栋、项目、区域这些数据都是包含关系,如 房间的上一级是楼栋、楼栋的上一级是项目、项目的上一级是区域,而事实数据签约、认购、回款 是地产通用的三张表,也是明源ERP的核心。

日期维度

日期维度是任何项目都通用的维度,只要涉及到金额数量就会有按年-季-月、年-季-月-日、年-周、年天、月天、星期、旬等这些角度去看数据。那么怎样才能得到某一天是属于哪一年、哪个季度、哪个月、哪个周、那一年的某天、哪个旬、星期几?这里就用存储过程来实现,虽然SSAS提供了智能日期维度,也对财务日期做了一些修改,但是它毕竟是美国人的思维模式很难复合中国国情需要的日期,比如美国人一周的第一天是周日,而中国是周一。那么怎么来实现这个存储过程,这个存储过程可以写的比较长容易看懂如果对SQL 的日期处理比较熟悉的话只要几行就能完成不容易看懂。这里我就是用容易看懂的比较长的SQL语句来实现。

日期存储过程

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

-- =============================================

-- Author:       FocusBI

-- Create date: 20180824

-- Description:  完整的日期信息表

--=============================================

ALTERPROCEDURE [dbo].[Dim_Date]@BeginDate nvarchar(8), @EndDate nvarchar(8)

AS

BEGIN

declare @DateKey int

declare @dtEndOfDay datetime

set @dtEndOfDay =convert(datetime,cast(@BeginDate asnvarchar),120)

set @DateKey =convert(varchar,@dtEndOfDay,112)

while @dtEndOfDay <convert(datetime,cast(@EndDate asnvarchar),120)

begin

select  @DateKey as DateKey,

@dtEndOfDayasData,

YEAR(@dtEndOfDay)asYear,

casewhenMonth(@dtEndOfDay)<= 6 then‘上半年‘

else‘下半年‘endas HalfAYear,

datepart(qq,@dtEndOfDay)as  Quarter_num,

casewhendatepart(qq,@dtEndOfDay)= 1 then‘Q1‘

whendatepart(qq,@dtEndOfDay)= 2 then‘Q2‘

whendatepart(qq,@dtEndOfDay)= 3 then‘Q3‘

else‘Q4‘   endas  Quarter_EN,

casewhendatepart(qq,@dtEndOfDay)= 1 then‘一季度‘

whendatepart(qq,@dtEndOfDay)= 1 then‘二季度‘

whendatepart(qq,@dtEndOfDay)= 1 then‘三季度‘

else‘四季度‘endas Quarter_CN,

month(@dtEndOfDay)as Month_num,

casewhenmonth(@dtEndOfDay)= 1 then‘January‘

whenmonth(@dtEndOfDay)= 2 then‘February‘

whenmonth(@dtEndOfDay)= 3 then‘March‘

whenmonth(@dtEndOfDay)= 4 then‘April‘

whenmonth(@dtEndOfDay)= 5 then‘May‘

whenmonth(@dtEndOfDay)= 6 then‘June‘

whenmonth(@dtEndOfDay)= 7 then‘Jul‘

whenmonth(@dtEndOfDay)= 8 then‘August‘

whenmonth(@dtEndOfDay)= 9 then‘September‘

whenmonth(@dtEndOfDay)= 10 then‘October‘

whenmonth(@dtEndOfDay)= 11 then‘November‘

else‘December‘end Month_EN ,

casewhenmonth(@dtEndOfDay)= 1 then‘Jan‘

whenmonth(@dtEndOfDay)= 2 then‘Feb‘

whenmonth(@dtEndOfDay)= 3 then‘Mar‘

whenmonth(@dtEndOfDay)= 4 then‘Apr‘

whenmonth(@dtEndOfDay)= 5 then‘May‘

whenmonth(@dtEndOfDay)= 6 then‘Jun‘

whenmonth(@dtEndOfDay)= 7 then‘Jul‘

whenmonth(@dtEndOfDay)= 8 then‘Aug‘

whenmonth(@dtEndOfDay)= 9 then‘Sep‘

whenmonth(@dtEndOfDay)= 10 then‘Oct‘

whenmonth(@dtEndOfDay)= 11 then‘Nov‘

else‘Dec‘end Month_JX ,

casewhenmonth(@dtEndOfDay)= 1 then‘一月‘

whenmonth(@dtEndOfDay)= 2 then‘二月‘

whenmonth(@dtEndOfDay)= 3 then‘三月‘

whenmonth(@dtEndOfDay)= 4 then‘四月‘

whenmonth(@dtEndOfDay)= 5 then‘五月‘

whenmonth(@dtEndOfDay)= 6 then‘六月‘

whenmonth(@dtEndOfDay)= 7 then‘七月‘

whenmonth(@dtEndOfDay)= 8 then‘八月‘

whenmonth(@dtEndOfDay)= 9 then‘九月‘

whenmonth(@dtEndOfDay)= 10 then‘十月‘

whenmonth(@dtEndOfDay)= 11 then‘十一月‘

else‘十二月‘end Month_CN ,

day(@dtEndOfDay)as [Month_Day] ,

DATENAME(dy,@dtEndOfDay)as Year_Day,

DATENAME(wk,@dtEndOfDay)as Year_Week,

casewhenday(@dtEndOfDay)< 10 then‘上旬‘

whenday(@dtEndOfDay)> 20 then‘下旬‘

else‘中旬‘  end  as TenDays,

Datepart(dw,@dtEndOfDay)as WeekDay_num,

datename(dw,@dtEndOfDay)as WeekDay_CN,

casewhendatename(dw,@dtEndOfDay)=‘星期一‘then 1

whendatename(dw,@dtEndOfDay)=‘星期二‘then 2

whendatename(dw,@dtEndOfDay)=‘星期三‘then 3

whendatename(dw,@dtEndOfDay)=‘星期四‘then 4

whendatename(dw,@dtEndOfDay)=‘星期五‘then 5

whendatename(dw,@dtEndOfDay)=‘星期六‘then 6

else 7 endas  WeekDay_Short_CN,

casewhenDatepart(dw,@dtEndOfDay)  = 1 then‘星期一‘

whenDatepart(dw,@dtEndOfDay)  = 2 then‘星期二‘

whenDatepart(dw,@dtEndOfDay)  = 3 then‘星期三‘

whenDatepart(dw,@dtEndOfDay)  = 4 then‘星期四‘

whenDatepart(dw,@dtEndOfDay)  = 5 then‘星期五‘

whenDatepart(dw,@dtEndOfDay)  = 6 then‘星期六‘

else‘星期日‘endas WeekDay_EN,

casewhenDatepart(dw,@dtEndOfDay)= 1 then‘周末‘

whenDatepart(dw,@dtEndOfDay)= 7 then‘周末‘

else‘平时‘endas Weekend

set @dtEndOfDay = @dtEndOfDay + 1

set @DateKey =convert(varchar,@dtEndOfDay,112)

end

END

实现日期维度



在<星型模型_Dome >方案的基础上把 名字改成 <星型模型VS雪花模型_Dome>,把雪花模型跟星型模型做在一起方便对比。根据前面演示的步骤把日期表Dim_Date导入,按照步骤一步一步的完成下图的日期维度,这个type类型一定要设置成time , 如果没有设置成time 后面的MDX同比环比就不好通过层结构计算。

项目维度



导入房间、楼栋、项目、区域四个维度表建立好关系,下图地产分析就是典型的雪花模型,

在创建项目信息维度时有最为核心的一步是他们是层级关系。

地产多维数据集



原文地址:https://www.cnblogs.com/focusBI/p/9668328.html

时间: 2024-10-15 09:54:04

FocusBI:地产分析&雪花模型的相关文章

朴素、Select、Poll和Epoll网络编程模型实现和分析——朴素模型

做Linux网络开发,一般绕不开标题中几种网络编程模型.网上已有很多写的不错的分析文章,它们的基本论点是差不多的.但是我觉得他们讲的还不够详细,在一些关键论点上缺乏数据支持.所以我决定好好研究这几个模型.(转载请指明出于breaksoftware的csdn博客) 在研究这些模型前,我决定按如下步骤去做: 实现朴素模型 实现发请求的测试程序 实现Select模型,测试其效率 实现Poll模型,测试其效率 实现Epoll模型,测试其效率 分析各模型性能,分析和对比其源码 针对各模型特点,修改上述程序

《BI项目笔记》基于雪花模型的维度设计

原文:<BI项目笔记>基于雪花模型的维度设计 GBGradeCode 外键关系: 1 烟叶等级 T_GBGradeCode.I_DistinctionID=T_Distinction.I_DistinctionID 烟叶等级分为:上等烟.中等烟.下等烟.末等烟.低等烟.低次等烟.其它.下低等烟 2 分级标准 T_GBGradeCode.I_GradStanCode=T_GradeStandard.I_GradStanCode 取值为:四十二级.二十八级.自定义.其他.工艺级别 3 烟叶烤型 T

对星型模型和雪花模型的简单理解

星形模型 雪花模型 星型模型是所有维度表都是连接在一个事实表上面,雪花模型是将维度表拆分地更加详细,是多层次的. 在星型模型的维度表里面,一张维度表储存了众多存在冗余的信息,为什么冗余,在哪里冗余,我想了一个简单的例子. 如 地域维表 国家a    GDP 国家b    GDP 国家a    省份a    GDP 国家a    省份b    GDP 国家a    省份c    GDP 国家a    省份a    市级a    GDP 国家a    省份a    市级b    GDP 国家a   

第一次作业:基于Linux0.01深入源码分析进程模型

一.前言 本文主要基于Linux0.01源代码分析进程模型.Linux 0.01虽然是Linux的第一个发行版本,但是却基本具备了操作系统中最重要的组成部分,同时Linux 0.01只有8500行左右的代码,对于初学者而言学习起来比较简单一点. Linux 0.01源代码下载地址: https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/ 二.进程的定义 进程是程序执行的基本单位.(其中,进程和程序的区别:程序指的是由若干函数组成的可执

第一次作业:深入源码分析进程模型(Linux kernel 2.6.32)

1.前言 本文基于Linux 2.6.32分析其进程模型,包括进程的概念.组织.转换.调度等内容,帮助对操作系统课程及Linux相关知识的理解和学习. 附Linux Kernel 2.6.32源码下载地址: https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.gz 2.进程的概念 2.1什么是进程? 在正式开始结合源代码分析进程模型之前,我们首先需要搞清楚进程的究竟是什么. 维基百科上对于进程的定义如下:

第一次作业:基于Linux系统深入源码分析进程模型

1.前言 本文主要基于Linux 2.6源代码分析进程模型.源代码下载地址:https://elixir.bootlin.com/linux/v2.6.39/source 2.进程 定义:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 3.Linux系统进程的组织 进程是由进程控制块(PCB).程序段.数据段三部分组成. 3.1 进程控制块 进程控制块(Processing Control Block),是操作系统核心中一种数据结构

FocusBI:租房分析&amp;星型模型

微信公众号:FocusBI关注可了解更多的商业智能.数据仓库.数据库开发.爬虫知识及沪深股市数据推送.问题或建议,请关注公众号发送消息留言;如果你觉得FocusBI对你有帮助,欢迎转发朋友圈或在文章末尾点赞[1] OLAP(联机分析处理)多维数据库与关系数据库的实体关系图表示形式所显示的内容完全不同.不同之处在于,对于用于构建OLAP数据库的架构类型,提供了一个名称:星型架构和雪花架构.雪花架构是在星型架构上经过大量的变形得到的.主要区别在于架构的复杂程度,OLTP架构一般都会比OLAP架构复杂

FocusBI:租房分析可视化(网址体验)

微信公众号:FocusBI关注可了解更多的商业智能.数据仓库.数据库开发.爬虫知识及沪深股市数据推送.问题或建议,请关注公众号发送消息留言;如果你觉得FocusBI对你有帮助,欢迎转发朋友圈或在文章末尾点赞[1] 在<租房分析&星型模型>文章中已经把多维模型建立起来. 能在多维数据库中查询租房数据,但是不太直观,怎样才能让租客更加直观的选择到想租的房子,这里我选择PowerBI 作为前端可视化的工具. 复制这个网址到浏览器查看租房信息, https://app.powerbi.com/

ArcGIS GP分析-GP模型创建-缓冲区分析

一.参考资料 http://www.cnblogs.com/HPhone/archive/2012/11/05/2755974.html 二.关键步骤 1.缓冲分析数据源可以选择:点.面.线 2.构建缓冲区输入参数:创建统一投影系统的点.面和线的要素类 3.将点或面或线的要素图层拖到模型中 4.选中拖入后的椭圆标志,右键打开属性对话框 选择数据类型为:要素集(这步很关键) 5.点击“连接”,选中刚才设置属性的椭圆,一直拖向Buffer工具包,建立两种联系.进一步点击该椭圆,右键菜单上选择“模型参