Mondrian_Schema属性详解

合集下载

mondrian源码分析和改造设计

mondrian源码分析和改造设计

mondrian源码分析1.概述 (1)1.1.若干概念 (1)1.2.架构 (2)2.静态类包分析 (3)2.1.包解释 (3)2.2.Schema manger部分 (4)2.3.包mondrian.calc (4)2.4.包mondrian.olap—接口 (5)2.4.1.mdx函数包 (5)2.4.2.funCall (5)2.4.3.Query类 (6)2.5.包mondrian.rolap—计算层 (6)2.5.1.成员读取包MemberReader (6)2.5.2.单元格读取CellReader (8)2.5.3.RolapResult类 (11)2.5.4.RolapEvaluator类 (12)2.5.5.关于排序 (12)2.6.聚集层Star layer (13)2.6.1.概述 (13)2.6.2.聚合装载过程 (13)2.6.3.segment详解 (14)2.6.4.缓存失效控制 (17)3.交互管理层 (18)3.1.初始化MondrianModel (18)3.2.获取结果集 (19)4.修改点 (22)4.1.mondrian角色参数化 (22)4.2.缓存失效控制 (22)4.3.connection创建参数优化 (23)4.4.维度成员排序 (23)4.5.对mondrian bug的修正 (24)4.6.to-do List (24)1.概述1.1. 若干概念成员(member):成员是代表维度中一次或多次数据出现的项。

度量值也可以算作一个维度,因此一个具体度量值项也可以作为一个成员。

元组(tuple):是向量,用于定义来自多维数据集的数据切片;它由来自一个或多个维度的单个成员的有序集合组成。

元组用于标识来自多维数据集的特定多维数据块;由来自多维数据集中各个维度的一个成员组成的元组完全描述单元值。

换言之,元组是一种成员向量。

例如:(时间.[下半年], 路线.非陆地.航空),由单个成员组成的元组也可括在圆括号内,但这不是必需的。

Mondrian数据库olap应用文档

Mondrian数据库olap应用文档
在jpivot工具中有个分析工具可以自动生成mdx语句但存在乱码问题可以用其中的分析工具生成的mdx来加入到这里进而可视化的生成各种不同的分析
Mondrian数据库olap应用文档
Mondrian数据库olap应用文档
一创建数据仓库
1)DW名称
主要是在相应数据库中建立相应的数据仓库,事实表,维表结构
jdbc/LnSw
javax.sql.DataSource
Container
Shareable
2)选择数据源
主要是应用weblogic 控制台,建立数据库连接池、数据源并进行数据源的选择
例如:建立数据源jdbc/LnSw
在weblogic控制台中配置数据库连接池和数据源,其中数据源的格式如jdbc/xxxx 表示;如:在纳税评估系统中数据源格式为jdbc/Lnsw
3) 设置数据源
例如:
在WEB-

Mondrian入门介绍之schema-manager

Mondrian入门介绍之schema-manager

Mondrian入门介绍之schema manager1 olap基本概念联机分析处理(On Line Analytical Proccessing,简称OLAP) 概念最早由关系数据库之父E.F.Codd于1993年提出。

OLAP应用是目前数据仓库上的重要应用之一,是决策分析的关键。

作为数据仓库最重要的多维分析工具,OLAP利用存储在数据仓库中的数据完成各种分析操作,并以直观易懂的形式将分析结果返回给决策人员。

它的目标是满足决策支持或多维环境特定的查询和报表需求,技术核心是多维分析。

OLAP具有灵活的分析功能、直观的数据操作和分析结果可视化表示等突出优点,从而使用户对大量复杂数据的分析变得轻松而高效,以利于迅速做出正确的判断,辅助决策。

相比于传统的OLTP(联机事务处理),OLAP定义了多维模型的概念辅助分析操作:图 1如图1所示,这是由三个维度构成的一个OLAP立方体,立方体中包含了满足条件的cell(子立方)值,这些cell里面包含了要分析的数据,称之为度量值。

显而易见,一组三维坐标就唯一确定了一个子立方。

下面介绍一下多位模型的基本概念:立方体:由维度构建出来的多维空间,包含了所有要分析的基础数据,所有的聚合数据操作都在立方体上进行。

维度:就是观察数据的一种角度。

在这个例子中,路线,源,时间都是维度,这三个维度构成了一个立方体空间。

