壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 239|回复: 0

复杂或有趣的MDX问题求解(4)- 求过去12个月的销售总额

[复制链接]
发表于 2012/3/14 16:47:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
在业务中经常要求不但需要知道指标的当月表现,而且需要知道近期的趋势,一般是通过对该指标过去12个月的表现来实现的。

问题描述
以一个超市的洗衣粉销售为例,有如下的实事表:
品名(productName)      单价(unitPrice)      数量(qty)    日期(年月)
......
......
立白                          4.0                    30      200807
立白                          4.2                    50      200808
立白                          4.2                    50      200808
汰渍                          5.0                    40      200807
汰渍                          5.0                    40      200808
汰渍                          5.2                    40      200809
......
......
现在我想计算洗衣粉在8,9,10,11月份的年销售额,这里的年销售额大家可能会误解,2008年8月的
年销售额指的是从2007年9月到2008年8月这一年里的所有品牌所所有洗衣粉的销售总额,依次类推。
请问我怎么用MDX写出这样的查询。
我的难点有两个:
1、我没有办法汇总单个月份的年销售总额
2、有没有办法同时得出几个月的年销售总额

假设
1、以MS2000 SASS自带Foodmart为例;

2、假使[Measures].[Unit Sales],[Measures].[Sales Count]分别代表平均单价(注意:架设已经有效平均)和销售数量。

解答
为了便于掌握,逐步解析如下:

1、对过去12个月的获取

with set [过去12个月份] AS 'LastPeriods(12,[Time].[1998].[Q4].[10])'

select   {[过去12个月份]} on columns
from sales

返回的结果只有列头,各列分别表示[Time].[1998].[Q4].[10]之前(包括它自己)刚刚过去的12个月,即[Time].[1997].[Q4].[11]~[Time].[1998].[Q4].[10]

2、获取过去12个月中,每个月的销售额

with set [过去12个月份] AS 'LastPeriods(12,[Time].[1998].[Q4].[10])'
     member [Measures].[销售额] AS '[Measures].[Unit Sales]*[Measures].[Sales Count]',FORMAT_STRING = '#.00'

select    {[Measures].[Unit Sales],[Measures].[Sales Count],[Measures].[销售额]} on rows,    {[过去12个月份]} on columns
from sales

返回结果的列头如上次,行头分别为平均单价、销售数量、销售额。

3、汇总单个月过去12个月的销售额

with member [Time].[过去12个月份合计] AS 'Aggregate(LastPeriods(12,[Time].[1998].[Q4].[10]))'

member [Measures].[销售额] AS '[Measures].[Unit Sales]*[Measures].[Sales Count]',FORMAT_STRING = '#.00'

select {[Measures].[销售额]} on columns,
  {[Time].[过去12个月份合计]} on rows
from sales

4、同时得出针对指定的几个月的过去12个月的销售额总计

4.1 如果是随机指定的几个月份,则这样写:

with member [Measures].[过去12个月份销售额合计] AS 'sum(LastPeriods(12,[Time].CurrentMember),[Measures].[Unit Sales]*[Measures].[Sales Count])',FORMAT_STRING = '#.00'
select     {[Measures].[过去12个月份销售额合计]} on columns,
    {[Time].[1998].[Q3].[8],[Time].[1998].[Q3].[9],[Time].[1998].[Q4].[10]} on rows
from sales

4.2 如果关注的连续的月份,则可以使用时间函数。比如如果关注的是当前月份(假定是[Time].[1998].[Q4].[10])的前三个月,对其中每个月求过去12个月的销售额合计,则这样写:

with set [关注月份] AS 'LastPeriods(3,[Time].[1998].[Q4].[10])'
member [Measures].[过去12个月份销售额合计] AS 'sum(LastPeriods(12,[Time].CurrentMember),[Measures].[Unit Sales]*[Measures].[Sales Count])',FORMAT_STRING = '#.00'
select
    {[Measures].[过去12个月份销售额合计]} on columns,
    {[关注月份]} on rows
from sales

5.关于问题中产品维

处理指标维和时间维,其他维度(比如问题中的产品维),应该不受影响。

6.补充说明一个老话题:

需要注意的是,建立Cube时,销售额应该在事实表的级别用单价和数量在第一轮首先计算出来结论才正确. 否则,采用"月份总额=月份单价聚合*月份数量聚合"是不正确的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 10:50 , Processed in 0.013331 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表