2016-11-22 2 views
1

У меня есть мера, объем продаж. Я хочу ранжировать клиентов в течение года для этой меры. Мне нужно также отобразить этот ранг в качестве меры. Ранг должен начинаться каждый год. Я могу делать клиентов по годам и клиентам по разделам, но я не могу понять, как их объединить, поэтому он итерации по обоим измерениям должным образом. Ниже приводится то, что у меня есть для клиентов по годам. Я попытался добавить еще один набор разделов, создав еще один именованный набор, который I GENERATE с набором YearsWithCustomers, и 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]; 

Вот что у меня есть. Я бы ожидал увидеть 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

I должны иметь ранг как меры, а также всех участников. Top X будет обрабатываться на стороне отчетности, чтобы они могли динамически выбирать, что такое X. В качестве примера я включил изображение. – TTeeple