一步一步学习ETL

合集下载

etl的方法

etl的方法

etl的方法ETL的方法ETL(Extract-Transform-Load)是一种常用的数据处理方法,它用于从源系统中提取数据,经过转换处理后,加载到目标系统中。

在数据仓库和数据集成中,ETL起着至关重要的作用。

本文将介绍ETL 的方法,并重点讨论其三个步骤:数据提取、数据转换和数据加载。

一、数据提取数据提取是ETL的第一步,目的是从源系统中获取所需的数据。

在数据提取过程中,需要考虑以下几个方面:1. 数据源:数据源可以是各种类型的数据库、文件、API等,根据实际情况选择合适的数据源。

在选择数据源时,要考虑数据的可靠性、完整性和实时性。

2. 提取方法:根据数据源的类型和结构,选择合适的提取方法。

常用的提取方法包括全量提取和增量提取。

全量提取是指每次都提取全部数据,适用于数据量较小或者需要全量数据的情况;增量提取是指只提取更新的数据,适用于数据量较大或者需要实时数据的情况。

3. 数据抽取:根据需求,选择合适的数据抽取方式。

常见的数据抽取方式包括批量抽取和实时抽取。

批量抽取是指按照一定的时间间隔或者触发条件,批量提取数据;实时抽取是指在数据发生变化时立即提取数据。

根据实际情况选择合适的数据抽取方式。

二、数据转换数据转换是ETL的第二步,目的是对提取的数据进行清洗、整合和转换,以满足目标系统的需求。

在数据转换过程中,需要考虑以下几个方面:1. 数据清洗:对提取的数据进行清洗,去除重复数据、空值和错误数据,保证数据的质量和准确性。

2. 数据整合:对多个数据源提取的数据进行整合,统一数据格式和结构,方便后续的处理和分析。

3. 数据转换:根据目标系统的需求,对数据进行转换。

常见的数据转换操作包括数据格式转换、数据字段映射、数据计算和数据合并等。

三、数据加载数据加载是ETL的最后一步,目的是将经过转换处理后的数据加载到目标系统中。

在数据加载过程中,需要考虑以下几个方面:1. 目标系统:选择合适的目标系统,将数据加载到目标系统中。

etl的学习计划

etl的学习计划

etl的学习计划第一阶段:了解ETL的基本概念和原理阶段目标:了解ETL在数据处理中的作用和意义,理解ETL的基本工作流程和原理。

1.学习内容:- 什么是ETL,为什么它在数据处理中如此重要?- ETL的基本工作流程是什么?数据抽取、数据转换、数据加载各自的作用是什么?- ETL在数据仓库和商业智能系统中的应用场景和优势。

2.学习方法:- 阅读相关书籍和资料,如《The Data Warehouse Toolkit》、《ETL设计模式》等。

- 关注知乎、CSDN等平台上的数据处理相关话题和文章,学习行业内的实践经验和案例。

3.学习时间:1周第二阶段:掌握ETL的常用工具和技术阶段目标:学习掌握ETL常用工具和技术,包括数据抽取工具、数据转换工具和数据加载工具,如Informatica、Talend、SSIS等,以及相关的数据预处理和清洗技术。

1.学习内容:- Informatica、Talend、SSIS等常用ETL工具的特点和适用场景。

- 数据抽取的常用技术和方法,如增量抽取、全量抽取等。

- 数据转换的常用技术和方法,如数据清洗、数据整合等。

- 数据加载的常用技术和方法,如事实表、维度表的设计和加载方式。

2.学习方法:- 在线学习平台上学习相关课程,如Coursera、Udemy等。

- 下载安装相关ETL工具,参考官方文档学习和实践。

- 参与行业内的技术交流和讨论,了解实际项目中的ETL工具和技术选择。

3.学习时间:2周第三阶段:实际操作和项目实践阶段目标:通过实际操作和项目实践,熟练掌握ETL工具和技术,能够独立完成数据抽取、转换和加载的任务。

1.学习内容:- 根据项目需求,使用ETL工具实现数据抽取、转换和加载。