维度可以理解为立方体的一个轴。

要注意的是有一个特殊的维度,即度量值维度。

维度成员:构成维度的基本单位。

对于时间维,它的成员分别是:第一季度、第二季度、第三季度、第四季度。

层次:维度的层次结构,要注意的是存在两种层次:自然层次和用户自定义层次。

对于时间维而言,(年、月、日)是它的一个层次,(年、季度、月)是它的另一个层次,一个维可以有多个层次,层次可以理解为单位数据聚合的一种路径。

级别:级别组成层次。

对于时间维的一个层次(年、月、日)而言,年是一个级别,月是一个级别,日是一个级别,显然这些级别是有父子关系的。

mondrian与jpivot介绍、olap用例

mondrian与jpivot介绍、olap用例

OLAP 系统结构整个OLAP 系统为三层结构,最低层为存储层,一般分为两个部分1联机事务处理数据库.它是分析数据的来源;2 储存分析所用数据的数据仓库.该数据是从OLTP 数据库中提取和整理获得,通过这一层将OLAP 数据和OLTP 数据分离,这样就不会对原系统运行效率造成影响;第二层为应用层,它由OLAP 服务器与Web 服务器组成, OLAP 服务器是支持和管理多维数据结构的数据处理引擎,由它执行MDX 语句,从关系型数据库中读取数据,实现从关系型数据库到多维逻辑模型的映射,使数据以多维格式展示。

Web 服务器是专门用于向OLTP 服务器提交用户请求或向用户浏览器发送处理结果以供浏览。

顶层为前端浏览工具.采用Web 浏览页就可以实现对多维数据集的访问.并以表格或者图形的方式展现查询结果。

架构如图所示:存储层应用层表现层前台设计:1、表现层本层采用jpivot 作为表示层,Jpivot 是JSP 定制标志库,它呈现一个联机分析处理表格并让用户能够执行典型的联机分析处理导航操作,如上卷、下钻和旋转等。

它使用Mondrian 和XML/A 作为OLAP 引擎,使用WCF (Web Component Framework) 来支持使用XML 和XSLT 来创建UI 。

2、应用层本层中Web 服务器采用Tomcat,由Mondrian 作为 OLAP 引擎,Mondrian 是一个OpenSource 的基于关系数据库的分析服务器,遵循MDX 语言、XML/A 和JOLAP 标准。

它自定义了一种使用MDX 语言的客户端接口,可以通过执行MDX 语句,从关系型数据库中读取数据,实现从关系型数据库到多维逻辑模型的映射,使数据以多维格式展示。

存储层提供数据,由于mondrian被设计运行在关系数据库上,因此这里采用关系数据库实现,指向数据源的连接字符串格式如下:Provider=mondrian;Jdbc=jdbc:oracle:thin:placea/placea@192.168.90.18:1521:mps;JdbcDrive rs=oracle.jdbc.driver.OracleDriver; Catalog=/WEB-INF/queries/institute_type.xml 其中,Provider=mondrian定义了OLAP引擎,采用不同的存储数据库jdbc与jdbcDriver 的值也随之变化,这里采用了oracle数据库,Catalog指明了schema元模型的位置,mondrian 根据它到数据仓库中提取数据。

mondrian操作手册和优化配置

mondrian操作手册和优化配置

Mondrian操作介绍和调优配置操作前提介绍1、生成维度和指标MDX查询语句在页面里面制定对应的查询前需要配置对应的查询数据源,使用的是jpivot 标签。

有关jpivot的使用可以查看开源的项目jpivot。

如下面指定对应的oracle数据库连接数据源。

让mondrian可以连接到对应的数据库进行查询操作。

查询操作使用的sql是MDX。

类似于sql的语法,有关MDX的使用可以了解MDX语句。

