如何为每个部门选择按金额递减排序的前25位客户?

时间:2014-04-23 10:51:18

标签: ssas mdx cube olap-cube

对于每个部门,我希望排名前25位的客户按金额递减。像:

Dept|Customer|Amt

    1 cust_1 5000
      cust_2 2000
        .
        .
        .
    2 cust_26 6000
      cust_27 3000
        .
        .
    3
    .
    .
    7

到目前为止我尝试的是:

SELECT 
NON EMPTY { [Measures].[Amount] } ON COLUMNS ,

NON EMPTY { 

[Customer].[DEPT].[DEPT]*

ORDER( 

TOPCOUNT([Customer].[Customer].[Customer],25,[Measures].[Amount]),

[Measures].[Amount], DESC)

}

FROM [cube]

虽然我有适当的数据,但我得到的结果却不是每个部门都有25个。

1 个答案:

答案 0 :(得分:1)

行(ORDER(TOPCOUNT(...)))的交叉连接的第二个术语不知道第一个([Customer].[DEPT].[DEPT])。您应该使用Generate,因为它遍历部门,因此允许您将当前部门放入TOPCOUNT的第一个参数:

SELECT 
NON EMPTY { [Measures].[Amount] } ON COLUMNS ,
NON EMPTY
Generate([Customer].[DEPT].[DEPT],
         TOPCOUNT({[Customer].[DEPT].CURRENTMEMBER}
                  *
                  [Customer].[Customer].[Customer],
                  25,
                  [Measures].[Amount]
                 )
        )
FROM [cube]

另请注意,您无需订购TOPCOUNT降序it is already ordered this way的结果。