例子模型
以下的MDX中用到的Hierarchy如下:
百分比
1)某个子项占总体的百分比。比如:每种Product的销售额占所有Product销售额的百分比。
WITHMEMBER[Measures].[SaleAmountRatio]AS
'[Measures].[InternetSalesAmount]/([Measures].[InternetSalesAmount],[Product].[ProductCategories].[All])',FORMAT_STRING='0.00%'
SELECT
{[Measures].[InternetSalesAmount],[Measures].[SaleAmountRatio]}ON0,
NONEMPTY[Product].[ProductCategories].[ProductName].MembersON1
FROM[AdventureWorks]
2)某个子项占其父项的百分比。比如:每种Product的销售额占其所属的SubCategory销售额的百分比。
WITHMEMBER[Measures].[SaleAmountRatio]AS
'[Measures].[InternetSalesAmount]/
([Measures].[InternetSalesAmount],[Product].[ProductCategories].CurrentMember.Parent)'
,FORMAT_STRING='0.00%'
SELECT
{[Measures].[InternetSalesAmount],[Measures].[SaleAmountRatio]}ON0,
NONEMPTYCROSSJOIN([Product].[Subcategory].[Subcategory].Members,
[Product].[ProductCategories].[ProductName].Members)ON1
FROM[AdventureWorks]
3)某个子项占其祖先的百分比。比如:每种Product的销售额占其所属的Category销售额的百分比。
WITHMEMBER[Measures].[SaleAmountRatio]AS
'[Measures].[InternetSalesAmount]/
([Measures].[InternetSalesAmount],
ANCESTOR([Product].[ProductCategories].CurrentMember,[Product].[ProductCategories].[Category]))'
,FORMAT_STRING='0.00%'
SELECT
{[Measures].[InternetSalesAmount],[Measures].[SaleAmountRatio]}ON0,
NONEMPTYCROSSJOIN([Product].[Category].[Category].Members,[Product].[ProductCategories].[ProductName].Members)ON1
FROM[AdventureWorks]
分配、分摊数量
1)根据一个Measure值来分配数量。比如:按照每种Product占总体的销售额多少来分摊成本。
WITHMEMBER[Measures].[ProductCost]AS
'([Measures].[InternetTotalProductCost],[Product].[ProductCategories].[All])*
[Measures].[InternetSalesAmount]/
([Measures].[InternetSalesAmount],[Product].[ProductCategories].[All])'
,FORMAT_STRING='0.00'
SELECT
{[Measures].[InternetSalesAmount],[Measures].[ProductCost]}ON0,
NONEMPTY[Product].[ProductCategories].[ProductName].MembersON1
FROM[AdventureWorks]
2)根据一个Hierarchy来分配数量。比如:在Product Hierarchy中计算每种Category的成本的时候,可以根据每种Category下有多少个产品来进行分配。
WITHMEMBER[Measures].[ProductCost]AS
'([Measures].[InternetTotalProductCost],[Product].[ProductCategories].[All])/
Count(
Descendants(
[Product].[ProductCategories].CurrentMember,
[Product].[ProductCategories].[ProductName],
SELF
),
INCLUDEEMPTY
)'
,FORMAT_STRING='0.00'
SELECT
{[Measures].[InternetSalesAmount],[Measures].[ProductCost]}ON0,
NONEMPTY[Product].[ProductCategories].[Category].MembersON1
FROM[AdventureWorks]
平均值
1)简单平均值。比如:计算一个月中每天平均的销售额是多少。
WITHMEMBERMeasures.[AvgGrossProfitMargin]AS
[Measures].[InternetSalesAmount]/
COUNT(Descendants([ShipDate].[Fiscal].CurrentMember,[ShipDate].[Fiscal].[Date]),INCLUDEEMPTY)

