Mdx RANK函数可以在WITH子句以外的任何地方使用吗

Mdx RANK函数可以在WITH子句以外的任何地方使用吗,mdx,Mdx,在上一篇文章中,我有这样一个脚本: WITH SET [orderedSet] AS ORDER( [Operator].members, [Operator].currentmember.name, BASC ) MEMBER [Measures].[newMeasure] AS RANK( [Operator].currentmember, [orderedSet] ) SELECT [Measures].[n

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

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]
加上进一步参考

RANK
函数能否用于除
WITH
以外的任何子句中


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

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

请注意,在MDX中,select子句中的轴是集合,因此不能使用Rank或在axis子句中返回数值表达式的任何函数,而只能使用返回集合(或隐式转换为集合的元组等某些数据类型)的函数。 在使用该表达式之前,必须定义返回集合的表达式中出现的所有成员。因此,不能像使用表达式在SQL selects中定义结果列那样在axis子句中定义它们

但是,要从字面上回答您的问题,您可以在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]
选择{[Measures].[Internet销售额]}
在专栏上,
滤器(
[Customer].[Customer Geography].[Country]。成员为C,

排名(C.Current、[Customer].[Customer Geography].[Country].Members)可以在任何可以使用数字表达式的地方使用

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

但是,为了逐字回答您的问题,您可以在MDX中的select子句中间接使用
Rank
,例如,如果外部函数是
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]
选择{[Measures].[Internet销售额]}
在专栏上,
滤器(
[Customer].[Customer Geography].[Country]。成员为C,

排名(C.当前[客户][客户地理][国家].成员)+1非常好的信息-谢谢Frank。就像使用
alias
C
…这不是我以前见过的,但它似乎使
filter
更具可读性。@如果需要引用迭代的当前值,为什么在
filter
Generate
之类的函数中需要这些别名?这可以是o在某些情况下输入,只是来自上下文,但是
Rank
需要一个非空的第一个参数,因此您需要使用别名。+1非常好的信息-谢谢Frank。就像使用
别名
C
…这不是我以前见过的,但它似乎使
过滤器更可读。@whytheq您需要这些如果需要引用迭代的当前值,则函数中的别名,如
Filter
Generate
。在某些情况下,这可以忽略,并且仅来自上下文,但是
Rank
需要非空的第一个参数,因此需要使用别名。