`
jjjava
  • 浏览: 185223 次
  • 性别: Icon_minigender_1
  • 来自: wuhan
社区版块
存档分类
最新评论

商业智能需要站在全局角度考虑问题

    博客分类:
  • BI
 
阅读更多
首先看一下下面这个表样.这个表样是润乾的一个示例表样,接着介绍birt 是如何做的
[img]http://jjjava.iteye.com/upload/picture/pic/9994/c5064865-dcf6-393e-
b40e-8a64b1ee2dae.jpg[/img]
这个表样算是报表中最常见的一种需求了,把不同粒度的数据聚合到同一粒度上.

我们用automobile 表示汽车表, 用houseproperty 表示房产表, 用estate表示土地表,用others 表示其他表.他们都有customerid 来表示客户名称.customers 表有customerid 和customername

1. 用视图来拼数据

   对于  automobile 聚合使用一个autoview , sql 如下

   select sum(automobile price* quantity) autototal, customerid  from automobile group by customerid

  对于 houseproperty 使用如下view

   select sum( house price * quantity ) housetotal, customerid  from houseproperty group by customerid

  对于 土地和其他也是差不多类型的sql



  得到了上面这四个视图之后, 就把customers 表根据customerid 和其他四个视图join 起来.

  select customername ,  autototal  , housetotal , estatetotal , othertotal

   from  customers c , automobile a , houseproperty h , estate e , others o

   where 四个视图和customers的连接条件



  由于这个表样并不涉及到以 汽车,房产,土地, 其他表中的任何一个客户为主, 所以暂时也不考虑左右连接的问题.



2. 使用Birt 的Joined Data Set

   Birt 提供的Joined Data Set 跟数据库里面的视图是差不多的概念,使不过一个是在数据库内部join 数据,一个是使用Java 循环的方式join 数据.

   跟上面创建视图一样,创建四个DataSet , 输出两个字段: customerid 和 total.

   然后创建一个Joint Data Set , 把customers 表和 autototal DataSet 按照customerid join起来.这时得到四个字段 customers.customername , customers.customerid  ,  auto DataSet.customerid ,auto DataSet.autotal . 最后我们把这个Joint DataSet 命名为jdataSet1 (代表的是autoDataSet 和 customers 产生的Joint DataSet ).

  然后继续创建另一个Joint Data Set 把customers 的customerid 和前一步创建的jDataSet1 按照customerid join 起来得到一个第二个Joint DataSet1 ,我们命名为jDataSet2 .

  以此类推,最后我们输出5个字段: customers.name   ,   auto.total ,  house.total  , estate.total , others.total , 实际输出可能在customers.customerid 上重复了4次.



上面两种方式报表的做法主要有两点差别:

1. 性能

    如果本身数据库单独执行一个视图的sql 结果比较小,而本身的automobile 表数据量比较大(也就是说一个customer对非常多的automobile 记录) , 那么使用数据库视图就会比较慢. 因为数据库在尝试得到4个视图的结果进行了一些不必要的按照automobiel表的customerid和customers的customerid进行的比较操作( 如果有索引肯定是对索引进行了多次不必要的读) ,这时候使用Java的这种循环方式会比较快一点 . 如果本身结构集比较大,那么还是用数据库本身的排序和join 比较快, 这个道理比较类似于数据库中如果结构集大于5% 就不要走索引,直接进行全表扫描.只不过这是一个java 版的.

2. 左右连接的问题

   如果这个表的数据不是以customers里面的数据为主,而是以四个视图其中的一个为主.这时候要情况可能会比较复杂一些.由于我不太清楚birt 里面joint data set 计算的方式是怎样的,所以也不太好评论.不过如果不使用joint data set , 就是使用一般的编程的方式.那么按照下面这个思路会比较好:

a , b , c , d ,e  为customers , automobiles view  (后面简写avlist 表示这个集), housetotal view , 里面的指针.  四个view 都已经排好了序.group by 是默认排序的. outlist 表示最后需要的输出 , row表示最后输出的一条数据

for ( 按照主数据循环)  {

    row.customerid = customers.customerid;

    if( customers.customerid == avlist[b].customerid) {

           outlist[x].autotaol = avlist[b].autotal ;

           b++

     }

    四个view 同一个判断方式, 但是每个view 的指针指的是不一样的.

    最后:   outlistSet . add (outlist[x])

}



如果数据源本身的数据量也很大,需要输出的数据也很多,则上面两种方式都会有性能问题,这时可以考虑商业智能里面的万金油方式: ETL



3. ETL

    从上面这个表样看来,可能会有两个隐含条件.一个是聚合的数据粒度在时间上是月,另一个在销售地点粒度上是:支行086001-301 , 所以用ETL一开始就聚合数据可能会更好的解决性能问题.另外一个是如果用户想要排序和过滤数据的话用一个单独的ETL聚合表也比拼数据的方式好的多.



这篇文章的目的并不只是想解释一个做表的问题,而是说明商业智能的一些问题不光需要站在一个独立的角度思考,有些问题本身可能随着环境的一些变化而采取对应的措施,比如上面为了解决排序,过滤,左右连接,性能问题都需要从不同的角度来考虑问题.有时候可能一个做表的问题不光只是要限定在sql 或某个报表软件的本身,有时候某个ETL问题可能不关只是ETL就能解决的,随着情况的复杂可能需要从整个商业智能的全局来进行考虑,商业智能越来越倾向与多个解决方法的融合.

本文原文在 http://www.gemini5201314.net

如果你对ETL中性能优化问题有兴趣的话,也可以查看另一篇关于在ETL中性能优化要站在全局的角度,而不是只在数据库角度的文章.
分享到:
评论

相关推荐

    大数据之商业智能.ppt

    商业智能的核心是ETL(抽取、转换、加载)过程,它从不同来源抽取数据,清洗和转换后存储在数据仓库中,形成企业全局视图。然后,通过OLAP(在线分析处理)工具、数据挖掘等技术对数据进行深度分析,最终将分析结果...

    从数据仓库到商业智能

    商业智能的核心是ETL(抽取、转换、加载)过程,它将不同来源的数据整合到统一的数据仓库中,提供全局视角,然后通过分析工具进行深入探索。 商业智能与企业信息化系统密切相关,如ERP、CRM、SCM等系统是BI的数据源...

    基于SQL Server 2005的超市商业智能模型.pdf

    1. 数据仓库:数据仓库是实现商业智能的基础,它收集并整合了来自超市各个POS系统的历史数据,形成了企业级的全局视图,为后续的数据分析提供数据平台。数据仓库通常采用面向主题的方式组织数据,支持多维分析和历史...

    智慧医院商业智能BI解决方案.pdf

    在医疗行业中,业务系统如HIS(医院信息系统)、LIS(实验室信息管理系统)、电子病历等积累了多年的数据,但这些数据往往分散在不同的系统之中,决策者需要的是能够进行全局综合分析的信息。此外,由于医疗数据分析...

    企业如何建设BI商业智能系统

    最终,商业智能系统需要通过一系列报表的形式向用户提供有价值的信息。这些报表应具备以下特点: 1. **全局视角**:从宏观层面展现企业运营状况。 2. **多维度分析**:支持用户按不同维度对数据进行深入探究。 ...

    CRM系统中的商业智能技术课件.pptx

    在CRM(客户关系管理)系统中,商业智能技术发挥着至关重要的作用,它帮助企业从海量数据中提炼出有价值的信息,支持决策制定。本课件主要介绍了数据仓库、数据挖掘以及联机分析处理(OLAP)这三种关键技术在CRM中的...

    SBO系统与商务智能系统整合的研究与应用.pdf

    该方案的总体架构包括数据仓库、在线分析处理、数据挖掘等先进技术,目的是为中小企业构建一个获取、加工、管理、应用信息和知识的商业智能系统。通过这个系统,企业可以更容易地获取有价值的信息,从而提升决策质量...

    互联网创新思维下的新能源汽车发展.pdf

    4. **全局性思维**:新能源汽车的创新不能孤立进行,需要站在全局角度,推动汽车产业的协同发展,尤其是新能源汽车与传统汽车的融合,实现技术互补,共同进步。 文章强调了在互联网创新思维下发展新能源汽车的重要...

    数据库专业就业方向简介

    商业智能专家主要从商业应用的角度来分析数据,需要使用报表工具(如 SSRS、cognos、crystal report 等)和数据挖掘、统计方面的软件工具。这个方向需要了解商业应用和数据分析。 4. 数据构架师(Data Architect) ...

    2021-2025年中国人工智能基础数据服务行业成本领先战略研究报告.pdf

    在市场调研部分,报告从产业链、产业图谱、投融资、商业模式、市场规模、细分结构和市场格局等角度对2020-2021年人工智能基础数据服务市场进行了深入分析,并对视图基础数据服务、自动驾驶基础数据服务、智能交互...

    智能分析时代大数据BI助力中国智造.pptx

    在智能分析时代,大数据商业智能(BI)已经成为推动中国智能制造的关键力量。大数据BI通过高效处理和分析海量数据,为企业提供了前所未有的洞察力,从而驱动技术创新和未来的变革。以下是对这一主题的详细阐述: ...

    新常态下财务管理转型培训课件.pptx

    这就要求财务人员具备更强的业务理解能力,能够站在全局角度,为企业制定并实施有效的财务策略。 总的来说,新常态下的财务管理转型是一个全面的过程,涉及到政治环境、经济体制、商业模式等多个层面的变化,要求...

    数据库方向上的十种职业.doc

    商业智能专家是指从商业应用和最终用户的角度来从数据中获得有用的信息的人员,需要具备 OLAP、SSRS、cognos、crystal report 等报表工具和数据挖掘、统计方面的软件工具知识。 ETL 开发 ETL 开发是指使用 ETL ...

    提升客户满意度的大数据产品解决方案 数据智能提升客户满意度产品方案.pptx

    - **消除数据孤岛,掌握全局**:通过整合各类数据,构建全方位的数据体系,以便从不同角度理解客户需求和问题。 - **问题分类与责任归属**:利用智能算法自动识别问题类别,明确责任部门,提高服务效率。 - **...

    水系统优化的粒子群算法分析.pdf

    水系统集成优化问题涉及到的粒子群算法,是研究如何通过群体智能进行问题求解的一个重要领域。粒子群优化算法(Particle Swarm Optimization, PSO)是一种基于群体的优化工具,通过模拟鸟群觅食的行为来寻找最优解。...

    2021-2025年中国人工智能基础数据服务行业调研及发展战略研究报告.pdf

    报告还分析了人工智能基础数据服务的产业链、产业图谱、投融资情况、商业模式、市场规模、细分结构和市场格局,并对视图基础数据服务、自动驾驶基础数据服务、智能交互基础数据服务的市场现状和技术趋势进行了深入...

    可解释的人工智能在数据分析中的作用.pptx

    ### 可解释的人工智能在数据分析中的作用 #### 一、可解释性在决策分析中的重要性 在当今数据驱动的商业环境中,决策者越来越依赖于复杂的数据分析模型来进行决策。然而,随着模型复杂性的增加,理解这些模型的...

    大数据在商业银行授信审批中的应用.pdf

    这种画像有助于银行从全局角度反映企业的基本情况,更加精准地了解企业的信用状况,为信贷决策提供科学依据。通过对企业及其关联方的深入分析,银行还能够识别企业之间复杂隐蔽的关联关系,为授信审批提供更加全面的...

    虚拟商业社会环境VBSE多专业综合实训平台项目方案.docx

    综上所述,虚拟商业社会环境VBSE多专业综合实训平台项目方案是一个全面且细致的方案,它不仅考虑到了实训平台的设计与建设,还涵盖了后期的运营和服务等多个方面,旨在为学生提供一个高质量的实训环境,培养他们的...

    供应链管理环境下的库存管理问题分析及控制策略.pdf

    因此,需要通过分析每个成员的优化控制策略,从全局角度推进整体优化。 其次,供应链具有明显的层次性,即不同层级的成员企业有不同的角色和责任。从底层的库存优化开始,逐步上升到整个供应链的综合分析,这是实现...

Global site tag (gtag.js) - Google Analytics