2016-11-22 37 views
1

我有一个度量,销售额。我想按照这个衡量标准按年分级排列客户。我还需要显示该排名作为衡量标准。排名需要每年开始。我能够按部门年份和客户进行客户分类,但我似乎无法弄清楚如何将它们结合起来,以便适当地在两个维度上进行迭代。以下是我在一年中为客户提供的服务。我尝试添加另一个分区集,创建另一个命名集,我使用YearsWithCustomers设置了GENERATE,使用该新命名集创建了另一个命名集RANK。我似乎非常接近于搞清楚这一点,但我认为我正在把事情放在错误的地方。我的想法是从Chris Webb的博客located here中迭代一套。多维度排名,每年重新启动

WITH 
    SET Years AS 
    TopPercent 
    (
     [Sales and Forecast Date].[Calendar Year].[Year Number].MEMBERS 
    ,100 
    ,[Measures].[Sales Amount] 
    ) 
    SET Customers AS 
    Filter 
    (
     [Customer].[Customer Number].[Customer Number].MEMBERS 
    , 
     [Measures].[Sales Amount] > 0 
    ) 
    SET YearsWithCustomers AS 
    Generate 
    (
     Years 
    ,Union 
     (
     {[Sales and Forecast Date].[Calendar Year].CurrentMember} 
     ,StrToSet 
     (" 
      Intersect({}, 
      {order(Customers,([Sales Amount],[Sales and Forecast Date].[Calendar Year].CurrentMember),desc) 
      as CustomerSet" 
      + 
       Cstr(Years.CurrentOrdinal) 
      + "})" 
     ) 
    ) 
    ,ALL 
    ) 
    MEMBER [Measures].[Customer Rank] AS 
    Rank 
    (
     [Customer].[Customer Number].CurrentMember 
    ,StrToSet 
     ("CustomerSet" 
     + 
      Cstr 
      (
      Rank 
      (
       [Sales and Forecast Date].[Calendar Year].CurrentMember 
      ,Years 
      ) 
     ) 
    ) 
    ) 
SELECT 
    { 
    [Customer Rank] 
    ,[Measures].[Sales Amount] 
    } ON 0 
,Order 
    (
    Filter 
    (
     (
     YearsWithCustomers 
     ,Customers 
    ) 
    , 
     [Sales Amount] > 0 
    ) 
    ,[Sales Amount] 
    ,desc 
) ON 1 
FROM [OrdersAndBudgets]; 

这是我现在有。我期望看到Rank等级为1,2,3等。它应该每年重新设置每个部门。

Example with wrong results

回答

1

我喜欢这种模式:

WITH 
    SET [AllCountries] AS 
    [Country].[Country].MEMBERS 
    SET [AllProds] AS 
    [Product].[Product].[Product].MEMBERS 
    SET [Top5Prods] AS 
    Generate 
    (
     [AllCountries] AS a 
    ,{ 
      (
      a.CurrentMember 
      ,[Product].[Product].[All] 
     ) 
     + 
      //The top x prods 
      a.CurrentMember 
      * 
      TopCount 
      (
       [AllProds] 
      ,5 
      ,[Measures].[Internet Sales Amount] 
      ) 
     } 
    ) 
    MEMBER [Product].[Product].[All].[Other Products] AS 
    Aggregate 
    (
     [Country].CurrentMember * [Product].[Product].[Product].MEMBERS 
     - 
     [Top5Prods] 
    ) 
SELECT 
    {[Measures].[Internet Sales Amount]} ON COLUMNS 
,Hierarchize(
    { 
    [Top5Prods] 
    ,[AllCountries] * [Product].[Product].[All].[Other Products] 
    } 
) ON ROWS 
FROM [Adventure Works]; 

它返回如下:

enter image description here

有一个相当广泛的线程在这里:Top X of Top Y with RestOf member where X and Y are hierarchies from different dimensions

+0

我需要有排名一项措施,以及所有成员排名。 Top X将在报告方面处理,以便他们可以动态选择X是什么。我已经包括一张图片作为例子。 – TTeeple