安踏数据仓库实现方法介绍目前我们在安踏项目上,为安踏提供了在线业务系统,在线查询系统以及BI报表三大块,这三大块的示意图如下:生产系统A(在线业务系统)DW(数据仓库)生产系统B(在线业务系统)SSAS(在线分析系统)SSIS(ETL数据抽取与清洗)SSRS(报表展现)应用程序展现从上图我们可以看到这个体系由如下部分构成:生产系统也就是目前我们为安踏提供的分销系统,里面既有分销数据又有全国各地专卖店上传得零售数据。数据仓库数据仓库里面的数据由生产系统定期导入,数据仓库可以从多种业务系统导入数据,如从我们的分销系统导入销售和零售数据,从生产控制系统导入生产数据,从财务系统导入财务数据等。目前在安踏dw仅仅是从SSIS引擎数据从生产系统转到数据仓库是通过微软的IS工具来实现的,IS实现包括数据清洗和抽取。SSAS我们通过微软的AS来建立多个数据方块对dw中的数据做预处理,通过对数据的预处理来为客户提供各种分析报表,从这里不难看出AS报表的即时性取决于dw中数据的抽取频率。SSRS微软reportingservice报表管理服务,目前在安踏暂没有用上。应用程序展现在我们的应用程序里面增加了34类型用于展现经过AS处理后的报表数据,也可以用其它应用程序展现如excel,普科等。接下来重点对SSIS和SSAS的用法做详细的介绍.第一部分SSIS用法介绍熟悉sqlserver2000的人都清楚,在sqlserver2000中有个很好用的DTS工具,这个工具可以实现数据导入导出,执行各种脚本等功能,在sqlserver2005里面这个工具被IS数据殷勤替代了,其使用方法也跟sqlserver2000的DTS不太一样。Step1:启动SqlServerBusinessIntelligenceDevelopmentStudioStep2:新建一个IS项目选择IntegrationServices项目,输入名称,点确定。左边是:工具栏,工具栏中提供了大量的工具控件,这里简单介绍几个常用,其他的请各位自行研究。一个序列容器中可以有多个具体的任务。容易相当于是任务的组合。如:这个容器就处理了一个sql任务和一个数据流任务,两个任务之间通过箭头连接起来表示先执行哪个任务后执行哪个任务。用来对cube进行处理。执行sql命令,在这里可以自己写sql语句或者写调用存储过程。如:上图表示在192.168.10.45的antadw3数据库中执行一条语句truncatetablegarea执行IS包执行ETL数据流处理如下图所示:数据流必须包括一个数据源和一个目标,中间可以做一些特殊的处理,如字符转换,字符查找(字符查找有两个作用,一个是用来判断维度信息在维度表中是否存在,一个是用来建立事实表跟维度表之间的关联,同时通过在维度表中用自增长类型的字段作为主键,通过查找将主键字段在事实表中同时维护,然后用自增长类型的主键来作为事实表与维度表的关联可以相应的提高cube的处理效率)。需要注意的是在IS中查找是严格区分大小写的。OLEDB源的设计:首先需要设置连接管理器,如果已经有建好的连接方式,则直接选择就可以了,没有的话需要新建一个连接。数据访问模式有四种:用的比较多的是“表或视图”以及“SQL命令”,如果考虑到增量抽取则建议采用SQL命令的模式。这里用来设置需要抽取的字段清单。OLEDB目标的设计首先也是设置连接管理器,表明导入到哪个表里面。接下来设置字段对应关系错误输出栏用于对一些错误的数据进行处理。多个系列容器测试没有问题后可以保存为一个包,包保存起来后可以在sqlserver作业中调度。需要注意地方:一、为了便于以后的维护尽量将ETL任务分散在多个包中进行,这样便于后续正式运行后出现了错误好及时排查,如果把所有的任务都放在一个包中,那只要其中一个任务错了,就要对所有的任务进行检查,无疑给排错带来了很大的困难。二、包调度没有问题后要把当前的环境和相关的参数保存起来,可以用中的包配置来处理。第二部分SSAS用法介绍SSAS由两个重要的概念:维度和度量值,我们可以理解成维度就是用来描述事物属性的,如商品资料的编号,颜色,色号,规格,单位等,而度量值是用来描述事物的数量的,如某个仓库有某个商品多少库存,这个库存就是度量值。整个AS结构都是基于维度和度量值来处理的。下面简单介绍AS体系构建的过程:Step1:启动SqlServerBusinessIntelligenceDevelopmentStudio操作同ISstep1。Step2:创建一个AS项目选择AnalysisServices项目,输入名称,保存。从解决方案资源管理器中可以看出,一个AS项目由数据源,数据源视图,多维数据集,维度以及其它成员构成。其中数据源用于设置数据连接。数据源视图用于设置各种数据源表,这个表在后面用来设置维度和度量值。如上图所示:左边是数据源视图/表清单,右边是数据表之间的关系图,通过右下角的可以浏览这个关系图并定位。这些表有的是作为以后的维度表有的是作为事实表,在维度表和事实表之间需要像sqlserver里面一样维护表间关系。数据源和数据源视图设置好后,需要建立一个多维数据集。在多维数据集栏目上点右键选择新建多维数据集,出来多维数据集创建向导。直接点下一步,按照默认操作即可。如果有多个数据源视图的话,选择需要的数据源视图即可。选择那些是事实表那些是维度表如果有现成的维度表和事实表则可以选择现有的维度表和事实表接下来在这里给多维数据集命名,同时可以预览一下那些是维度那些是度量值。双击刚才建立好的cube,就可以对cube进行细微的调整,包括修改维度和度量值组。将所有维度和度量值组都调整好后,把整个维度处理一下就可以直接浏览数据了!这个就是在AS里面预览的效果。这些全部处理完后就可以用RS或者我们程序的34类型模板展示了!第三部分34类型设置方法34类型使用的前提条件:1.中间层需要2007年5月18号之后的版本。2.中间层服务器需要安装msxml6.msi和SQLServer2005_ASOLEDB9.msi数据访问驱动程序。3.前段程序319版本设置方法:1.在gsystemcontrol表中增加一栏,ParamID=9001,ParamSet=Provider=MSOLAP.3;Password=*****;PersistSecurityInfo=True;UserID=drp\victop;InitialCatalog=AntaCube;DataSource=192.168.10.45其中password处设置windows登录密码,userid设置为BI服务器的登录用户名,采用BI服务器机器名\用户名的方式来设置,InitialCatalog设置AS数据库名称,DataSource设置BI服务器地址。2.9801以及9802设置9801增加一个功能号,主表设置为多维数据集名称即可。9802设置:在9802中增加了两个字段dimname,dimlowname分别对应上图的维度和维度层次。然后在表体增加相应的维度成员和度量值,如果是维度成员则维度一栏填写是哪个维度表,维度层次一栏填写维度表中具体的成员。如果是度量值则只需要在维度层次中写入度量值的名称即可(因为在一个cube中度量值是不允许重复的)。对于普通的报表表头表体都这样设置就可以了。下面将重点介绍进销存报表的实现方法:因为进销存报表是需要通过计算来实现的,而用多维数据集的计算列虽然可以实现进销存报表,但是速度非常慢,因此我们程序用我们传统的方法来实现进销存报表,具体的思路是:取上个期间的期末余额,取本期间第一天到开始日期前一天之间的发生额,得出开始日期的期初,再取开始日期到结束日期之间的发生额,最后算出结束日期的期末余额,在结构上需要在期间表上面增加一个字段用于存放下个期间的第一天的日期,这样便于程序判断和取数。在9802种设计的时候需要注意:期初余额的字段要写成期间表的期末余额字段,并且要求字段id跟cube中的id一样,同时将ft的值设置为1,对于发生额的ft需要设置成2同时要求字段id跟cube中的id一致,对于期末余额ft要设置为3,同时在自定义公式中设置“期初字段;借方字段;贷方字段”,程序根据这个公式计算出期末余额,而对于字段id则不作明确要求。以上所描述的只是一个简单的方法论介绍,而具体的实现还有不少细节需要研究,限于本人研究的深度和时间关系,在此不作太多的介绍,写这个简单的说明文档仅仅是用作引路石,希望可以起到抛砖引玉的作用。