私はこれをやろうとしていますが、キューブに 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 日です
ファクト テーブルには、Date、SalesPerson、TotalSales の 3 つの列があります。つまり、その人がその月に販売した金額です。
毎月、上位 5 人の営業担当者と、それぞれの TotalSales を表示したいと考えています。上位 5 人の営業担当者は、月ごとに異なる可能性があります。
次のようなクエリを使用して、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]
)
私が求めているのは、Date と SalesPerson を行に配置し、TotalSales を列に配置するクエリです。
毎月、各月の上位 5 人の営業担当者と、その売上高を時系列で確認したいと考えています。
このようにしようとすると、日付ごとに営業担当者をフィルタリング/グループ化するようには見えません(日付ごとにトップ5を取得します)。返される値はいたるところにあり、非常に低い値や null 値が含まれています。特に、TotalSales は大きく異なりますが、SalesPerson リストは各日付で同じです。
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 を使用すると crossjoin / axis エラーが発生します。
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) 階層階層が Crossjoin 関数で複数回使用されています。
実行完了
最後のクエリのバリエーションをいくつか試しましたが、うまくいきませんでした。
この回答が、MDX を初めて使用する他のユーザーにも役立つことを願っています。