<jp:mondrianQuery id="query01"jdbcDriver="oracle.jdbc.driver.OracleDriver"jdbcUrl="jdbc:oracle:thin:@10.45.49.21:1521:osstest"jdbcUser="bi71"jdbcPassword="smart"catalogUri="/WEB-INF/queries/Analysis.xml">select {[Measures].[Charge], [Measures].[CallTimes], [Measures].[Num of Subscriber], [Measures].[Duration], [Measures].[ARPU],[Measures].[MOU]} ON COLUMNS,{([AcctType].[AllAcctType],[Package].[AllPackage],[ProductState].[AllProdState],[PayLevel].[AllPayLevel],[ON-NetWorkDuration].[AllDuration],[SendDate].[AllSendDate])} ON ROWSfrom [SubsVoiceAnalysis]</jp:mondrianQuery>上面的MDX指定了六个维度:[Measures].[Charge], [Measures].[CallTimes], [Measures].[Num of Subscriber], [Measures].[Duration], [Measures].[ARPU], [Measures].[MOU]和六个指标:[AcctType].[AllAcctType],[Package].[AllPackage],[ProductState].[AllProdState],[PayLevel].[AllPayLevel],[ON-NetWorkDuration].[AllDuration],[SendDate].[AllSendDate]查询效果界面展示为:下面将从界面介绍mondrian的操作。

mondrian的基本模式

mondrian的基本模式

2.模式文件
Mondrian 模式是定义在一个XML文件中 的.demo/FoodMart.xml这个文件里包含大多 数我们这里讨论的结构 目前, 生成模式文件的方法是使用XML编辑 器手动编写,XML语法并不复杂,因此这个 任务并不像听上去那么难 注意 XML元素必须按照一定的先后顺序出 注意: 现.
维(dimension)
一个维(dimension)是一个层次(hierarchy)的 集合,根据事实表中的列来区别
维定义的例子
让我们看如下一个维定义
<Dimension name="Gender" foreignKey="customer_id"> <Hierarchy hasAll="true" primaryKey="customer_id"> <Table name="customer"/> <Level name="Gender" column="gender" uniqueMembers="true"/> </Hierarchy> </Dimension>
3.3.1 维和层次到表的映射
一个维依靠一对列和数据立方进行连接, 一 个在事件表中, 另一个在维表中。 <Dimension> 元素有一个外键(foreignKey) 属性,对应事实表中的一个列,它通过 <Hierarchy> 元素中的主键属性连接起来.
3.3.2 ‘all’ 成员
默认情况下, 每个层次都包含一个称之为 ‘(All)’的顶级别, 它包含一话个名为 '(All {hierarchyName})'的成员(member). 该成员是 该维中所有其他成员的父成员,它也是该层 次的默认成员

mondrian 聚集表性能调试

mondrian 聚集表性能调试

1Mondrian 性能调试(数据库)Oracle性能调试占很大比重Aggragate table是主要方法,机制调试SQL跟踪1.1 设置SQL跟踪SQL跟踪语句要输出到指定文件,因而SQL跟踪的设置与logging的设置有关。

1.1.1Mondrian的设置据网上相关文档记录:将WEB-INF/Mondrian.propeties文件中加入mondrian.trace.level=1,SQL语句即输出到System.out,为了将SQL跟踪语句输出到指定文件,需要配置log4j1.1.2JBoss的Logging设置JBoss的最大特色就是LOGGING集中管理,各应用不必自带LOG4J.JAR和配置文件。

详细内容参见《JBoss:A Developer's Notebook》Charpter6 Logging简单的说conf/Log4j.xml配置的是一个MAP,即二元组集合。

(这个二元组的第一元是LOGGER日志生成器,第二元是APPENDER输出设备。

)也就说log4j配置文件说明了,那些日志生成器输出到那些输出设备。

请注意Category和Root的概念,了解JBOSS中的server.log输出设备.可以在server.log中查看SQL语句如下:2007-02-01 10:15:54,187 DEBUG [mondrian.rolap.RolapUtil] Segment.load: executing sql [select"DC_TIME"."THE_QUARTER" as "c0", "DC_TIME"."THE_YEAR" as "c1",sum("DC_JOBCOLLECT"."JCPASSQUANTITY") as "m0", sum("DC_JOBCOLLECT"."JCREJECTQUANTITY") as "m1", sum("DC_JOBCOLLECT"."JCREWORKQUANTITY") as "m2" from "DC_TIME" "DC_TIME","DC_JOBCOLLECT" "DC_JOBCOLLECT" where "DC_JOBCOLLECT"."JCCOLLECTTIME" ="DC_TIME"."TIME_ID" and "DC_TIME"."THE_QUARTER" = '2' and "DC_TIME"."THE_YEAR" = '2002' group by "DC_TIME"."THE_QUARTER", "DC_TIME"."THE_YEAR"], 469 ms如下设置,可以将SQL语句输出到指定文件1.删除mondrain自带的log4j*.jar2.在conf/log4j.xml增加如下设置2.1指定输出文件sqltrace.log<!-- A time/date based rolling appender for mondrian sql tracing--><appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender"><errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/><param name="File" value="${jboss.server.home.dir}/log/sqltrace.log"/><param name="Append" value="false"/><param name="DatePattern" value="'.'yyyy-MM-dd"/><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%d %-5p [%c] %m%n"/></layout></appender>2.2绑定日志生成器<category name="mondrian.rolap.RolapUtil"><priority value="DEBUG" /><appender-ref ref="SQLTRACE"/></category>1.2 根据SQL跟踪设计AGGTABLE默认规则:以下聚集表均根据mondrian的默认rules进行设计命名。

