の総売上高によって人々が、私のキューブで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
だが、私はこれらの寸法を持つキューブがあるとしましょう
日付(年、月、日) - 日、販売員、TotalSales - - すなわち、人はその月に販売量日付が常に月 の第一である販売員
は、ファクトテーブルには、3つの列があります。
毎月、上位5人の販売担当者とそれぞれのTotalSalesを見たいと思っています。上位5人の販売員は、1か月ごとに異なる場合があります。
私はこのようなクエリを使用して、1月の結果を得ることができています:
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個を取得)。返される値はすべての場所にあり、非常に低い値とNULL値が含まれます。特に、SalesPersonのリストは、TotalSalesが大きく異なるにもかかわらず、日付ごとに同じです。
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の新しいものにも役立つことを願っています。