03

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

在业务中经常要求不但需要知道指标的当月表现,而且需要知道近期的趋势,一般是通过对该指标过去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、有没有办法同时得出几个月的年销售总额

问题来源:CSDN yls087412

假设

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时,销售额应该在事实表的级别用单价和数量在第一轮首先计算出来结论才正确. 否则,采用”月份总额=月份单价聚合*月份数量聚合”是不正确的.

VN:F [1.9.13_1145]
Rating: 10.0/10 (1 vote cast)
复杂或有趣的MDX问题求解(4)- 求过去12个月的销售总额, 10.0 out of 10 based on 1 rating

相关文章:

  1. 复杂或有趣的MDX问题求解(1)-多个相关列参与求加权平均值
  2. 复杂或有趣的MDX问题求解(3)-SQL查询事实表与MDX语句查询的关系示例
  3. 一些常用的MDX查询语句(示例基于SSAS2005/SSAS2008)
  4. SSAS2005及SSAS2008中自定义MDX查询语句模板的使用
  5. 复杂或有趣的MDX问题求解(2)-根据客户上期表现求本期、本年的表现

当前没有评论!

第一个在本文留言。

发表评论

名字(必须)
邮箱(必须),(永不被公布)
网址(建议)

字体为 粗体 是必填项目,邮箱地址 永远不会 公布。

允许部分 HTML 代码:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
URLs(网站链接)必须完整有效 (比如: http://www.bi-professional.com),所有标签都必须完整的关闭。

超出部分系统将会自动分段及换行。

请保证评论内容是与日志或 Blog 内容相关的,灌水、攻击性或不恰当的评论 可能 会被编辑或删除。