`

MDX语句及函数应用举例

阅读更多
成员百分比分析
函数:CurrentMember、Parent等;
分析各城市的销售所占全部城市的总销售额百分比。
WITH MEMBER Measures.[Unit Sales Percent] AS '((Store.CURRENTMEMBER, Measures.[Unit Sales]) / (Store.CURRENTMEMBER.PARENT, Measures.[Unit Sales])) ', FORMAT_STRING = 'Percent'

SELECT {Measures.[Unit Sales], Measures.[Unit Sales Percent]} ON COLUMNS,

ORDER(DESCENDANTS(Store.[USA].[CA], Store.[Store City], SELF),[Measures].[Unit Sales], ASC) ON ROWS

FROM Sales

重要顾客分布分析
函数:Count、Sum、Filter、Descendants等;
分析各个省份中重要顾客的数量及他们的总购买量,"重要顾客"的定义是一个顾客的购买金额或者购买数目达到或超过一定的数值。

WITH MEMBER [Measures].[Qualified Count] AS                ‘ COUNT(FILTER(DESCENDANTS(Customers.CURRENTMEMBER, [Customers].[Name]), ([Measures].[Store Sales]) > 10000 OR ([Measures].[Unit Sales]) > 10))'               


MEMBER [Measures].[Qualified Sales] AS 'SUM(FILTER(DESCENDANTS(Customers.CURRENTMEMBER, [Customers].[Name]), ([Measures].[Store Sales]) > 10000 OR ([Measures].[Unit Sales]) > 10), ([Measures].[Store Sales]))'


SELECT {[Measures].[Qualified Count], [Measures].[Qualified Sales]} ON COLUMNS,

DESCENDANTS([Customers].[All Customers], [State Province], SELF_AND_BEFORE) ON ROWS

FROM Sales

 
排序
函数:Order
对各个产品类别按照Store Sales指标降序排列,排序分为维内排序/整体排序。
select {[Measures].[Unit Sales], [Measures].[Store Sales]} on columns,

Order([Product].[Product Department].members, [Measures].[Store Sales], DESC) on rows

from Sales
 
历史相关的累计值
函数:YTD、Sum、Descendants
求销售额的本年累计值YTD(),类似还可以求解历史累计YTD()、本月累计MTD()、本周累计WTD()等, 以及更通用的函数PeriodToDate()。
with member [Measures].[Accumulated Sales] as 'Sum(YTD(),[Measures].[Store Sales])'

select                   {[Measures].[Store Sales],[Measures].[Accumulated Sales]} on columns, {Descendants([Time].[1997],[Time].[Month])} on rows

from [Warehouse and Sales]
 
四则运算
函数:四则运算函数;
在成员上及指标上均可以进行四则运算,动态派生出新的成员及指标。

WITH MEMBER MEASURES.ProfitPercent AS '([Measures].[Store Sales]-[Measures].[Store Cost])/([Measures].[Store Cost])',FORMAT_STRING = '#.00%'

MEMBER [Time].[First Half 97] AS  '[Time].[1997].[Q1] + [Time].[1997].[Q2]'

MEMBER [Time].[Second Half 97] AS '[Time].[1997].[Q3] + [Time].[1997].[Q4]'


SELECT {[Time].[First Half 97], [Time].[Second Half 97], [Time].[1997].CHILDREN} ON COLUMNS,

{[Store].[Store Country].[USA].CHILDREN} ON ROWS

FROM [Sales]

WHERE (MEASURES.ProfitPercent)


逻辑判断
函数:IIf
逻辑判断可以根据不同的条件产生不同的结果。下例判断各商店是否是啤酒及白酒的大卖家。

WITH MEMBER [Product].[BigSeller] AS 'IIf([Product].[Drink].[Alcoholic Beverages].[Beer and Wine] > 100, "Yes","No")'


SELECT {[Product].[BigSeller],[Product].children} ON COLUMNS,

{[Store].[All Stores].[USA].[CA].children} ON ROWS

FROM Sales


成员属性
函数:Properties、Dimension Properties
成员属性是与成员绑定的,其对应关系导致很难选择合适的使用方式。以下是使用成员属性的例子,它对应每个商店成员列出了商店类型属性,相应的,商店经理、商店规模、商店地址等属性也可以被列出。该用法稍加灵活应用就可以解决过去遇到的企业名称——〉企业代码对应展示问题。

WITH MEMBER [Measures].[StoreType] AS '[Store].CurrentMember.Properties("Store Type")',

MEMBER [Measures].[ProfitPct] AS '(Measures.[Store Sales] - Measures.[Store Cost]) / Measures.[Store Sales]', FORMAT_STRING = '##.00%'


SELECT { Descendants([Store].[USA], [Store].[Store Name])} ON COLUMNS,

{[Measures].[Store Sales], [Measures].[Store Cost], [Measures].[StoreType], [Measures].[ProfitPct] } ON ROWS"

FROM Sales


另外一种用法:

SELECT {[Measures].[Units Shipped], [Measures].[Units Ordered]} ON COLUMNS,

[Store].[Store Name].MEMBERS DIMENSION PROPERTIES [Store].[Store Name].[Store Type] ON ROWS

FROM Warehouse


多步计算实现复杂逻辑

函数:其实可以是任意函数合乎逻辑的组合


求出从来没有买过乳制品的顾客,求解过程是先求出每位顾客在过去购买的乳制品的数量累计,然后找出累计值为0的顾客。同样,过去遇到的求税额大于平均税额的海关的问题可以类似求出。

with member [Measures].[Dairy ever] as 'sum([Time].members, ([Measures].[Unit Sales],[Product].[Food].[Dairy]))'

set [Customers who never bought dairy] as 'filter([Customers].members, [Measures].[Dairy ever] = 0)'


select {[Measures].[Unit Sales], [Measures].[Dairy ever]}  on columns,

[Customers who never bought dairy] on rows

from Sales



同期、前期

函数:PrevMember、ParellelPeriod


求解各产品销售额的去年同期值,年增长率。

with member [Measures].[Store Sales Last Period] as '([Measures].[Store Sales], Time.PrevMember)', format='#,###.00'

member [Measures].[Yearly Increase Rate] as ‘([Measures].[Store Sales] - [Measures].[Store Sales Last Period])/ [Measures].[Store Sales Last Period]', FORMAT_STRING = 'Percent'


select {[Measures].[Store Sales], [Measures].[Store Sales Last Period]} on columns,

{ [Product].members} on rows

from Sales

where ([Time].[1998])


另一个例子,使用ParellelPeriod函数。

WITH MEMBER [Measures].[YTD Unit Sales] AS 'COALESCEEMPTY(SUM(YTD(), [Measures].[Unit Sales]), 0)' MEMBER [Measures].[Previous YTD Unit Sales] AS  '(Measures.[YTD Unit Sales], PARALLELPERIOD([Time].[Year]))'

MEMBER [Measures].[YTD Growth] AS '[Measures].[YTD Unit Sales] - ([Measures].[Previous YTD Unit Sales])'


SELECT {[Time].[1998]} ON COLUMNS,

{[Measures].[YTD Unit Sales], [Measures].[Previous YTD Unit Sales], [Measures].[YTD Growth]} ON ROWS

FROM Sales;


Top N分析

函数:TopCount


求解1998年总购买量处于前5名的顾客;

select {[Measures].[Store Sales]} on columns,

{TopCount([Customers].[Customer Name].members,5, [Measures].[Store Sales])} on rows

from Sales

where ([time].[1998])



成员过滤

函数:Filter、Except


求解1998年所有顾客中购买总额得到1万元以上的顾客,列出满足条件的顾客的名字、年购买数量、年购买金额。

Select {[measures].[Store Sales],[measures].[unit sales]} on columns,

FILTER(Customers.[Name].Members,[Measures].[Store Sales] > 10000) on rows

From sales

Whare ([time].[1998])


另外一种成员过滤(从所有的媒体类型中剔除No Media类型),确切的说应该是集合运算。

select {[Measures].[Unit Sales]} on columns,

except([Promotion Media].[Media Type].members,{[Promotion Media].[Media Type].[No Media]}) on rows

from Sales



时间段

函数:sum、":"运算符


求美国的商店在指定时间段内的销售额。

WITH  MEMBER [Time].[1997].[Six Month] AS 'SUM([Time].[1]:[Time].[6])'

MEMBER [Time].[1997].[Nine Month] AS 'SUM([Time].[1]:[Time].[9])'

SELECT {[Time].[1997].[Six Month],[Time].[1997].[Nine Month]} ON COLUMNS,

{[measures].[store salse]} ON ROWS

FROM Sales

Where ([Store].[USA])
分享到:
评论

相关推荐

    OLAP的MDX语句运用

    本文通过几个具体的MDX语句实例,介绍了OLAP环境中MDX语句在实际业务场景中的应用方法。包括但不限于:单位销售额占比的计算、符合条件的客户计数和销售额的统计、产品销售额统计、年初至今累计销售额的计算、利润...

    MDX解决方案(第2版)英文版

    《MDX解决方案(第2版)》是一本详细介绍多维表达式(Multidimensional Expressions,简称MDX)的专业书籍,适用于使用Microsoft SQL Server Analysis Services 2005及Hyperion Essbase进行商业智能(BI)开发的专业...

    mdx编码教程-英文版

    本教程“MDX Solutions with Microsoft SQL Server Analysis Services 2005 and Hyperion Essbase (2006), 2nd Ed.”是一本专门介绍如何使用MDX进行编码的指南,书中包含了丰富的实例,帮助读者深入理解和应用MDX。...

    MDX语言在OLAP中的应用 数据挖掘 毕业设计.pdf

    MDX语句的基本结构包括选择维度、层次、成员以及聚合函数。例如,你可以使用MDX来选择特定时间周期内的销售额,或者比较不同产品类别的销售表现。这种灵活性使得分析人员能够深入探索数据,发现隐藏的模式和趋势。 ...

    Fast Track to MDX.pdf(附演示数据库)

    同时,提供的"748080_AS2005_Waremart2005.zip"可能是一个演示数据库,用于配合教程中的实例,让学习者能够实践和理解MDX的实际应用。 MDX的核心在于它能够处理多维数据结构,这些数据结构通常由维度和度量组成。...

    15-mdx-query-exsamples.rar_mdx

    标题中的"15-mdx-query-examples.rar_mdx"暗示了这是一个包含15个经典MDX查询实例的压缩文件,这些实例对于提升MDX技能和理解其核心概念非常有帮助。 MDX的基础概念包括: 1. **维度(Dimension)**:多维数据模型中...

    mondrian源码分析与说明.pdf

    Query类是mondrian处理MDX查询的核心,它负责解析MDX语句,生成查询计划,并与执行器交互以获取结果。 2.5. 包mondrian.rolap 这个包主要处理与关系数据库的交互,实现ROLAP功能。 2.5.1. 成员读取包MemberReader ...

    MDX由浅入深

    #### 五、分析功能应用举例 ##### 5.1 成员百分比分析 可以使用MDX来计算某个成员相对于总体的百分比。例如,计算某一产品的销售额占总销售额的比例: ``` WITH MEMBER [Measures].[PercentageOfTotal] AS (...

    使用MDX读取OLAP多维数据集:第1部分

    MDX语句由多个元素组成,包括立方体引用、维度、层次、成员和轴等。例如,`SELECT [Measures].[Sales Amount] ON COLUMNS, [Time].[Year].[Year].MEMBERS ON ROWS FROM [AdventureWorksCube]` 这个简单的MDX查询,...

    sql server2005实例

    2. 查询语句:学习SELECT、INSERT、UPDATE、DELETE语句,以及更复杂的JOIN、子查询和聚合函数。 3. 触发器和存储过程:了解如何使用触发器实现业务逻辑,以及编写和调用存储过程。 4. 视图:学习视图的概念及其在...

    adomd.net 开发Bi例子

    3. **构造查询**:根据需求编写MDX或DMX语句,用于获取数据。 4. **执行查询**:通过`ExecuteCommand()`方法执行查询,并获取返回的结果集。 5. **处理结果**:解析`CellSet`或`DataReader`对象,提取所需的数据。 6...

    Microsoft SQL Server 2008 Analysis Services Unleashed

    - **DRILLTHROUGH使用**:讲解了DRILLTHROUGH语句的用法及应用场景。 **第16章:向Analysis Services写入数据** - **数据加载方法**:介绍了多种向Analysis Services加载数据的方法。 - **批量插入**:讨论了如何...

    SQL Server 2005基础教程电子教案

    SQL Server 2005是微软公司推出的一款企业级数据库管理系统,广泛应用于数据存储、数据分析和业务处理。本教程将深入浅出地介绍SQL Server 2005的基础知识,帮助初学者快速掌握其核心功能。 一、SQL Server 2005...

    Sql senvet2000课件

    - 权限控制:GRANT、DENY和REVOKE语句的应用,实现细粒度的数据访问控制。 5. **备份与恢复策略** - 备份类型:完整备份、差异备份、日志备份的理解和应用场景。 - 恢复模式:简单、完整和大容量日志恢复模式的...

    sql2005实例培训教程(很实用)

    本教程旨在提供一个实用的SQL Server 2005学习平台,帮助初学者和有一定基础的用户深入理解其核心功能和实际应用。 一、SQL Server 2005概述 SQL Server 2005是基于.NET Framework 2.0构建的,它在安全性、性能和可...

    基于微软分析服务组件的数据挖掘系统的开发.pdf

    这些用户定义的方法是通过MDX、DMX或SQL等查询语句调用的,提供了附加功能而不会引入网络通信的延迟。 文章进一步介绍了软件系统的开发思想,即使用AMO为特定用户组开发管理界面,并将Analysis Services逻辑嵌入到...

    SSAS Introduce

    以Web日志分析为例,传统的SQL可能需要处理大量的CASE WHEN语句、聚合函数以及行列转换,这在处理大规模日志数据时可能会导致性能瓶颈。而使用SSAS,可以通过构建Cube来轻松处理这类问题。例如,创建一个Cube,包含...

    SQL Server 2005技术内幕英文版CHM文件2

    1. **Transact-SQL (T-SQL)增强**:SQL Server 2005对T-SQL进行了大量改进,包括新函数、新语句和优化的执行计划。例如,新增了窗口函数,使得在复杂的数据分析中更加便捷;新的XML数据类型允许直接存储和查询XML...

    SQL Server2008高级程序设计_配套代码.rar

    这部分可能包括多维数据集的创建、Cube设计和MDX查询的实例。 10. **服务 Broker**:这是一种异步消息传递机制,用于在数据库之间或数据库内部的不同组件间通信。配套代码可能包含如何设置和使用服务 Broker 的示例...

Global site tag (gtag.js) - Google Analytics