`
刘小小尘
  • 浏览: 62470 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[MDX学习笔记之一]MDX中一些常见的计算

 
阅读更多

例子模型
以下的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学习笔记,一些函数和技巧使用

    mdx学习笔记,一些函数和技巧使用 同期, 排行, 过滤, 兄弟处理等等

    MDX学习笔记

    MDX基础学习笔记。

    微软MDX的学习笔记

    MDX入门的一些学习笔记,供初学者参考。

    一步一步学习MDX语言

    Microsoft SQL Server 2005 Analysis Services (SSAS) 允许在多维表达式 (MDX)...函数可以在任何有效的 MDX 语句中使用,并且经常用于查询、自定义汇总定义以及其他计算。本节介绍 Analysis Services 附带的 MDX 函数。

    mdx 资料 mdx 资料mdx 资料

    mdx 资料mdx 资料mdx 资料 mdx 资料

    html转mdx工具htmls2mdx

    htmls2mdx >> 可以显示图片 >> 可以页面跳转 >> 可以处理中文 >> 提供源代码 >> 不提供维护,没时间 1. 使用CHM反编译工具把chm解包到某文件夹下,比如d:\Test\chm 2. 使用htmls2mdx,输入目录d:\Test\chm 3. htmls2...

    MDX_函数的使用介绍

    MDX 函数的使用介绍。根据SqlServer2000 Analysis Services提供的帮助材料展开,略作说明并且根据各个函数的侧重点编写相应的MDX

    mdx过滤合计总计

    mdx过滤合计总计

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

    第1章 MDX入门 第2章 计算成员和命名集简介 第3章 MDX中的通用计算和选择 第4章 MDX查询上下文与执行 第5章 命名集与集的别名 第6章 MDX中的排序和分类 第7章 MDX高级应用 第8章 使用Microsoft Analysis ...

    SEW-MDX61B-伺服中文操作手册.pdf

    SEW-MDX61B-伺服中文操作手册(MOVIDRIVE MDX60/61变频器用于驱动带有鼠笼电枢的三相异步电动机或永磁三项同步交流电机)

    MDX61B中中文手册4.rar

    MDX61B中中文手册4rar,MDX61B中中文手册4

    MDX解决方案 第二版 中文

    MDX解决方案 第二版 中文 找了好久才找到的,这本书已经是绝版书了,有兴趣的可以下载看看。仅供学习MDX的同学参考哦。

    15个经典MDX查询

    15个经典MDX查询,便于MDX学习,建议下载学习

    MDX解决方案(第2版)-中文版.part2.rar

    第1章 MDX入门 第2章 计算成员和命名集简介 第3章 MDX中的通用计算和选择 第4章 MDX查询上下文与执行 第5章 命名集与集的别名 第6章 MDX中的排序和分类 第7章 MDX高级应用 第8章 使用Microsoft Analysis ...

    现代汉语词典.mdx

    mdx格式的现代汉语词典文件,共广大用户使用

    MDX解决方案_中文第二版_part1.rar

    通过学习《MDX解决方案》,您将掌握如何创建高效的多维度数据仓库,同时还可以掌握访问和分析数据的必要技能,从而能够作出更好的商业决策。  本书在简要阐述了MDX语言的语法及语义之后,直接转向MDX的使用,其中...

    mdx基本语法-例子

    doc文档,微软的原版教程资料,可以复制代码运行

    注释(MDX 语法)

    注释是程序代码中不执行的文本字符串。(注释又称为“备注”)。可以使用注释说明代码,或者暂时禁用正在诊断的部分多 维表达式 (MDX) 语句和脚本。通过使用注释说明代码,可使程序代码在日后更易于维护。通常使用...

    war3白胡子mdx格式模型

    mdx格式白胡子模型里面有一些特效,贴图路径自己用MdxPather改一下

Global site tag (gtag.js) - Google Analytics