Open Source BI Projects

本文介绍了当前流行的开源商业智能项目和工具,包括OLAP4J、Mondrian、JPivot、Kettle、Weka及olap4cloud等。这些工具涵盖了OLAP服务器、ETL工具、数据挖掘算法及OLAP引擎等多个方面。

Open Source BI Projects

        介绍当前比较流行的开源商业智能项目和工具。

1. OLAP4J

        OLAP4J一个类似于JDBC驱动,能够用于访问任何OLAP服务器的Java公共类包。所以你可以开发一个应用程序来实现一个OLAP服务器与另一个服务器的交互。

2. Mondrian

        Mondrian是一个采用java开发的OLAP服务器,能够分析存储在SQL数据库中的海量数据而不需要编写任何SQL脚本。Mondrian用于数据的多维探测。它支持把MDX(Multi-Dimensional eXpression)语言转换成SQL。

        Mondrian是一个开源项目。一个用Java写成的OLAP(在线分析性处理)引擎。它用MDX语言实现查询,从关系数据库(RDBMS)中读取数据。然后经过Java API用多维的方式对结果进行展示。多维数据中,维度(dimension),层次(Hierarchies),级别(Level)等概念很重要。

        OLAP用了多维分析的技术。尽管关系型数据库所存储的所有数据都是以行和列的形式存在的,但一个多维数据集还是可以由轴(axes)和单元(cell)组成。

        联机分析处理(On Line Analytical Processing,简称OLAP) 概念最早由关系数据库之父E.F.Codd于1993年提出。OLAP应用是目前数据仓库上的重要应用之一,是决策分析的关键。作为数据仓库最重要的多维分析工具,OLAP利用存储在数据仓库中的数据完成各种分析操作,并以直观易懂的形式将分析结果返回给决策人员。它的目标是满足决策支持或多维环境特定的查询和报表需求,技术核心是多维分析。OLAP具有灵活的分析功能、直观的数据操作和分析结果可视化表示等突出优点,从而使用户对大量复杂数据的分析变得轻松而高效,以利于迅速做出正确的判断,辅助决策。

3. JPivot

        JPivot是一个JSP标签库用于操作OLAPTable,让用户可以执行基本的OLAP操作,如切片、切块、上钻、下钻等。JPivot使用Mondrian作为它的OLAP服务器但也支持XMLA数据源访问。

JPivot

4. Kettle

        Kettle是首屈一指的,开源的ETL工具。数据集成平台是建立与便携式,基于Java的体系结构和开放的,基于XML的配置和工作语言。 Kettle功能可以成功地与主要商业产品竞争今日。

Kettle

5. Weka

        Weka是一组用于数据挖掘的机器学习(machine learning)算法。这些算法可以直接应用于数据集,也可以从Java代码中调用。Weka包含的工具可以用于数据预处理,分类,聚类,关联规则,可视化。它还非常适用于开发新的机器学习方法。

        WEKA的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),同时weka也是新西兰的一种鸟名,而WEKA的主要开发者来自新西兰。

        WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归、聚类、关联规则以及在新的交互式界面上的可视化。

6. olap4cloud

       olap4cloud是一个基于Hadoop/HBase/MapReduce的OLAP引擎。它构建服务于包含分组和聚合的OLAP查询。以下是olap4cloud提供的典型查询服务。

select d3, sum(m1), min(m2) from facts whered1 in (1,2) and d2 in (2,3) group by d3;

