在上一篇文章中,我有这个脚本:
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
。
答案 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的另一种用途。