- 学习和掌握数据预处理和清洗技术,如数据去重、数据脏值处理等。

- 学习并掌握ETL工具的性能优化技术,如并行抽取、增量加载等。

2.学习方法:- 参与实际项目,积累实践经验和技巧。

ETL过程及数据库操作分析

ETL过程及数据库操作分析

ETL过程及数据库操作分析ETL(Extract, Transform, Load)是指从各种数据源中提取数据,经过转换处理后加载到目标数据库中的过程。

它是数据仓库建设中的重要环节,目的是将各个数据源中的数据整合起来,为数据分析和决策提供一个统一的数据源。

在实际操作中,ETL过程通常包括数据提取、数据清洗、数据转换和数据加载四个步骤。

首先,数据提取是将各种数据源中的数据提取出来的过程。

数据源可以是关系型数据库、文件、日志、网络等,常见的数据提取方法有数据库连接、文件读取、网络接口等。

在数据提取过程中,需要指定提取的数据范围和条件,确保只提取到需要的数据,并避免数据的重复提取。

其次,数据清洗是对提取出来的数据进行清洗和处理的过程。

数据清洗的目的是去除无效的、重复的或者错误的数据,保证数据的准确性和完整性。

数据清洗的方法包括数据去重、数据过滤、数据转换等,可以利用各种数据清洗工具和技术来实现。

数据清洗是ETL过程中非常重要的一步,对后续的数据处理和分析具有重要影响。

然后,数据转换是将清洗后的数据进行转换和整合的过程。

数据转换的目的是将不同数据源中的数据整合起来,通过数据格式的统一和数据字段的映射,使得不同数据源中的数据能够被统一处理和分析。

数据转换的方法包括数据格式转换、数据字段映射、数据合并等,可以利用各种ETL工具和脚本语言来实现。

数据转换的过程中,还需要对数据进行质量检查和校验,确保转换后的数据的准确性和一致性。

最后,数据加载是将转换后的数据加载到目标数据库中的过程。

目标数据库可以是关系型数据库、数据仓库等,需要根据实际需求选择合适的数据库技术和工具。

数据加载的方法包括全量加载和增量加载,全量加载是将所有数据加载到目标数据库中,增量加载是根据增量数据加载策略,只加载发生变化的数据。

数据加载的过程中,还需要考虑数据的索引和分区等技术,以提高数据的查询和处理效率。

在数据库操作方面,ETL过程通常涉及到两种类型的数据库操作,一种是源数据库中的操作,另一种是目标数据库中的操作。

etl流程

etl流程

etl流程ETL(Extract-Transform-Load)是一种数据处理过程,用于将不同格式的数据从源系统中抽取,经过转换处理后加载到目标系统中。

这种流程是数据仓库和商业智能系统中最常用的一种方法,用于保证数据的质量和一致性。

本文将详细介绍一个典型的ETL流程。

首先,ETL流程的第一步是数据的抽取。

数据源可以是各种各样的系统,比如关系数据库、ERP系统、CRM系统、网站日志等。

ETL工具通过连接到数据源,使用SQL查询或者API调用等方式,将需要的数据从源系统中抽取出来。

抽取的数据可以是全量数据,也可以是增量数据,具体根据需求而定。

接下来,抽取的数据需要进行转换处理。

这包括数据清洗、数据整合、数据变换等步骤。

数据清洗主要是处理一些脏数据,比如缺失值、重复值、不一致的格式等等,以确保数据的正确性和一致性。

数据整合是将不同数据源的数据进行合并,比如将客户信息和订单信息进行关联,以便分析客户的购买行为。

数据变换是将数据从源系统的格式转换成目标系统的格式,比如将日期格式转换成统一的标准格式。

在数据转换处理完成后,接下来是将数据加载到目标系统中。

目标系统可以是数据仓库、数据湖、数据集市等,它们用于存储和管理ETL流程中的处理结果。

数据加载有两种方式,一种是全量加载,即将整个数据集一次性加载到目标系统中;另一种是增量加载,即将新抽取的数据与目标系统中已存在的数据进行合并,更新或追加。

