`

mondrian中用mdx计算父级百分比和整体百分比

 
阅读更多

mdx计算父级百分比:

With
//整体百分比
Member [Measures].[用户的百分比1] as 
([Measures].[总用户] / ([Measures].[总用户], [时间].CurrentMember.Parent))
, format_string = "|#.00%|"
Member [Measures].[用户的百分比2] as 
([Measures].[总用户] / ([Measures].[总用户], [客户].CurrentMember.Parent, [时间].CurrentMember.Parent))
, format_string = "|#.00%|"
SELECT
NON EMPTY {[Measures].[总用户], [Measures].[用户的百分比1], [Measures].[用户的百分比2]} ON COLUMNS,
NON EMPTY CrossJoin([客户].[客户编号].Members, [时间].[日].Members) ON ROWS
FROM [TotalUserCube]

 mdx计算整体百分比:

With
//整体百分比
Member [Measures].[用户的整体百分比] as 
([Measures].[总用户] / ([Measures].[总用户], [时间].[All 时间s]))
, format_string = "|#.00%|"
SELECT
NON EMPTY {[Measures].[总用户], [Measures].[推送用户的百分比]
} ON COLUMNS,
NON EMPTY {Hierarchize({[时间].[日].Members})} ON ROWS
FROM [TotalUserCube]

好的,你已经获得了你想要的精确的计算指标。然而你不可能让用户也去看这些复杂的MDX表达式,并且做复制和粘贴。此外,随着时间推移,这些表达式还可能发生变化。所以,一个更好的办法是,让这些MDX成为你的cube的一部分。这样,你的用户就可以仅仅引用它们,而不需要理会这些表达式的复杂性。

 

在Mondrian的设计器Schema Workbench中配置如下指标,其xml如下:

<CalculatedMember name="User Percent of Total" dimension="Measures" formula="([Measures].[总用户] / ([Measures].[总用户], [时间].CurrentMember.Parent))" />

 

 

 

 

同比:是指与上一个期间的比较,比如今年的1月和去年的1月增长多少,本月1日与上月1日增长多少,等等。

环比:是本期与上期比较,如:2月比1月增长多少,2日比1日增长多少等等。

 

在做同比和环比的时候必须有一个时间维度。下面是两个简单的MDX。

同比:

Iif (
   IsEmpty(([时间].[年-月].CurrentMember.PrevMember, [Measures].[销售数量])) 
   OR IsEmpty([Measures].[销售数量]) 
   OR ([时间].[年-月].CurrentMember.PrevMember, [Measures].[销售数量]) = 0
   OR [Measures].[销售数量] = 0
   , NULL
   , ([Measures].[销售数量] / ([时间].[年-月].CurrentMember.PrevMember, [Measures].[销售数量]) - 1)
 )

同比:

Iif (
   IsEmpty((ParallelPeriod([时间].[年-月].CurrentMember.Parent.LEVEL, 1, [时间].[年-月].CurrentMember), [Measures].[销售数量])) 
   OR IsEmpty([Measures].[销售数量]) 
   OR (ParallelPeriod([时间].[年-月].[年], 1, [时间].[年-月].CurrentMember), [Measures].[销售数量]) = 0
   OR [Measures].[销售数量] = 0
   OR ([时间].[年-月].CurrentMember.LEVEL IS [时间].[年-月].[年])
   , NULL
   , ([Measures].[销售数量] / (ParallelPeriod([时间].[年-月].CurrentMember.Parent.LEVEL, 1, [时间].[年-月].CurrentMember), [Measures].[销售数量]) - 1)
)

注意判断空值和除0的情况。比如时间开始是2007年1月,如果在月上做环比,那么它与2006年12月的环比就不存在,其2006年12月的值为空,直接进行比的话,系统就会输出一个错误表示除空或0的值,那么在比之前进行空或0判断,然后处理成空或其它值,这样就不会出现错误了。比如上面的两个MDX都是写在Iif函数里面的,当出现空或0时就处理为NULL,这样就不会有错误数据出现了。

 

 

...

分享到:
评论

相关推荐

    mondrian ROLAP MDX 经典资料

    mondrian ROLAP MDX 经典资料打包。 MDX的基本语法及概念.ppt ROLAP的概念.ppt 如何将Mondrian用于web项目.ppt MDX的基本语法及概念.ppt doc_cn jpivot

    Mondrian解析MDX成sql语句的分析与整理

    基本的MDX语句由一组轴(Axes)、一个选择集(Set)和可选的计算成员(Calculated Member)组成。例如,以下简单的MDX查询: ``` SELECT [Measures].[Sales] ON COLUMNS, [Time].[Year].[2005] ON ROWS FROM [Sales...

    mondrian源码分析与说明.pdf

    RolapEvaluator是mondrian的计算引擎,它执行MDX查询中的计算逻辑,包括过滤、聚合、排序等操作。 通过以上分析,我们可以看到mondrian的源码结构清晰,各部分职责明确,为开发者提供了深入理解和定制mondrian的...

    Mondrian实例

    MDX语句通常包括选择维度成员、定义计算、创建切片和透视等操作。例如,你可以使用MDX查询某个时间段内的产品销售额,或者对比不同地区的销售表现。 **三、实例中的mondrian_test文件** 在这个实例中,`mondrian_...

    Mondrian用于web项目

    Mondrian支持MDX(多维表达式)语言,这是一种专门用于查询多维数据集的语言,提供了丰富的分析和聚合功能。 二、Mondrian与Web项目的集成 1. 使用JDBC连接:Mondrian通过JDBC(Java Database Connectivity)与后端...

    mondrian-api.zip

    通过mondrian的API,开发者可以解析和执行MDX查询,获取分析结果。 8. ** Mondrian JDBC Driver**: mondrian提供了JDBC驱动,使得应用程序可以通过标准的JDBC接口与mondrian交互,方便集成到各种Java应用中。 9. *...

    mondrian源码分析和改造设计.doc

    Mondrian 的架构主要分为三个部分:静态类包、Schema Manager 和计算层。 静态类包分析 Mondrian 的静态类包主要包括 mondrian.calc、mondrian.olap 和 mondrian.rolap 等包。这些包中的类提供了 Mondrian 的核心...

    Mondrian+Oracle 实例

    在这个"Mondrian+Oracle 实例"中,我们将深入探讨如何配置和使用Mondrian与Oracle数据库的集成,以及如何解决可能出现的问题。 1. **Mondrian概述** Mondrian是一个基于Java的OLAP服务器,它解析多维数据模型...

    mondrian操作手册和优化配置

    在 mondrian 中,通过 jpivot 标签来定义数据源和 MDX 查询,以便mondrian 可以连接到像 Oracle 这样的关系型数据库并执行查询。 例如,下面的 MDX 查询展示了如何定义六个维度(例如 [Measures].[Charge] 和 ...

    如何将Mondrian用于web项目.ppt

    2. **维度层 (the dimensional layer)**:负责解析、验证MDX查询,并执行计算坐标轴和单元值的步骤。为了提高性能,维度层批量处理查询请求,并通过查询转换器和集合层交互。 3. **集合层 (the star layer)**:集合...

    mondrian 源码

    2. **计算引擎**:mondrian的计算引擎处理MDX查询的执行逻辑,包括对多维数据集的操作和计算。这部分代码涉及到数据的检索、聚合和过滤。 3. **缓存管理**:为了提高性能,mondrian使用缓存来存储先前计算的结果。...

    数据分析工具mondrian教程

    通过学习这个教程,你将能够熟练地运用mondrian进行数据分析,创建自定义的OLAP Cube,理解和使用MDX查询语言,以及将mondrian集成到Web应用中,从而提升数据驱动决策的能力。不断实践和深入理解这些知识,你将成为...

    mondrian-3.0-technical-guide_2.pdf

    总结来说,该文档是Mondrian 3.0.4的技术指南,它涵盖了Mondrian的核心概念和高级功能,包括模式设计、MDX查询、聚合表、缓存控制和性能优化等多个方面的详细说明。这对于开发基于Mondrian的OLAP解决方案的IT专业...

    联机分析olap之mondrian

    在OLAP系统中,Mondrian是一个开源的多维数据集引擎,常用于构建数据仓库和商务智能应用。本文将深入探讨Mondrian的核心特性、工作原理以及如何使用它来构建高效的数据分析平台。 一、Mondrian简介 Mondrian是由...

    mondrian支持的函数以及schame元素属性

    1. 使用JasperReports或Pentaho BI Server构建仪表板和报告,mondrian作为数据源提供MDX查询支持。 2. 结合Web前端框架(如React或Vue),通过Ajax调用 mondrian 的MDX接口,实现实时数据可视化。 3. 利用 mondrian ...

    Mondrian和olap4j api的示例

    5. **定制计算和虚拟立方体**:如何利用Mondrian的自定义功能创建计算成员和虚拟立方体。 6. **性能优化**:可能涉及如何调整Mondrian和olap4j的设置以提高查询性能。 学习和理解这些示例,开发者可以更好地掌握...

    MDX详解文档

    Mondrian则是一款用Java编写的开源OLAP服务器,它支持MDX语言及XML for Analysis (XMLA) 和 JOLAP 规范。本文将详细介绍MDX的基础概念、Mondrian的安装与配置以及如何利用Mondrian执行基本的MDX查询。 #### 二、...

    mondrian3.5

    Mondrian是一个开放源代码的Rolap服务器,使用java开发的。它实现了xmla和jolap规范,而且自定义了一种使用mdx语言的客户端接口。...在功能上,Mondrian支持共享维和成员计算,支持星型模型和雪花模型的功能。

    mondrian源码分析与说明.doc

    mondrian.calc 包包含了计算相关的类和方法,例如计算引擎、函数调用等。 * mdx 函数包:该包包含了多个 mdx 函数,例如 SUM、AVG、COUNT 等。 * funCall:该类负责管理函数调用,例如函数的定义、参数和返回值。 *...

    mondrian的基本模式

    它允许用户通过 MDX(多维表达式)查询语言进行复杂的数据分析和报告。mondrian 模式文件是描述这种多维数据库逻辑结构的 XML 文档,它定义了数据立方、维、层次和成员,同时将这些逻辑元素映射到实际的数据存储,...

Global site tag (gtag.js) - Google Analytics