SSAS的MDX的基础函数(二)

1.Order(Set_Expression,Numberic_Expression[,{ASC|DESC|BASC|BDESC}])

Order函数既可以考虑层次结构(通过使用ASC或DESC标志来指定),也可以不考虑层次结构(通过使用BASC或BDESC标志来指定,其中B表示"打乱层次结构").如果指定了ASC或DESC,则Order函数先根据成员在层次结构中的位置进行排序,然后对每一级别进行排序.如果指定了BASC或BDESC,则Order函数排列集中的所有成员时不考虑层次结构.如果未指定任何标志,则默认为"ASC"

如果Order函数用于其两个或多个层次结构执行叉积的集合,并且使用DESC标志,则只对该集合中最后一个层次结构的成员进行排序.这与Analysis service 2000不同,厚泽对集合中的所有层次结构进行排序.

示例:

SELECT{([Measures].[Reseller Sales Amount])} ON COLUMNS,
Order(
{[Product].[Subcategory].children},
([Measures].[Reseller Sales Amount]),DESC)
ON ROWS
from[BF_MDX]

效果如下:

  

2. 结合vba函数

SELECT{([Measures].[Reseller Sales Amount]),([Measures].[Internet Sales Amount])}

ON COLUMNS,Order({[Product].[Product].[Product].Members},

VBAMDX!ABS(([Measures].[Reseller Sales Amount]) -([Measures].[Internet Sales Amount])),DESC)

ON ROWS

from[BF_MDX]

效果如下,结果就是经销商减去网络销售,差距最大的往上排序:

  

3. 注意参数的区别

SELECT{([Measures].[Reseller Sales Amount])} ON COLUMNS,
Order({[Product].[Category].[Category].Members} *
{[Product].[Subcategory].[Subcategory].Members},
([Measures].[Reseller Sales Amount]),desc --BDESC
)
ON ROWS
FROM[BF_MDX]

效果如下,每个大类下的小类排序 ,如果是BDESC的话就是全局排序,不分大小类:

  

2.层次结构排序

Hierarchize(Set_Expression [ , POST ] )

Hierarchize函数按层次结构的顺序组织指定集中的成员。 此函数始终保留重复项。
如果未指定 POST ,则此函数按自然顺序对一定级别的成员进行排序。 如果未指定其他排序条件,则成员的自然顺序就是它们在层次结构中的默认排序顺序。 子成员会紧跟在它们的父成员之后。
如果指定了 POST ,则 Hierarchize 函数按非自然顺序对一定级别的成员进行排序。 也就是说,子成员优先于他们的父级。

示例:

SELECT{([Measures].[Reseller Sales Amount])} ON COLUMNS,
Hierarchize({([Product].[Product Categories].[Subcategory].[Road Bikes]),
([Product].[Product Categories].[All Products]),
([Product].[Product Categories].[Subcategory].[Mountain Bikes]),
([Product].[Product Categories].[Category].[Bikes]),
([Product].[Product Categories].[Subcategory].[Touring Bikes])})
ON ROWS
from [BF_MDX]

效果如下;

    

 3. 范围选取函数topcountbottomcount, headtail

} TopCount(< table expression >, < rank expression >, < count >)
} 按指定数量返回最前面的行,并以表达式指定的降序排列。
} BottomCount(< table expression >, < rank expression >, < count >)
} 按指定数量返回最底部的行,以表达式指定的升序排列。
} Head( Set_Expression [ , Count ] )
} Head 函数从指定集的开始处返回指定的元组数目。并保留元素的顺序。 Count 的默认值为 1 。如果指定的元组数目小于 1 ,则 Head 函数返回空集。如果指定的元组数目超过了集中的元组数目,则此函数返回原始集。
} Tail( Set_Expression [ , Count ] )
} Tail 函数从指定集的结尾处返回指定的元组数目。 会保留元素的顺序。 Count 的默认值为 1 。如果指定的元组数目小于 1 ,则该函数返回空集。 如果指定的元组数目超过了集中的元组数目,则此函数返回原始集。

示例:

SELECT{([Measures].[Reseller Sales Amount])} ON COLUMNS,
TopCount({[Product].[Subcategory].[Subcategory].Members},5,
([Measures].[Reseller Sales Amount])
) ON ROWS
from [BF_MDX]

效果:

  

示例2.

SELECT{([Measures].[Reseller Sales Amount])} ON COLUMNS,
TopCount({[Product].[Subcategory].[Subcategory].Members},5,

SELECT {([Measures].[Reseller Sales Amount])} ON COLUMNS,
head(
order(
{[Product].[Subcategory].[Subcategory].Members}
,([Measures].[Reseller Sales Amount]),desc
)
,5
) ON ROWS
from [BF_MDX]

效果:

  

4.Item函数以及综合运用一下上面的函数,

这个不太好理解,将就看吧
WITH
MEMBER [Measures].[Top Product Sales]AS{
TopCount(
[Date].[Calendar Year].currentmember*
[Product].[Product].[Product].Members,
1,
([Measures].[Internet Sales Amount])
)
*{[Measures].[Internet Sales Amount]}}.Item(0),FORMAT_STRING="Currency"

MEMBER [Measures].[Top Product Name]AS
{
TopCount(
[Date].[Calendar Year].currentmember*
[Product].[Product].[Product].members,
1,
([Measures].[Internet Sales Amount])
)
}.Item(0).item(1).name


SELECT{
([Measures].[Internet Sales Amount]),
([Measures].[Top Product Sales]),
([Measures].[Top Product Name]) } ON COLUMNS,
{
([Date].[Calendar Year].[CY 2001]): ([Date].[Calendar Year].[CY 2004])
} ON ROWS
FROM[BF_MDX]

效果:

  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值