MondrianSchema详解

MondrianSchema详解

Mondrian Schema详解SchemaSchema 定义了一个多维数据库。

包含了一个逻辑模型,而这个逻辑模型的目的是为了书写MDX 语言的查询语句。

这个逻辑模型实际上提供了这几个概念: Cubes (立方体)、维度( Dimensions )、层次( Hierarchies )、级别( Levels )、和成员( Members )。

而一个 schema 文件就是编辑这个 schema 的一个 xml 文件。

在这个文件中形成逻辑模型和数据库物理模型的对应。

Cube一个 Cube 是一系列维度 (Dimension) 和度量 (Measure) 的集合区域。

在 Cube 中,Dimension 和 Measure 的共同地方就是共用一个事实表。

Cube 中的有以下几个属性:Cube 里面有一个全局的标签定义了所用的事实表的表名Dimension他是一个层次( Hierarchies )的集合 , 维度一般有其相对应的维度表 . 他的组成是由层次( Hierarchies )而层次( Hierarchies )又是有级别( Level )组成 . 其属性如下:Hierarchy你一定要指定其中的各种关系 , 如果没有指定 , 就默认 Hierarchy 里面装的是来自立方体中的真实表 . 属性如下:Level级别 , 他是组成 Hierarchy 的部分。

属性很多,并且是 schema 编写的关键,使用它可以构成一个结构树, Level 的先后顺序决定了 Level 在这棵树上的的位置,最顶层的 Level 位于树的第一级,依次类推。

Level 的属性如下:Join对于一个 Hierarchy 来说,有两种方式为其指定:一种是直接通过一个 Table 标签指定;一种是通过 Join 将若干张表连接起来指定。

一旦采用 Join 的话,那么就要在 Hierarchy 里的 primaryKeyTable 属性指定主表。

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

Mondrian Schema详解SchemaSchema 定义了一个多维数据库。

包含了一个逻辑模型,而这个逻辑模型的目的是为了书写 MDX 语言的查询语句。

这个逻辑模型实际上提供了这几个概念:Cubes (立方体)、维度( Dimensions )、层次( Hierarchies )、级别( Levels )、和成员( Members )。

而一个 schema 文件就是编辑这个 schema 的一个 xml 文件。

在这个文件中形成逻辑模型和数据库物理模型的对应。

属性:Cube一个 Cube 是一系列维度 (Dimension) 和度量 (Measure) 的集合区域。

在Cube 中, Dimension 和 Measure 的共同地方就是共用一个事实表。

Cube 中的有以下几个属性:Cube 里面有一个全局的标签定义了所用的事实表的表名元素:如果事实表不在默认的数据库schema 中,你需要通过使用”schema”属性明确指出:Dimension他是一个层次( Hierarchies )的集合 , 维度一般有其相对应的维度表 . 他的组成是由层次( Hierarchies )而层次( Hierarchies )又是有级别( Level )组成 . 其属性如下:Hierarchy你一定要指定其中的各种关系 , 如果没有指定 , 就默认 Hierarchy 里面装的是来自立方体中的真实表 . 属性如下:Level级别 , 他是组成 Hierarchy 的部分。

属性很多,并且是 schema 编写的关键,使用它可以构成一个结构树, Level 的先后顺序决定了 Level 在这棵树上的的位置,最顶层的 Level 位于树的第一级,依次类推。

Level 的属性如下:MeasureMeasure 就是我们要计算的数值,操作的核心。

它的属性如下:Join对于一个 Hierarchy 来说,有两种方式为其指定:一种是直接通过一个 Table 标签指定;一种是通过 Join 将若干张表连接起来指定。

