可以在除WITH子句以外的任何位置使用RANK函数

时间:2013-11-14 16:14:06

标签: mdx

在上一篇文章中,我有这个脚本:

WITH 
SET [orderedSet] AS
    ORDER(
    [Operator].members,
    [Operator].currentmember.name,
    BASC
    )
MEMBER [Measures].[newMeasure] AS
    RANK(
    [Operator].currentmember, 
    [orderedSet]
    )
SELECT
   [Measures].[newMeasure] ON COLUMNS,
   [orderedSet] ON ROWS
FROM [ourCube]

另外还要参考MSDN page

RANK函数是否可以用于WITH以外的任何子句?

它的第一个参数是一个元组,所以我不确定如何在其他子句中使用它,例如SELECT

1 个答案:

答案 0 :(得分:1)

它可以在任何可以使用数值表达式的地方使用。

请注意,在MDX中,select子句中的轴是集合,因此您不能使用Rank或任何在axis子句中返回数值表达式的函数,而只能使用函数返回集合(或者某些数据类型,如元组,它们是隐式转换为集合)。 并且在开始使用此表达式之前,必须先定义出现在返回集合的表达式中的所有成员。因此,您无法在axis子句中定义它们,就像您可以使用表达式在SQL选择中定义结果列一样。

但是,要真正回答您的问题,您可以在MDX e的select子句中间接使用Rank。 G。如果外部函数是Filter,则返回一个集合。以下是根据属性顺序显示前三个国家的效率稍低的方法:

SELECT {[Measures].[Internet Sales Amount]}
       ON COLUMNS,
       Filter(
             [Customer].[Customer Geography].[Country].Members as C,
             Rank(C.Current, [Customer].[Customer Geography].[Country].Members) <= 3
             )
       ON ROWS
  FROM [Adventure Works]

有些人在Rank内使用Generate来反转集合,这将是在select子句中合法的Rank的另一种用途。