在数据加载完成后,还需要进行数据质量的检查。

这包括数据的完整性、准确性、一致性等方面的检查。

数据完整性主要是检查数据是否有缺失或空值;数据准确性是检查数据是否与源系统的数据保持一致;数据一致性是检查数据是否符合事先定义的规则和约束。

如果发现数据质量问题,需要及时处理,以确保数据的可靠性和可用性。

最后,ETL流程还需要进行监控和维护。

监控是实时监测ETL流程的执行情况,比如数据抽取的速度、数据转换的效率、数据加载的成功率等,以便及时发现和解决问题。

ETL初学入门

ETL初学入门

ETL 学习之一收藏ETL有时候显得很神秘,其实大部分项目都有用到,只要有报表展示,就是一个ETL过程。

首先,我们来了解最基本的定义:嗯,也有人将ETL简单称为数据抽取。

至少在未学习之前,领导告诉我的是,你需要做一个数据抽取的工具。

其实呢,抽取是ETL中的关键环节,顾名思义,也就将数据从不同的数据源中抓取(复制)出来。

太简单了!上面的解释无首无尾,有点象能让你吃饱的第七个烧饼,仔细一想,抽取是不可能单独存在,我们需要将与之关联的一些其它环节拿出来。

于是,得到ETL的定义:将数据抽取(Extract)、转换(Transform)、清洗(Cleansing)、装载(Load)的过程。

好的,既然到了这一个层次,我们完全会进一步展开联想,引出上面这个抽象事件的前因后果,抽取的源在哪里?装载的目的又是什么呢?抽取源:大多数情况下,可以认为是关系数据库,专业一点,就是事务处理系统(OLTP)。

当然,广义一点,可能会是其它数据库或者是文件系统。

目的地:OK,我们希望是数据仓库。

数据仓库是啥?在学习之前,它对我来说是个抽象的怪物,看过一些简单的资料之后,才了解这个怪物一点都不怪。

堆积用来分析的数据的仓库。

是了,是用来分析的,于是,它区别于OLTP中的数据存储。

然后,我们来看看为什么要ETL?在我看来,有两个原因。

一:性能将需要分析的数据从OLTP中抽离出来,使分析和事务处理不冲突。

咦?这不是数据仓库的效果吗?是了,数据仓库,大多数情况下,也就是通过ETL工具来生成地。

二:控制用户可以完全控制从OLTP中抽离出来的数据,拥有了数据,也就拥有了一切。

嗯,OLAP分析,数据挖掘等等等……。

本文来自CSDN博客,转载请标明出处:/laszloyu/archive/2009/04/13/4068111.aspxETL学习之二收藏ETL为数据仓库服务,数据仓库用于数据分析,数据分析属于BI系统的要干的事儿。

一般中/小型ERP系统都会有不成熟的BI系统,为啥叫做不成熟?因为它们或者有报表分析功能,但不具有OLAP(在线分析),或者有OLAP,但却没有数据挖掘和深度分析。

数据仓库设计与ETL流程实操教程

数据仓库设计与ETL流程实操教程

数据仓库设计与ETL流程实操教程数据仓库(Data Warehouse)是一个专门用来存储和管理数据的系统,主要用于支持决策分析和业务报告。

在企业中,数据仓库的设计和ETL(抽取、转换、加载)流程是非常重要的环节。

本文将详细介绍数据仓库的设计步骤和ETL流程的实操教程。

一、数据仓库设计步骤1.确定业务需求:在进行数据仓库设计之前,首先需要明确业务需求。

与业务相关的问题是什么?需要哪些数据来解决这些问题?这些问题对应的维度和指标是什么?明确业务需求是数据仓库设计的基础。

2.数据源分析:分析企业的各个数据源,确定需要从哪些数据源进行数据抽取。

了解数据源的结构、规模和质量,为后续的ETL流程做好准备。

3.数据建模:在数据仓库设计中,数据建模是一个关键的环节。

可以采用维度建模或者企业级建模的方法。

维度建模按照事实和维度进行建模,可以支持灵活的查询和分析;而企业级建模更加注重数据的整合和一致性。