一旦采用 Join 的话,那么就要在 Hierarchy 里的 primaryKeyTable 属性指定主表。

进行Mondrian的MDX语法检查2009-08-06 22:27主要是通过mondrian.olap包中的一些核心类来进行MDX语法的检查。

首先,通过mondrian.olap.DriverManager来获取一个链接对象mondrian.olap.Connection.Connection connection =DriverManager.getConnection("Provider=mondrian;Jdbc=jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:dbname;JdbcUser=dbuser;JdbcPassword=dbpasswd;Catalog=file:///c:/Tomcat4.1/webapps/mywebapp/WEB-INF/mondriantest.x ml;JdbcDrivers=oracle.jdbc.driver.OracleDriver;",null,false);再对查询的MDX语句进行处理,使其转化为一个可查询的Query对象。

String queryStr="select {[Measures].[Salary]} ON COLUMNS,{[Employee].[employeeId].Members} ON ROWSfrom CubeTest ";Query query =connection.parseQuery(queryStr);到此为止,如果query不为空,并且parseQuery没有出现异常的话,就算是语法检查通过了。

当然,如果要进行查询结果输出的话,就显示很简单了,先查询得到 Result,再对Result进行处理就可以了。

Result result = connection.execute(query);mondrian中的Element描述2009-08-06 22:54根元素<Schema> Collection of Cubes, Virtual cubes, Shared dimensions, and Roles.逻辑元素<Cube> A collection of dimensions and measures, all centered on a fact table.<VirtualCube> A cube defined by combining the dimensions and measures of one or more cubes.<Dimension><DimensionUsage> Usage of a shared dimension by a cube.<Hierarchy><Level><Property><Measure>物理元素<Table> Fact- or dimension table.<View> Defines a 'table' using a SQL query, which can have different variants for different underlying databases.<Join> Defines a 'table' by joining a set of queries.存取控制<Role> An access-control profile.<SchemaGrant> A set of rights to a schema.<CubeGrant> A set of rights to a cube.<HierarchyGrant> A set of rights to a hierarchy and levels within that hierarchy.<MemberGrant> A set of rights to a member and its children.其他<Parameter><Table><Table>根元素<Schema>多维数据集,虚拟多维数据集,共享维度和角色集.逻辑元素<Cube>集合的尺寸和措施,都集中在一个事实表。

<VirtualCube>多维数据集定义的通过组合中的一个或多个立方体的尺寸和措施。

<Dimension><DimensionUsage>共享维度的多维数据集的使用。

<Hierarchy><Level><Property><Measure>物理元素<Table>事实维度表。

<View>定义一个“表”使用SQL查询,它可以有不同的变种不同的底层数据库。

<Join>定义了一个“表”,通过加入一组查询.存取控制<Role>一个访问控制配置文件.<SchemaGrant>一组权利的架构.<CubeGrant>一组权利的多维数据集.<HierarchyGrant>一组权利,在该层次结构的层次和水平。

<MemberGrant>一组的成员,其子女的权利.其他<Parameter><Table><Table>mondrian中的父子层次关系2009-08-06 23:01父子层次一个使用方便的层次有一个严格的层的集合, 成员与层紧密的联系.比如,在Product 层次中, 任何产品名称层的成员在商标层上都有一个父亲,商标层上的成员在产品子目录层也都有一个父亲. 这种结构对于现实世界中的数据有时候太严格了.一个父子层次只有一层 (不计算 'all' 层), 但是任何成员可以在同一层上有父亲成员. 一个典型的例子是Employees 层次:<Dimension name="Employees" foreignKey="employee_id"><Hierarchy hasAll="true" allMemberName="All Employees"primaryKey="employee_id"><Table name="employee"/><Level name="Employee Id" uniqueMembers="true" type="Numeric"column="employee_id" nameColumn="full_name"parentColumn="supervisor_id" nullParentValue="0"><Property name="Marital Status" column="marital_status"/><Property name="Position Title" column="position_title"/><Property name="Gender" column="gender"/><Property name="Salary" column="salary"/><Property name="Education Level" column="education_level"/><Property name="Management Role" column="management_role"/></Level></Hierarchy></Dimension>这里parentColumn 和nullParentValue是重要的属性:属性parentColumn 是一个成员连接到它父亲成员的列名。

相关文档
最新文档