MDX示例:统计各产品每个季度的销售排名
ITPUB数据仓库与数据挖掘论坛用户Damon__Li问:
统计各种产品在本年每个季度的销售排名,(现在有日期、产品维度和销售额度量)大体显示如下
Q1 Q2 Q3 Q4
销售额 排名 销售额 排名 销售额 排名 销售额 排名
产品1 3000 2 2000 3 5000 1 4000 1
产品2 4000 1 3000 2 4000 2 2000 3
产品3 2000 3 4000 1 3000 3 3000 2
…….
请熟悉MDX的前辈指点,提供思路。
10多年前就搞MDX,尽管现在不从事这方面工作了,但这种问题看到就手痒。
以下是在SSAS 2008 R2 及SQL Server [Adventure Works]示例数据库(在Codeplex有下载)给出的求解(示例中,季度位于时间维度第2层级):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
WITH MEMBER
[Measures].[SalesRank] AS RANK( [Product].[Product
Categories].currentmember, [Product].[Product
Categories].[ All Products].children
, [Measures].[Sales
Amount] ) SELECT {DESCENDANTS([ Date ].[Calendar].[Calendar Year ].&[2007],2)} *{[Measures].[Sales
Amount],[Measures].[SalesRank]} ON 0, [Product].[Product
Categories].[ All Products].children
ON 1 FROM [Adventure
Works] |
以下是在SSAS中执行的情况,可以将[Date].[Calendar].[Calendar Year].&[2007]用[Date].[Calendar].CurrentMember替换,改为在WHERE语句里指定年度[Date].[Calendar].[Calendar Year].&[2007],放在查询切片中后,利于在切片中指定查询条件。