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

Ssas 如何为每个部门选择按金额递减排列的前25名客户?,ssas,mdx,cube,olap-cube,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] }

我希望前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个,尽管我有适当的数据。

行交叉连接的第二项(
ORDER(TOPCOUNT(…))
)不知道第一项(
[Customer].[dept].[dept].[dept]
)。您应该为此使用,因为它在部门之间循环,从而允许您将当前部门放入
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
降序的结果进行排序。

Perfect。我同时也发现了同样的问题。谢谢也谢谢你的解释。