2012-04-03 65 views
0

我試圖做到這一點總銷售額,但在我的立方體MDX:MDX - 前X銷售人員通過爲每個日期

select 
    * 
from 
(
    select 
     Date, SalesPerson, TotalSales, row_number() over(partition by Date order by TotalSales desc) as Num 
    from SalesFact as ms 
) as x 
where 
    Num < 5 
order by 
    Date, SalesPerson, Num desc 

比方說,我有這些尺寸的立方體:

日期(年,月,日) - 日期始終爲第一個月 SalesPerson

事實表有三列 - 日期,SalesPerson,TotalSales - 即該人在當月銷售的金額。

我想,每個月,看到前5名銷售人員,以及他們的每一個TotalSales的。排名前五的銷售人員可能每個月都會有所不同。

我能夠得到的結果一個月,使用查詢,看起來像這樣:

select 
     [Measures].[TotalSales] on columns, 
     (
      subset 
      (
        order 
        (
         [SalesPerson].children, 
         [Measures].[TotalSales], 
         bdesc 
       ), 
        0, 
        5 
      ) 
    ) on rows 
from 
     Hypercube 
where 
     (
      [Date].[Date].&[2009-03-01T00:00:00] 
    ) 

我後是把日期和行營業員,並TotalSales在列的查詢。

我想每個月看到隨着時間的推移,以及每個月的前5名銷售人員,以及有多少他們賣。

當我嘗試做這種方式,它似乎並沒有過濾/組銷售人員每個日期(獲取每個日期前5名)。返回的值遍佈整個地方,幷包含非常低的值和空值。值得注意的是,儘管TotalSales差別很大,但SalesPerson列表對於每個日期都是相同的。 。

select 
    [Measures].[TotalSales] on columns, 
    (
     [Date].[Hierarchy].[Date].members, 
     subset 
     (
      order 
      (
       [SalesPerson].children, 
       [Measures].[TotalSales], 
       bdesc 
      ), 
      0, 
      5 
     ) 
    ) on rows 
from 
    Hypercube 

似乎內部 「子集」 一切都需要由電流[日期]被過濾[層次] [日期],但使用CurrentMember給出CROSSJOIN /軸誤差:

select 
    [Measures].[TotalSales] on columns, 
    (
     [Date].[Hierarchy].[Date].members, 
     subset 
     (
      order 
      (
       ([SalesPerson].children, [Date].[Hierarchy].CurrentMember), 
       [Measures].[TotalSales], 
       bdesc 
      ), 
      0, 
      5 
     ) 
    ) on rows 
from 
    Hypercube 

我已經試過,沒有運氣的最後一個查詢的幾種變化。

希望的答案將是幫助他人新MDX也是如此。

回答

0

我終於找到了如何做到什麼,我一直在尋找。解決方案圍繞使用Generate函數展開,並從MSDN上的基本示例開始,並將維度和度量修改爲我的多維數據集中的維度和度量,這使我朝着正確的方向前進。

http://msdn.microsoft.com/en-us/library/ms145526.aspx

有沒有更好的辦法?

另外,警惕試圖重構套入與塊。當集合被評估/改變其範圍並且將改變結果時,這似乎改變。

with 

set 
Dates as 
{ 
    [Date].[Hierarchy].[Date].&[2009-02-01T00:00:00], 
    [Date].[Hierarchy].[Date].&[2009-03-01T00:00:00], 
    [Date].[Hierarchy].[Date].&[2009-04-01T00:00:00] 
} 

select 
    Measures.[TotalSales] 
    on columns, 
    generate 
    (
     Dates, 
     topcount 
     (
      [Date].Hierarchy.CurrentMember 
      * 
      [SalesPerson].Children, 
      5, 
      Measures.[TotalSales] 
     ) 
    ) 
    on rows 
from 
    Hypercube 
相關問題