根据具体的业务需求,确定合适的数据建模方法。

4.抽取规则定义:在设计ETL流程之前,需要定义数据抽取的规则。

数据抽取规则包括数据抽取的频率、抽取的条件和抽取的方式等。

根据业务需求和数据源的特点,制定合理的抽取规则。

5.数据清洗和转换:在ETL流程中,数据清洗和转换是非常重要的环节。

在数据抽取后,对数据进行清洗和转换,包括去除重复数据、处理缺失值、处理异常值以及数据格式转换等。

通过数据清洗和转换,可以保证数据的质量和一致性。

6.数据加载:数据加载是将经过处理的数据加载到数据仓库中的过程。

在数据加载时,可以根据需要选择全量加载或者增量加载的方式。

全量加载会将整个数据源的数据加载到数据仓库中;而增量加载只会加载新增或者变更的数据。

7.数据质量检查:在完成数据加载之后,需要对数据进行质量检查。

通过数据质量检查,可以发现数据仓库中可能存在的问题,如数据不一致、数据丢失等。

根据数据质量检查的结果,及时进行修复和调整。

二、ETL流程实操教程1.数据抽取:根据已定义的抽取规则,从数据源中抽取数据。

etl开发流程和规范 (3)

etl开发流程和规范 (3)

etl开发流程和规范ETL(Extract, Transform, Load)是一种常见的数据处理方式,用于将数据从原始数据源提取、转换和加载到目标数据仓库或目标系统中。

下面是一般的ETL开发流程和规范:1. 需求分析阶段:- 确定数据源:确定原始数据的来源和格式,包括数据库、文件、API等。

- 确定需求:明确提取、转换和加载的具体需求,包括数据清洗、数据转换和数据加载的步骤。

2. 数据提取阶段:- 选择合适的提取工具:例如使用SQL语句、使用ETL工具(如Informatica、SSIS等)或使用编程语言(如Python、Java等)来提取数据。

- 提取数据:根据需求从数据源中提取数据,并进行必要的数据过滤和排序。

3. 数据转换阶段:- 数据清洗和预处理:清洗和处理数据中的异常值、缺失值、重复值等。

- 数据转换:将数据进行必要的转换和映射,包括数据类型转换、数据格式转换和数据字段补充等。

- 属性计算和聚合:根据需求进行属性计算和数据聚合,生成目标数据。

4. 数据加载阶段:- 目标表设计和创建:根据需求设计目标表结构,并在数据库中创建目标表。

- 数据加载:将转换后的数据加载到目标表中,可以使用插入语句、更新语句或者使用ETL工具来加载数据。

5. 数据验证和测试阶段:- 运行数据验证脚本:编写数据验证脚本,检查目标表中的数据是否符合预期。

- 进行测试:对ETL流程进行测试,包括单元测试、集成测试和性能测试等。

6. 调度和监控阶段:- 调度ETL作业:使用调度工具(如Control-M、rflow 等)配置ETL作业的调度时间和频率。

- 监控ETL作业:监控ETL作业的运行情况,包括运行状态、运行时间和错误日志等。

7. 文档和维护阶段:- 编写文档:记录ETL开发的流程、规范和配置信息,并编写相关的用户手册。

- 维护ETL作业:定期检查和维护ETL作业,包括数据字典的更新、作业调度的调整和性能的优化等。

etl工具的使用方法(一)

etl工具的使用方法(一)

ETL工具的使用方法ETL(Extract, Transform, Load)工具是在数据仓库中广泛使用的一种工具,它能够从各种数据源中提取数据并将这些数据转换成可用的格式,最后加载到数据仓库中。

下面将详细介绍ETL工具的使用方法。

1. 选择合适的ETL工具在使用ETL工具之前,首先需要选择一款合适的工具。

常见的ETL工具包括Informatica PowerCenter、IBM InfoSphere DataStage、Microsoft SQL Server Integration Services(SSIS)等。

每款工具都有自己的特点和适用场景,需要根据具体的需求来选择合适的工具。

2. 设计数据抽取策略在使用ETL工具时,首先需要设计数据抽取策略。

