SSAS的MDX语句整理

1.基本语法:

(1)基本语法:

select 在列上展示的成员集合 on 列,在行上面展示的成员集 on 行
from cube
where 切片

第一个on 列的列可以用0来替代,on 行的行可以用1来替代

(2)MDX种的元组

元组由(members)括号来组成的。或者成员都属于某一个属性或者层次结构下,就可以用Start:End,以冒号隔开

元组里面一种成员只能出现一次

例如:

select {([Measures].[Reseller Sales Amount])}  on 0,
{
    (
        [Date].[Calendar Year].&[2001]
    ),
    (
        [Date].[Calendar Year].&[2002]
    )
} on 1
from [BF_Cube1]


还有一种写法,就是以冒号显示,这种写法只是存在与一个成员里面才行(或者层次)

select {([Measures].[Reseller Sales Amount])}  on 0,
{
    (
        [Date].[Calendar Year].&[2001]:[Date].[Calendar Year].&[2002]
    )
} on 1
from [BF_Cube1]

(3)MDX中的集合

由0-N个元组组成,而且其组成的元组数据结构必须一样,函数中成员、元组或集必须使用相同的层次结构。

select {([Measures].[Reseller Sales Amount])}  on 0,
{
	(
		[Product].[Category].&[1],[Date].[Calendar Year].&[2001]
	),
	(
		[Product].[Category].&[2],[Date].[Calendar Year].&[2001]
	)
} on 1
from [BF_Cube1]

  members关键字

non empty{}过滤空的cell

select non empty{
[Measures].[Reseller Sales Amount]} on 0,
non empty{
	{
		[Date].[Calendar Year].[Calendar Year].members
	}
	*
		[Product].[Category].[Category].members
}
on 1
from [BF_Cube1] 

(4)维度成员的加减乘

加法:

select non empty{
[Measures].[Internet Sales Amount]} on 0,
	{
		[Date].[Calendar].[Calendar Year].&[2003]
	}+
	{
		[Date].[Calendar].[Calendar Year].&[2006]
	}

on 1
from [BF_MDX]

减法:

select non empty{
[Measures].[Internet Sales Amount]} on 0,
	{
		[Date].[Calendar].[Calendar Year].members - [Date].[Calendar].[Calendar Year].&[2004]
	}
	

on 1
from [BF_MDX]

乘法:

乘法是笛卡尔积

select non empty{
[Measures].[Internet Sales Amount]} on 0,
	{
		([Date].[Calendar].[Calendar Year].members)
	}* [Geography].[Country].members
	

on 1
from [BF_MDX]

加:只能用在集合上

减,都可以,一半情况下,用在去掉一些不显示的成员.比如ALL或者UnKnown

乘,笛卡尔乘积.都可以,系统会自己判断解析

(6)一些函数和关键字

MDX里面函数很多,

1)distinct()函数,类似于T-sql的效果一样

示例:

select non empty{
[Measures].[Internet Sales Amount]} on 0,
	distinct({
		[Date].[Calendar].[Calendar Year].&[2003],[Date].[Calendar].[Calendar Year].&[2004],[Date].[Calendar].[Calendar Year].&[2004]
	})
	

on 1
from [BF_MDX]

2)MeasureGroupMeasures("Reseller Sales")函数,它返回属于指定度量值的一组度量值

select non empty{
MeasureGroupMeasures("Reseller Sales")} on 0,
    distinct({
        [Date].[Calendar].[Calendar Year].&[2003],[Date].[Calendar].[Calendar Year].&[2004],[Date].[Calendar].[Calendar Year].&[2004]
    })
    

on 1
from [BF_MDX]

3)AddCalculatedMembers(set)函数,显示set的所有兄弟姐妹计算列

select non empty{
AddCalculatedMembers([Measures].[Reseller Sales Amount])
} on 0,
	distinct({
		[Date].[Calendar].[Calendar Year].&[2003],[Date].[Calendar].[Calendar Year].&[2004],[Date].[Calendar].[Calendar Year].&[2004]
	})
	

on 1
from [BF_MDX]

4)Crossjoin函数,返回一个或多个集的叉集,类似于笛卡尔乘积

select non empty{
[Measures].[Internet Sales Amount]} on 0,
	crossjoin({
		([Date].[Calendar].[Calendar Year].members)
	}, [Geography].[Country].members)
	

on 1
from [BF_MDX]

5)Exists(Set_Expression1,Set_Expression2[,MeasureGroupName])

返回与第二个指定集的一个或多个元组共存的第一个指定集中的元组 集.该函数手动执行自动Exists以自动方式执行的操作.

如果提供了可选的<Measure Group Name>,则函数返回与第二个集中的一个或多个元组共存的元组以及在指定度量值组的事实数据表中具有关联行的元组.

select non empty{
	[Measures].[Internet Sales Amount],[Measures].[Reseller Sales Amount]
} on 0,
	exists({([Product].[Product Categories].[Category].members)}*[Product].[Color].members
	,[Product].[Subcategory].&[1])

on 1
from [BF_MDX]

where ([Geography].[Country].&[United States])
发布了144 篇原创文章 · 获赞 44 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/u013294097/article/details/102816442
MDX