SSAS - > MDX - >如何创建一个按日期(即周)返回topcount的查询?

时间:2012-01-20 21:44:03

标签: sql sql-server sql-server-2012 ssas mdx

我最近收到了一条创建查询的请求,该查询按周收入返回前100名客户。我可以很明显地轻松返回前100位客户,但是当我添加周属性时,我的查询超时。我只是想知道是否有一些人遇到了这个或者能够产生类似的查询?

我的查询在没有周存在的情况下有效。 :

     SELECT NON EMPTY { [Measures].[Revenue] } ON COLUMNS, 
NON EMPTY TopCount ( { ([Customer].[Customer Id].[Customer Id].ALLMEMBERS * [Customer].[Name].[Name].ALLMEMBERS  ) }, 100, [Measures].[Revenue])  ON ROWS 
FROM [DW]

我对周的询问只是完全超时。 :

SELECT NON EMPTY { [Measures].[Revenue] } ON COLUMNS, 
NON EMPTY TopCount ( { ([Customer].[Customer Id].[Customer Id].ALLMEMBERS * [Customer].[Name].[Name].ALLMEMBERS * [Date Link].[Week].[Week].ALLMEMBERS ) }, 100, [Measures].[Revenue])  ON ROWS 
FROM [DW]

1 个答案:

答案 0 :(得分:1)

这不会给你排名前100位的客户以及他们排名第一的那一周吗?因此,客户A可能在第一周排名第一,第二周排名第五,依此类推,但你总共得到100行而不是每周100张?

尝试类似

的内容
SELECT NON EMPTY { [Measures].[Revenue] } ON COLUMNS, 
NON EMPTY 
{
[Date Link].[Week].[Week].ALLMEMBERS *
{
TopCount ( { ([Customer].[Customer Id].[Customer Id].ALLMEMBERS * [Customer].[Name].[Name].ALLMEMBERS ) }, 100, [Measures].[Revenue])  
}
}
ON ROWS 
FROM [DW]

我认为你可能需要使用GENERATE代替*与周成员,不记得并试图做到这一点;)