Ssas 同级

Ssas 同级,ssas,mdx,Ssas,Mdx,我正在使用以下命令: WITH SET [myset] AS Order ( { [Customer].[Country].[Country].MEMBERS * [Customer].[Customer].[Customer].MEMBERS } ,[Measures].[Internet Sales Amount] ,ASC ) MEMBER [Meas

我正在使用以下命令:

WITH 
  SET [myset] AS 
    Order
    (
      {
          [Customer].[Country].[Country].MEMBERS
        * 
          [Customer].[Customer].[Customer].MEMBERS
      }
     ,[Measures].[Internet Sales Amount]
     ,ASC
    ) 
  MEMBER [Measures].[rank] AS 
    Rank
    (
      (
        [Customer].[Country].CurrentMember
       ,[Customer].[Customer].CurrentMember
      )
     ,[myset]
    ) 
  MEMBER [Measures].[newrank] AS 
    IIF
    (
        [myset].Item(
        [Measures].[rank] - 1).Item(0).Name
      <> 
        [myset].Item(
        [Measures].[rank] - 2).Item(0).Name
     ,1
     ,
      ([myset].Item([Measures].[rank] - 2),[Measures].[newrank]) + 1
    ) 
SELECT 
  {
    [Measures].[Internet Sales Amount]
   ,[Measures].[rank]
   ,[Measures].[newrank]
  } ON 0
 ,[myset] ON 1
FROM [Adventure Works];
与
将[myset]设置为
命令
(
{
[客户][国家][国家][国家].成员
* 
[客户].[客户].[客户].成员
}
,[措施][互联网销售额]
,ASC
) 
成员[度量][等级]为
等级
(
(
[客户][国家].当前成员
,[Customer].[Customer].CurrentMember
)
,[myset]
) 
成员[度量][newrank]为
IIF
(
[myset]。项目(
[度量值].[rank]-1).项目(0).名称
[myset]。项目(
[度量值].[rank]-2).项目(0).名称
1.
,
([myset].Item([Measures].[rank]-2),[Measures].[newrank])+1
) 
挑选
{
[措施][互联网销售额]
,[度量][等级]
,[措施].[newrank]
}在0
,[myset]在1上
来自[冒险作品];
这是阿米什·沙阿的作品:

目前,它不会给具有相同值的元组赋予相同的等级,例如,如果x的互联网销售额为10,y也为10,则在上述情况下,它们不会具有相同的等级

是否可以更改以上内容,以便如果它们具有相同的值,则它们对于
[Measures].[rank]
-具有相同的值,并且对于
[Measures].[newrank]
具有相同的值


(在
[Measures].[rank]
的定义中添加第三个参数似乎不是一个可行的方法,因为rank函数随后进入逐单元计算模式)

使用递归计算成员怎么样-

WITH 
  SET [myset] AS 
    Order
    (
      {
          [Customer].[Country].[Country].MEMBERS
        * 
          [Customer].[Customer].[Customer].MEMBERS
      }
     ,[Measures].[Internet Sales Amount]
     ,ASC
    ) 
  MEMBER [Measures].[myrank] AS 
    Rank
    (
      (
        [Customer].[Country].CurrentMember
       ,[Customer].[Customer].CurrentMember
      )
     ,[myset]
    ) 


member prevmembervalue as 
(myset.item(myRank - 2), [Measures].[Internet Sales Amount])

member currentmembervalue as
(myset.item(myRank - 1), [Measures].[Internet Sales Amount])

MEMBER greaterthanprev as
iif(currentmembervalue > prevmembervalue, 1, 0)

member rankActual as
iif
(
 prevmembervalue = null, 1,
 iif(currentmembervalue > prevmembervalue,
  (myset.item(myRank - 2), rankActual) + 1,
  (myset.item(myRank - 2), rankActual)
 )
 )

select myset on 1,
{[Measures].[Internet Sales Amount], rankActual, myRank}
on 0
from 
[Adventure Works]

实际上不需要测量值
大于prev
currentmembervalue
preveMemberValue
。将它们添加到此处只是为了对流程进行一些补充说明。

使用递归计算成员怎么样

WITH 
  SET [myset] AS 
    Order
    (
      {
          [Customer].[Country].[Country].MEMBERS
        * 
          [Customer].[Customer].[Customer].MEMBERS
      }
     ,[Measures].[Internet Sales Amount]
     ,ASC
    ) 
  MEMBER [Measures].[myrank] AS 
    Rank
    (
      (
        [Customer].[Country].CurrentMember
       ,[Customer].[Customer].CurrentMember
      )
     ,[myset]
    ) 


member prevmembervalue as 
(myset.item(myRank - 2), [Measures].[Internet Sales Amount])

member currentmembervalue as
(myset.item(myRank - 1), [Measures].[Internet Sales Amount])

MEMBER greaterthanprev as
iif(currentmembervalue > prevmembervalue, 1, 0)

member rankActual as
iif
(
 prevmembervalue = null, 1,
 iif(currentmembervalue > prevmembervalue,
  (myset.item(myRank - 2), rankActual) + 1,
  (myset.item(myRank - 2), rankActual)
 )
 )

select myset on 1,
{[Measures].[Internet Sales Amount], rankActual, myRank}
on 0
from 
[Adventure Works]

实际上不需要测量值
大于prev
currentmembervalue
preveMemberValue
。在此处添加它们只是为了对流程进行一些补充说明。

我认为这与我最终使用的脚本非常相似,但如果说列表中第二个国家的客户的每个值都小于第一个国家的所有客户的每个值,您的脚本可能会有点错误?请告诉我。我想不出怎么会出错。你放弃了对
.Name
的比较,这是确保排名被分区的逻辑。是的,我没有关注分区位。(这不是一个有趣的问题吗?)我认为这与我最终使用的脚本非常相似,但是如果说列表中第二个国家的客户的每个值都小于第一个国家的所有客户的每个值,那么您的脚本可能会有点错误?请告诉我。我想不出怎么会出错。你放弃了对
.Name
的比较,这是确保排名被划分的逻辑。是的,我没有把重点放在划分上。(这不是一个有趣的问题吗?)