选中
Configuration
,进入页面configuration.html.
再选中
MDX and SQL Statement Logging
,
进去,里面介绍了详细步骤!以及
log4j.properties
文件的内容。)
现在运行项目,在你的控制台就会输出相应的
sql
语句了。
下面就是
Mondrian
解析的过程:
解析过程
:
从控制台输出的信息可以分析出:
mondrian
到底执行了那些
sql
语句
.
比如,我想做一个商品向下钻取的例子:
在当前页面点击“
All Products
”
则控制台输出为:
1.>
22157 [http-8080-1] DEBUG mondrian.sql
- 1: SqlMemberSource.getMemberChildren: executing sql [
select
`producttype`.`proTypeId` as `c0`,
`producttype`.`proTypeName` as `c1`
from
`product` as `product`,
`producttype` as `producttype`
where
`product`.`proTypeId` = `producttype`.`proTypeId`
group by
`producttype`.`proTypeId`,
`producttype`.`proTypeName`
order by
ISNULL(`producttype`.`proTypeId`), `producttype`.`proTypeId` ASC
]
22203 [http-8080-1] DEBUG mondrian.sql
- 1: , exec 46 ms
22219 [http-8080-1] DEBUG mondrian.sql
- , exec+fetch 62 ms, 4 rows
*********************************************************************
2.>
22219 [http-8080-1] DEBUG mondrian.sql
- 2: RolapStar.Column.getCardinality: executing sql [
select
count(distinct `producttype`.`proTypeId`) as `c0`
from
`producttype` as `producttype`
]
22235 [http-8080-1] DEBUG mondrian.sql
- 2: , exec 16 ms
22235 [http-8080-1] DEBUG mondrian.sql
- , exec+fetch 16 ms, 1 rows
*********************************************************************
3.>
22235 [http-8080-1] DEBUG mondrian.sql
- 3: Segment.load: executing sql [
select
`producttype`.`proTypeId` as `c0`,
sum(`sale`.`number`) as `m0`,
sum((unitPrice*number)) as `m1`
from
`producttype` as `producttype`,
`product` as `product`,
`sale` as `sale`
where
`sale`.`proId` = `product`.`proId` and
`product`.`proTypeId` = `producttype`.`proTypeId`
group by
`producttype`.`proTypeId`
]
22250 [http-8080-1] DEBUG mondrian.sql
- 3: , exec 15 ms
22250 [http-8080-1] DEBUG mondrian.sql
- , exec+fetch 15 ms, 4 rows
如果在上个页面的基础上再点击“
All Products
”下的子集“
Electrical Equipments
”,
如下图片所示:
则控制台打印出的结果是:
4.>
2840907 [http-8080-2] DEBUG mondrian.sql
- 4: SqlMemberSource.getMemberChildren: executing sql [
select
`product`.`proId` as `c0`,
`product`.`proName` as `c1`
from
`product` as `product`,
`producttype` as `producttype`
where
`product`.`proTypeId` = `producttype`.`proTypeId` and
(`producttype`.`proTypeId` = '1')
group by
`product`.`proId`,
`product`.`proName`
order by
ISNULL(`product`.`proId`), `product`.`proId` ASC
]
2840907 [http-8080-2] DEBUG mondrian.sql
- 4: , exec 0 ms
2840907 [http-8080-2] DEBUG mondrian.sql
- , exec+fetch 0 ms, 3 rows
*********************************************************************
5.>
2840907 [http-8080-2] DEBUG mondrian.sql
- 5: RolapStar.Column.getCardinality: executing sql [
select
count(distinct `product`.`proId`) as `c0`
from
`product` as `product`
]
2840907 [http-8080-2] DEBUG mondrian.sql
- 5: , exec 0 ms
2840907 [http-8080-2] DEBUG mondrian.sql
- , exec+fetch 0 ms, 1 rows
*********************************************************************
6.>
2840907 [http-8080-2] DEBUG mondrian.sql
- 6: Segment.load: executing sql [
select
`product`.`proId` as `c0`,
sum(`sale`.`number`) as `m0`,
sum((unitPrice*number)) as `m1`
from
`product` as `product`,
`sale` as `sale`
where
`sale`.`proId` = `product`.`proId` and
`product`.`proId` in ('1', '2', '9')
group by
`product`.`proId`
]
2840922 [http-8080-2] DEBUG mondrian.sql
- 6: , exec 15 ms
2840922 [http-8080-2] DEBUG mondrian.sql
- , exec+fetch 15 ms, 3 rows
由上面的步骤
1>,2>,3>;
以及后面
的
4>,5>,6>
我们就可以得出:
mondrian
做
drill down
(向下钻取)的时候一般执行
3
个
sql .
而每个
sql
的语法格式大概如下
:
*****: executing sql [
执行的
sql ]
,
***** : exec
时间
,
*****: exec + fetch
时间
,
取得的数据行数
.
其中前面的
*****
部分是看你执行的那些操作,
第一个
sql
:
取得
dimension
子元素的名称
:
一般通过如下
sql
取得(即我上面所说的第
1>
,第
4>
步)
:
SqlMemberSource.getMemberChildren: executing sql [
select
`producttype`.`proTypeId` as `c0`,
`producttype`.`proTypeName` as `c1`
from
`product` as `product`,
`producttype` as `producttype`
where
`product`.`proTypeId` = `producttype`.`proTypeId`
group by
`producttype`.`proTypeId`,
`producttype`.`proTypeName`
order by
ISNULL(`producttype`.`proTypeId`), `producttype`.`proTypeId` ASC
]
第二个
sql
:
取得左边的
dimension
的一个层次结构下的子元素的数目
.
比如
All Products
下就有四个
.
其
sql
语句就如我上面所列出的第
2>,
第
5>
步格式,在此就不再再拷贝下来了。
第三个
sql
:
取得对应
dimension
的实际数据
,
其
sql
语句就像我上面所列出的第
3>,
第
6>
步格式,在此也不再拷贝下来了。
假如你想
mdx
和
sql
一起对比着看,可以在
log4j.properties
里面写入:
log4j.category.mondrian.mdx=
MONDRIAN
log4j.category.mondrian.sql=
DEBUG
这样控制台输出的结果就如下面的这种格式:
6297 [http-8080-1] DEBUG mondrian.mdx
- 0: select {[Measures].[Number], [Measures].[Total Sale]} ON COLUMNS,
{[Product Category].[All Products]} ON ROWS
from [Sales]
6562 [http-8080-1] DEBUG mondrian.sql
- 0: Segment.load: executing sql [
select
sum(`sale`.`number`) as `m0`,
sum((unitPrice*number)) as `m1`
from
`sale` as `sale`
]
6578 [http-8080-1] DEBUG mondrian.sql
- 0: , exec 16 ms
相关推荐
Mondrian通过XMLA(XML for Analysis)协议与SQL Server交互,将用户的MDX查询转化为SQL语句,由SQL Server执行并返回结果。MDX是一种专用于多维数据集的查询语言,它允许用户以直观的方式选择和切片多维数据,提取...
Mondrian通过解析MDX查询,将它们转化为SQL语句,进而从关系数据库中获取数据。这种设计使得Mondrian能够灵活地与各种RDBMS(关系型数据库管理系统)集成。 二、Mondrian的工作原理 Mondrian的核心组件包括元数据...
Mondrian是一款开源的在线分析处理(OLAP)引擎,它主要用Java编写,被广泛应用于数据分析和商业智能系统中。本实例将带你深入理解如何利用Mondrian来执行多维数据表达式(MDX)查询,针对已构建的数据立方体XML进行...
### Pentaho多维分析(Mondrian)使用指南:核心知识点解析 #### 一、Mondrian:Java ROLAP引擎 Mondrian是Pentaho Analysis Services的核心组件,一个功能强大的多维分析(OLAP)引擎,尤其适用于基于关系数据库...
Mondrian 实现了多维数据建模、MDX(多维表达式)语句解析和分析结果返回等功能,允许用户无需编写 SQL 即可分析存储在 SQL 数据库中的大规模数据集。 Mondrian 支持多种数据库系统,如 LucidDb、Oracle、Access、...
mondrian是一个元数据驱动的多维立方体引擎,它能够解析多维查询并将其转换为关系数据库的SQL语句。而jpviot则是一个Web界面工具,它提供了与mondrian交互的能力,让用户可以通过图形化界面进行数据分析。 标题中的...
### MDX详解与Mondrian应用 #### 一、引言 MDX(Multidimensional Expressions)是一种专为多维数据集设计的查询语言,主要用于OLAP(Online Analytical Processing,在线分析处理)系统中进行数据分析。Mondrian则...
MDX 与 SQL 类似,但设计用于在多维数据模型上工作,允许用户选择、切片和 dice 数据以进行深入分析。在 mondrian 中,通过 jpivot 标签来定义数据源和 MDX 查询,以便mondrian 可以连接到像 Oracle 这样的关系型...
- **Mondrian MDX方言与Microsoft Analysis Services的区别**:比较了Mondrian的MDX方言与Microsoft Analysis Services的MDX方言之间的差异。 - **如何扩展Mondrian**:提供了关于如何通过插件机制等方式来扩展...
而Mondrian则提供了一个维度视图,解析MDX查询,生成SQL语句,进行缓存,并进行更高级别的计算和聚合意识,构建OLAP立方体的XML schema。 总结来说,利用MySQL Enterprise和Mondrian开发数据仓库应用程序,能够实现...
Mondrian提供了一套专有的API供客户端查询使用,虽然没有通用的OLAP查询API,但对于熟悉JDBC的开发者来说,Mondrian的API仍然易于上手,只是查询语言换成了MDX而非SQL。以下是一段示例代码,展示了如何使用Mondrian ...
`jdbc4olap` 驱动程序通过将标准的SQL语句转换为多维表达式(MDX)语言,使得不熟悉MDX的开发人员也能利用其强大的功能。MDX是专门设计用于查询和操作OLAP数据的,具有丰富的语法,可以处理复杂的分析查询。 在`...
Pentaho报表设计向导集成了对Mondrian的支持,允许用户直接编写MDX查询语句。 - **XQuery**:支持XQuery查询,适用于处理XML数据,增强了处理结构化数据的能力。 - **MapTemplate**:支持地图模板,可以在报表中...
- **查询**:用于从数据源中提取特定数据的 SQL 或其他类型的查询语句。 - **图像**:在报告中使用的图形元素,可以是图表、图片或其他类型的可视化对象。 - **输入控件**:允许用户在运行报告时动态输入参数的界面...
包含了一个逻辑模型,而这个逻辑模型的目的是为了书写 MDX 语言的查询语句。这个逻辑模型实际上提供了这几个概念: Cubes (立方体)、维度( Dimensions )、层次( Hierarchies )、级别( Levels )、和成员( ...
- **查询语句:** 用于从服务器检索数据的 MDX 查询。 - **应用场景:** - 在需要从 OLAP 服务器获取数据进行分析时,此组件可以方便地读取 Mondrian 服务器中的数据。 ##### tMSSqlSCD **组件描述:** `...