我正在尝试这样做,但是在我的多维数据集中使用 MDX:
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
假设我有一个具有以下尺寸的立方体:
日期(年、月、日) - 日期始终为每月 1 日 SalesPerson
事实表有三列——Date、SalesPerson、TotalSales——即那个人在那个月的销售量。
我希望每个月查看排名前 5 位的销售人员,以及他们的每个 TotalSales。前 5 名销售人员可能会因一个月而异。
我可以使用如下所示的查询获得一个月的结果:
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]
)
我所追求的是将 Date 和 SalesPerson 放在行上,将 TotalSales 放在列上的查询。
我想看看每个月,每个月的前 5 名销售人员,以及他们的销售额。
当我尝试这样做时,它似乎没有按每个日期过滤/分组销售人员(每个日期获得前 5 个)。返回的值到处都是,包括非常低的值和空值。值得注意的是,每个日期的 SalesPerson 列表都是相同的,尽管 TotalSales 变化很大。
select
[Measures].[TotalSales] on columns,
(
[Date].[Hierarchy].[Date].members,
subset
(
order
(
[SalesPerson].children,
[Measures].[TotalSales],
bdesc
),
0,
5
)
) on rows
from
Hypercube
似乎“子集”内的所有内容都需要按当前 [Date].[Hierarchy].[Date] 过滤,但使用 CurrentMember 会产生交叉连接/轴错误:
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
错误:正在执行查询... 查询 (3, 2) Hierarchy 层次结构在 Crossjoin 函数中多次使用。
执行完成
我已经尝试了最后一个查询的几种变体,但没有运气。
希望这些答案对其他刚接触 MDX 的人也有帮助。