我试图做到这一点总销售额,但在我的立方体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也是如此。