这包括确定数据源、抽取的时间范围、抽取的数据量等。

根据具体的需求和业务场景,可以采用全量抽取或增量抽取的方式。

3. 配置数据连接使用ETL工具需要连接数据源和目标数据库。

在配置数据连接时,需要提供数据源的连接信息,包括数据库类型、主机地址、端口号、用户名、密码等。

同时,还需要配置目标数据库的连接信息。

4. 编写数据转换逻辑数据抽取后,需要进行数据转换。

这包括数据清洗、数据过滤、数据合并、数据格式转换等操作。

在ETL工具中,可以通过可视化的方式来设计数据转换逻辑,也可以使用SQL或脚本语言来编写复杂的转换逻辑。

5. 设计数据加载策略在数据转换完成后,需要设计数据加载策略。

这包括确定数据加载的方式,是全量加载还是增量加载,以及如何处理目标数据库中已有的数据等。

6. 调度任务配置ETL工具的调度任务,可以实现自动化的数据抽取、转换和加载过程。

这包括设置定时任务、监控任务执行情况、处理异常情况等。

7. 监控和优化在ETL工具的使用过程中,需要不断监控任务的执行情况,并对任务进行优化。

这包括优化数据抽取的性能、避免数据丢失或重复加载、优化数据转换和加载的性能等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一步一步学习SQL Server BI一步一步学习sqlserver BI--数据仓库设计因为项目还没有真正开始,但是接触BI已有半年多,手痒,这几天准备搞一个简化版本的BI项目。

一方面给刚BI入门的朋友一个参考,另外一方面也为自己的将要开始的项目做个准备,让自己能够考虑到一些项目的细节。

同时也希望对BI有研究的朋友提供一些建议和经验。

因为我们的这个案例是采用微软的sqlserver2005的BI平台开发的,所以这里先贴一张WebCast里面截来的图,这张图主要反映了采用sqlserver2005的BI项目的架构。

好了,咱们开始吧。

我说的这个项目需求很简单,因为是简化版本的么。

这是一个游戏中使用到的物品的销售分析软件。

里面包括几个概念,游戏,销售部门,物品,交易金额,交易笔数,发布单数等。

我们要做的事情就是按游戏,按部门,按物品来实现对交易金额,笔数等的数据交叉分析。

在我们这个系统里面,我们的数据颗粒度是天。

好了,既然是简化版,我们也就不用那么罗嗦,什么需求分析,分析设计都省了吧,下面直接进入数据库设计。

我们的数据库一共包括四张维度表(部门维度,游戏维度,物品维度,时间维度),一张事实表(游戏交易数据事实表)。

部门维度表游戏维度表物品维度表时间维度表交易数据事实表由于我们的这个案例比较简单,所以维度与事实表之间的关系也比较简单,是一个简单的星型架构。

这一节我们就先写到这里,下一节我将会详细的写这个项目的ETL部分。

一步一步学习sqlserver BI--ETL设计这节我们主要讲讲我的游戏交易数据分析项目的ETL(数据抽取、加载、转换)具体是怎么做的。

先来讲下源系统吧,因为我们的交易主站的服务器不是架在公司的,因此不能直接从源系统直接抽取数据了。

事实上我们已经存在一个简单的数据分析系统了,只不过这个是以前人家做的,没有采用sqlserver2005的BI平台来做,而是直接写winform程序来弄的。

原来的数据抽取是主站那边提供导出的excel文件过来,然后到我们这边,导入到我们的分析库中去。

好了,为了简便,事实上我只是在做一个demo,为以后项目做准备,所以我们抽取数据直接是从上面说的已经存在分析库中抽的,因为数据结构比较相近,所以ETL过程还是比较简单的。

先看看游戏维度表吧:首先,我们来新建一个Integration Services项目。

接着,新建一个ImportDimGamePackage.dtsx的SSIS包。

拖放一个数据流任务到控制流面板上(如图)双击数据流任务,来到数据流面板接着我们拖动OLEDB源到数据流面板上,并且双击编辑它,新建一个连接和选择要抽取数据的源数据表。

