1

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

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 页面

RANK函数可以在除 ? 之外的任何子句中使用WITH

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

4

1 回答 1

1

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

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

但是,要从字面上回答您的问题,您可以Rank在 MDX 的 select 子句中间接使用,例如,如果外部函数是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]

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

于 2013-11-14T21:29:05.873 回答