SELECT
{[Measures].[InternetSalesAmount],Measures.[AvgGrossProfitMargin]}ONCOLUMNS,
[ShipDate].[Fiscal].[month].MembersONROWS
FROM[AdventureWorks]
2)加权平均值。没有想到好的例子。
基于时间的计算
1)同比和环比。比如:今年每月的销售额和去年同期相比的变化
参见前两天写的Blog :http://www.cnblogs.com/microsheen/archive/2006/10/28/542818.html,这里要补充的是,在同比MDX中,采用COUSIN或ParallelPeriod都可以,但是采用ParallelPeriod更好一些。
2)累计到当前的统计。比如:得到一年中每一个月的累计销售额。
WITHMEMBERMeasures.[AdditiveInternetSalesAmount]AS
SUM(
PeriodsToDate([ShipDate].[Fiscal].[FiscalYear],[ShipDate].[Fiscal].CurrentMember),
[Measures].[InternetSalesAmount]
)
SELECT
{[Measures].[InternetSalesAmount],Measures.[AdditiveInternetSalesAmount]}ONCOLUMNS,
[ShipDate].[Fiscal].[month].MembersONROWS
FROM[AdventureWorks]
3)移动平均值。比如:计算一种Category过去三个月的平均销售额合计。
WITHMEMBERMeasures.[AverageInternetSalesAmount]AS
AVG(LastPeriods(3,[Date].[Calendar].CurrentMember),
[Measures].[InternetSalesAmount])
SELECT
{[Measures].[InternetSalesAmount],Measures.[AverageInternetSalesAmount]}ONCOLUMNS,
NONEMPTY([Product].[ProductCategories].[Category].Members,
DESCENDANTS([Date].[Calendar].[CalendarYear].&[2002],[Date].[Calendar].[Month],SELF)
)ONROWS
FROM[AdventureWorks]
总结
MDX的表现力非常强大,以上的一些内容希望起到抛砖引玉的作用。
分享到:
相关推荐
MDX学习1.doc和MDX学习2.doc这两份文档很可能是对上述概念的详细解释和示例,包括基本语法、常见函数的使用、实际案例分析等内容。对于初学者,理解并掌握这些基础知识,将有助于深入理解和应用MDX进行数据分析。...
本文将深入探讨MDX的一些关键函数和技巧,包括成员百分比分析、重要顾客分布分析以及聚合函数的使用。 1. **成员百分比分析**: - **CurrentMember**函数:在MDX中,CurrentMember用于返回当前上下文中的成员,...
以下是对MDX的基础学习笔记的详细解释: 1. Members 和 Children 的用法: 在MDX中,`Members`关键字用于获取维度中的所有成员,而`Children`则用于获取某个成员的所有子成员。在示例中,`[客户].[全名].members`...
除了基本的查词功能,一些电子词典软件如MDict还提供了笔记、单词卡片、同步学习记录等扩展功能,帮助用户定制个人化的学习计划,提升学习效果。 7. **兼容性与跨平台**: MDict支持Windows、Mac、iOS和Android等...
数据仓库学习笔记 数据仓库是一种特殊的数据库,旨在支持商业智能(BI)应用,旨在帮助企业更好地决策。数据仓库的核心是多维数据模型,它可以以星形模式、雪花模式和事实星座模式形式存在。 多维数据模型是数据...
mondrian是一款开源的...通过上述的MDX学习笔记,你可以深入理解MDX的基本语法、操作集合的方法以及在实际应用中如何优化查询性能。这些资料将帮助你更好地掌握mondrian的查询语言,从而更有效地分析和探索多维数据。
例如,你可以同时安装英语、法语、德语等不同语言的词典,一站式解决多种语言的学习需求。 对于移动设备用户,MDict也有对应的解决方案。以欧路词典为例,这是一款广受好评的手机词典应用,同样支持MDX格式词典的...
java日常学习,关于继承和多态的知识点,还有一些抽象类abstract类和方法的使用,这些是我的个人笔记,在学习过程不懂得东西,也仅供大家参考。
【Cognos学习笔记】 Cognos是一款由IBM公司开发的企业级商业智能(BI)和性能管理工具。它提供了一套全面的数据分析和报告解决方案,帮助企业用户更好地理解、分析和展示业务数据,从而做出明智的决策。这篇学习...
通过这个项目,开发者能够学习到如何将NextJS和MDX结合,创建一个功能丰富的数字花园站点,这种站点通常用于分享技术笔记、教程或者个人想法,具有良好的阅读体验和交互性。 在实际操作中,开发者可以参照项目的源...
标题中的“notes:我用Markdown和MDX用Next和Tailwind编写的学校笔记”表明这是一个使用Markdown、MDX、Next.js以及Tailwind CSS技术来构建的个人学习笔记项目。接下来,我们将深入探讨这些技术及其在创建这样的笔记...
【新东方美语口语笔记--4】是一份专为提升英语口语能力而设计的学习资料,由知名教育机构新东方精心编制。这份笔记以其独特的教学方法和丰富的学习资源,旨在帮助学习者实现口语的显著进步。作为新东方的最新成果,...
《Mondrian异常处理与MDX查询学习笔记》 在数据仓库和商务智能领域,OLAP(在线分析处理)引擎Mondrian是广泛使用的工具,它支持多维数据集的快速查询和分析。MDX(多维表达式)是与OLAP数据库交互的主要查询语言,...
【标题】中的知识点主要涉及到的是一个个人作品集和博客网站的构建技术,它采用的是Next.js、MDX和Chakra UI这三种技术栈。Next.js是一个基于React的服务器端渲染框架,提供了开箱即用的功能,如静态导出、代码分割...
OLAP(Online Analytical Processing)是在线分析处理的缩写,是数据分析领域中的核心技术之一,尤其在大数据和商业智能(BI)系统中扮演着至关重要的角色。Oracle OLAP是Oracle数据库产品的一部分,它提供了一个...
6. **学习笔记**:用户可以在词典中添加自己的注解和学习笔记,形成个性化的学习资料,便于日后查阅和复习。 7. **夜间模式**:为了保护用户视力,MDictPC提供夜间模式,降低屏幕亮度,减少眼睛疲劳。 8. **跨平台...
《简明英汉双解词典数据库增强版》是一个针对英语学习者和专业人士的重要资源,它将传统的纸质词典转化为数字化形式,便于用户快速查询、理解和记忆单词。这个压缩包包含了一个增强版的数据库,可能提供了更多的词汇...
在IT行业中,原型代码是软件开发过程中的一个重要环节,它代表了初步的设计和实现,用于验证概念、测试功能或者作为初期版本的基础。标题"mdx_prototypes"表明这是一个关于原型开发的项目,可能包含了多种实验性的...
另一方面,.mdx文件可能代表Markdown格式的文档,这是一种轻量级的标记语言,用于编写简洁易读的文本,通常用于创建网页、文档或笔记。在《牛津高阶英语学习词典第八版.mdx》中,每个条目可能使用Markdown语法进行...
《21世纪英汉汉英双向词典》是一款专为英语和汉语学习者设计的语言工具书,它提供了双向翻译的功能,既支持英语到中文(简体)的翻译,也支持中文(简体)到英语的翻译。这款词典在语言学习、工作或旅行中都极具实用...