然后我们拖动一个OLEDB目标到数据流面板上,把OLEDB源和OLEDB目标连接起来,并且双击编辑,新建一个连接和选择我们要存放数据的目标表然后建立源表与目标表之间的映射。

所有的都弄好了,运行,OK,成功了。

接着部门维度和物品维度都跟这个差不多。

时间维度是我新建的,暂时我用winform写了一个日期维度生成器。

下面就讲交易数据事实表,这个比维度稍微复杂一点点。

因为源系统和目标系统数据结构很类似,所以我的ETL都是非常简单的,在实际项目中,能够有这么好的运气是不可能的,呵呵。

首先新建一个ImportFactGameTradeDataPackage.dtsx的SSIS包。

其他简单的步骤跟上面一样,我就讲讲不一样的地方。

因为我在数据库设计的时候,各个维度都用了代理键,也就是说在我们的数据仓库里面的维度和事实表的外键关联都是通过代理键的,源系统中的键我们只不过用一个字段记录了下来。

所以我们数据抽取过来的时候,要对源系统中的映射关系进行改变。

这里的关键就是我们在编辑数据流的时候,使用了一个叫做“查找”的组件。

编辑好的数据流如图:接下来我们详细讲下查找列是怎么用的,拿查找GameKey来讲把。

1。

双击查找GameKey组件,在引用表面板上面选择好我们要查找的表,在这里就是我们数据仓库表中的游戏维度表。

2。

在列面板里面建立要查找的字段跟源系统事实表的字段的映射。

3。

把查找到的列作为新列添加,并取一个唯一的别名(在后面与OLEDB目标的时候建立映射的时候,会用到这里查找到的列)。

接着其他的几个维度代理键的查找都类似,OLEDB目标的字段映射跟维度表的导入类似。

好了,今天主要介绍了简单的Sqlserver2005 Integration Services的使用,今天涉及了到里面几个概念,数据流任务,OLEDB源,OLEDB目标,查找等。

下一节,我准备写一下使用Sqlserver2005 Analysis Services建立OLAP数据库的过程。

一步一步学习sqlserverBI--多维数据库建立接着我们上节的《一步一步学习sqlserver BI--ETL设计》,现在我们的游戏交易数据分析系统的数据仓库已经建好了,并且也已经有数据了,让我们开始我们的OLAP过程吧。

在这一节中,我们主要详细的讲解使用Sqlserver2005 Analysis Service 来建立多维数据库的过程。

首先我么新建一个Analysis Services 项目,建好以后,我们将会在我们的解决方案资源管理器里面看到如下图所示的项目结构。

接着,我们新建数据源,然后根据向导一步一步点下去,完成后事实上建立了一个到数据仓库的连接串。

然后创建数据源视图,也几乎是一步一步按照向导点下去,事实上就是从数据源中选择我们需要的表到我们的数据源视图里面来。

好了,下面我们开始建立多维数据集,这也是我们今天这节的重点。

注意在这里选择时间维度表。

最后,我们把我们的多维数据库发布到我们的Sqlserver2005 Analysis Service服务器中去。

右键点击项目属性,设置我们部署的目标服务器(如下图)。

设置好以后,点击工具栏上的部署按钮,把多维数据库部署到我们的服务器中去。

部署完毕以后,我们就可以右键点击多维数据集进行浏览数据了。

因为过程比较简单,以上过程都没有怎么用文字了。

到此为止,我们的多维数据库已经建立好了,当然,如果要应用于具体项目中的话,还要修改多维数据库的很多属性。

一步一步学习sqlserver BI--应用开发(1)接着我们上次那篇《一步一步学习sqlserverBi--多维数据库建立》,现在我们多维数据库已经有了,并且里面也已经有了数据,那么赶快进入咱们程序员的主题吧。

今天我要在这个多维数据库上面开发两个应用:1。

按天统计各个部门的交易量2。

按天统计各个部门和各个游戏的交易量首先设计强类型的数据集,如下图。