#-------------------------------------------------------------------------- # Xilinx Vivado v2019.2 (64-bit) # SW Build: 2700185 on Thu Oct 24 18:46:05 MDT 2019 # IP Build: 2699827 on Thu Oct 24 21:16:38 MDT 2019 # Current time: Wed Aug 20 16:27:09 CST 2025 # Process ID (PID): 9040 # User: jianbin.zhan # OS: Windows 10 # # This report is an indication that an internal application error occurred. # This information is useful for debugging. Please open a case with Xilinx. # Technical Support with this file and a testcase attached. #-------------------------------------------------------------------------- ui.utils.e: ui.frmwork.CommandFailedException: unknown escape sequence ui.frmwork.CommandFailedException: unknown escape sequence at ui.data.labtools.lthwdatai.HWDevice_getHWCfgMem(Native Method) at ui.data.labtools.d.bhs(SourceFile:229) at ui.data.labtools.j.ff(SourceFile:241) at ui.views.c.o.f.a.ej(SourceFile:46) at ui.views.c.o.f.d.l(SourceFile:31) at ui.views.S.b.k.P(SourceFile:394) at ui.views.S.b.d.getTreeCellRendererComponent(SourceFile:153) at ui.views.S.b.h.getTreeCellRendererComponent(SourceFile:54) at org.jdesktop.swingx.JXTree$DelegatingRenderer.getTreeCellRendererComponent(JXTree.java:1243) at java.desktop/javax.swing.plaf.basic.BasicTreeUI$NodeDimensionsHandler.getNodeDimensions(Unknown Source) at java.desktop/javax.swing.tree.AbstractLayoutCache.getNodeDimensions(Unknown Source) at java.desktop/javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.updatePreferredSize(Unknown Source) at java.desktop/javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.expand(Unknown Source) at java.desktop/javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.expand(Unknown Source) at java.desktop/javax.swing.tree.VariableHeightLayoutCache.ensurePathIsExpanded(Unknown Source) at java.desktop/javax.swing.tree.VariableHeightLayoutCache.setExpandedState(Unknown Source) at java.desktop/javax.swing.plaf.basic.BasicTreeUI.updateExpandedDescendants(Unknown Source) at java.desktop/javax.swing.plaf.basic.BasicTreeUI$Handler.treeExpanded(Unknown Source) at java.desktop/javax.swing.JTree.fireTreeExpanded(Unknown Source) at java.desktop/javax.swing.JTree.setExpandedState(Unknown Source) at java.desktop/javax.swing.JTree.expandPath(Unknown Source) at ui.utils.p.x.L.aY(SourceFile:134) at ui.utils.p.x.L.cUl(SourceFile:101) at ui.views.S.b.s.update(SourceFile:672) at ui.views.S.b.D.update(SourceFile:78) at ui.views.S.u.gSr(SourceFile:2580) at ui.bo.fB(SourceFile:1968) at ui.bo.cR(SourceFile:1936) at ui.utils.o.ahG(SourceFile:2714) at ui.b.c.bB.cs(SourceFile:514) at ui.b.c.bK.finished(SourceFile:1174) at ui.frmwork.z.run(SourceFile:190) at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.desktop/java.awt.EventQueue.access$500(Unknown Source) at java.desktop/java.awt.EventQueue$3.run(Unknown Source) at java.desktop/java.awt.EventQueue$3.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source) at ui.frmwork.b.d.dispatchEvent(SourceFile:88) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.desktop/java.awt.WaitDispatchSupport$2.run(Unknown Source) at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source) at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.desktop/java.awt.WaitDispatchSupport.enter(Unknown Source) at java.desktop/java.awt.Dialog.show(Unknown Source) at java.desktop/java.awt.Component.show(Unknown Source) at java.desktop/java.awt.Component.setVisible(Unknown Source) at java.desktop/java.awt.Window.setVisible(Unknown Source) at java.desktop/java.awt.Dialog.setVisible(Unknown Source) at ui.b.c.g.setVisible(SourceFile:919) at ui.b.c.bB.showDialog(SourceFile:978) at ui.b.c.bI.fQ(SourceFile:1123) at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.desktop/java.awt.EventQueue.access$500(Unknown Source) at java.desktop/java.awt.EventQueue$3.run(Unknown Source) at java.desktop/java.awt.EventQueue$3.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source) at ui.frmwork.b.d.dispatchEvent(SourceFile:88) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.desktop/java.awt.EventDispatchThread.run(Unknown Source) at ui.utils.d.c.f(SourceFile:845) at ui.utils.d.c.e(SourceFile:190) at ui.utils.o.e(SourceFile:213) at ui.frmwork.b.d.dispatchEvent(SourceFile:95) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.desktop/java.awt.WaitDispatchSupport$2.run(Unknown Source) at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source) at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.desktop/java.awt.WaitDispatchSupport.enter(Unknown Source) at java.desktop/java.awt.Dialog.show(Unknown Source) at java.desktop/java.awt.Component.show(Unknown Source) at java.desktop/java.awt.Component.setVisible(Unknown Source) at java.desktop/java.awt.Window.setVisible(Unknown Source) at java.desktop/java.awt.Dialog.setVisible(Unknown Source) at ui.b.c.g.setVisible(SourceFile:919) at ui.b.c.bB.showDialog(SourceFile:978) at ui.b.c.bI.fQ(SourceFile:1123) at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.desktop/java.awt.EventQueue.access$500(Unknown Source) at java.desktop/java.awt.EventQueue$3.run(Unknown Source) at java.desktop/java.awt.EventQueue$3.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source) at ui.frmwork.b.d.dispatchEvent(SourceFile:88) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
08-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值