按部门统计数据集按部门和游戏交叉统计数据集设计MDX语句,在数据层执行MDX,并返回CellSet在业务逻辑层把CellSet组装成我们前台需要的数据集格式/// <summary>/// 按天统计各个部门的交易数据/// </summary>/// <param name="tradeDateKey">日期的键值</param>/// <returns></returns>public CellSet Count(int tradeDateKey){StringBuilder mdxBuilder = new StringBuilder();mdxBuilder.Append("WITH MEMBER [Measures].[Total Orders Count] AS 'SUM([M easures].[Total Orders] )' ");mdxBuilder.Append(" MEMBER [Measures].[Total Amount Count] AS 'SUM([Measur es].[Total Amount])'");mdxBuilder.Append(" MEMBER [Measures].[Total Money Count] AS 'SUM([Measures].[Total Money])'");mdxBuilder.Append(" MEMBER [Measures].[Un Paid Cancel Amount Count] AS 'SU M([Measures].[Un Paid Cancel Amount])'");mdxBuilder.Append(" MEMBER [Measures].[Un Paid Cancel Money Count] AS 'SU M([Measures].[Un Paid Cancel Money])'");mdxBuilder.Append(" MEMBER [Measures].[Paid Cancel Amount Count] AS 'SUM ([Measures].[Paid Cancel Amount])'");mdxBuilder.Append(" MEMBER [Measures].[Paid Cancel Money Count] AS'SUM([M easures].[Paid Cancel Money])'");mdxBuilder.Append(" SELECT { [Measures].[Total Orders Count], [Measures].[Tota l Amount Count], [Measures].[Total Money Count], [Measures].[Un Paid Cancel Amount Coun t], [Measures].[Un Paid Cancel Money Count], [Measures].[Paid Cancel Amount Count], [Mea sures].[Paid Cancel Money Count]} ON COLUMNS,");mdxBuilder.Append(" {[Department].[Dep Code Alternate Key].Members} ON ROW S");mdxBuilder.Append(" FROM [Data Center DW]");mdxBuilder.Append(" WHERE ([Time].[TimeKey].["+tradeDateKey+"])");return DBServer.AnalysisServer.ExecuteCellset(mdxBuilder.ToString());}/// <summary>/// 按天统计各个游戏单个部门的交易数据/// </summary>/// <param name="tradeDateKey">日期的键值</param>/// <returns></returns>public CellSet Count(int tradeDateKey,int departmentKey){StringBuilder mdxBuilder = new StringBuilder();mdxBuilder.Append("WITH MEMBER [Measures].[Total Orders Count] AS 'SUM([M easures].[Total Orders] )' ");mdxBuilder.Append(" MEMBER [Measures].[Total Amount Count] AS 'SUM([Measur es].[Total Amount])'");mdxBuilder.Append(" MEMBER [Measures].[Total Money Count] AS 'SUM([Measur es].[Total Money])'");mdxBuilder.Append(" MEMBER [Measures].[Un Paid Cancel Amount Count] AS 'SU M([Measures].[Un Paid Cancel Amount])'");mdxBuilder.Append(" MEMBER [Measures].[Un Paid Cancel Money Count] AS 'SU M([Measures].[Un Paid Cancel Money])'");mdxBuilder.Append(" MEMBER [Measures].[Paid Cancel Amount Count] AS 'SUM ([Measures].[Paid Cancel Amount])'");mdxBuilder.Append(" MEMBER [Measures].[Paid Cancel Money Count] AS'SUM([Measures].[Paid Cancel Money])'");mdxBuilder.Append(" SELECT { [Measures].[Total Orders Count], [Measures].[Tota l Amount Count], [Measures].[Total Money Count], [Measures].[Un Paid Cancel Amount Coun t], [Measures].[Un Paid Cancel Money Count], [Measures].[Paid Cancel Amount Count], [Mea sures].[Paid Cancel Money Count]} ON COLUMNS,");mdxBuilder.Append(" {[Game].[Game Code Alternate Key].Members} ON ROWS");mdxBuilder.Append(" FROM [Data Center DW]");mdxBuilder.Append(" WHERE ([Time].[TimeKey].[" + tradeDateKey + "],[Departmen t].[Dim Department].["+departmentKey.ToString()+"])");return DBServer.AnalysisServer.ExecuteCellset(mdxBuilder.ToString());}/// <summary>/// 填充按部门统计的数据/// </summary>/// <param name="model"></param>/// <param name="timeKey"></param>public void Fill(DepartmentTotalModel model, DateTime time, int timeKey){CellSet cellSet = new DepartmentTotalDac().Count(timeKey);DepartmentTotalModel.FactGameTradeDataRow newRow;for (int i = 1; i < cellSet.Axes[1].Positions.Count; i++){newRow = model.FactGameTradeData.NewFactGameTradeDataRow();newRow.Department = cellSet.Axes[1].Positions[i].Members[0].Caption;newRow.TradeDate = time;for (int j = 0; j < cellSet.Axes[0].Positions.Count; j++){if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Total Order s Count]"){newRow.TotalOrders = TypeParse.ToInt32(cellSet[j, i].FormattedValue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Total Am ount Count]"){newRow.TotalAmount = TypeParse.ToInt32(cellSet[j, i].FormattedValue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Total Mo ney Count]"){newRow.TotalMoney = TypeParse.ToDecimal(cellSet[j, i].FormattedValue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Un Paid Cancel Amount Count]"){newRow.UnPaidCancelAmount = TypeParse.ToInt32(cellSet[j, i].FormattedV alue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Un Paid Cancel Money Count]"){newRow.UnPaidCancelMoney = TypeParse.ToDecimal(cellSet[j, i].Formatte dValue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Paid Can cel Amount Count]"){newRow.PaidCancelAmount = TypeParse.ToInt32(cellSet[j, i].FormattedVal ue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Paid Can cel Money Count]"){newRow.PaidCancelMoney = TypeParse.ToDecimal(cellSet[j, i].FormattedV alue);}}model.FactGameTradeData.AddFactGameTradeDataRow(newRow);}}/// <summary>/// 填充按游戏和部门交叉统计的数据/// </summary>/// <param name="model"></param>/// <param name="timeKey"></param>/// <param name="depKey"></param>public void Fill(GameByDepartmentTotalModel model,DateTime time,int timeKey,strin g dep,int depKey){CellSet cellSet = new GameByDepartmentTotalDac().Count(timeKey, depKey);GameByDepartmentTotalModel.FactGameTradeDataRow newRow;for (int i = 1; i < cellSet.Axes[1].Positions.Count; i++){newRow = model.FactGameTradeData.NewFactGameTradeDataRow();newRow.Game = cellSet.Axes[1].Positions[i].Members[0].Caption;newRow.Department = dep;newRow.TradeDate = time;for (int j = 0; j < cellSet.Axes[0].Positions.Count; j++){if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Total Orders Count]"){newRow.TotalOrders = TypeParse.ToInt32(cellSet[j, i].FormattedValue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Total Am ount Count]"){newRow.TotalAmount = TypeParse.ToInt32(cellSet[j, i].FormattedValue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Total Mo ney Count]"){newRow.TotalMoney = TypeParse.ToDecimal(cellSet[j, i].FormattedValue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Un Paid Cancel Amount Count]"){newRow.UnPaidCancelAmount = TypeParse.ToInt32(cellSet[j, i].FormattedV alue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Un Paid Cancel Money Count]"){newRow.UnPaidCancelMoney = TypeParse.ToDecimal(cellSet[j, i].Formatte dValue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Paid Can cel Amount Count]"){newRow.PaidCancelAmount = TypeParse.ToInt32(cellSet[j, i].FormattedVal ue);}else if (cellSet.Axes[0].Positions[j].Members[0].Name == "[Measures].[Paid Can cel Money Count]"){newRow.PaidCancelMoney = TypeParse.ToDecimal(cellSet[j, i].FormattedV alue);}}model.FactGameTradeData.AddFactGameTradeDataRow(newRow);}}好了,目前为止,我们已经从多维数据库里面返回我们需要统计的数据了,爱怎么展现就怎么展现吧。

相关文档
最新文档