2010-12-14 10 views
0

地理的な販売データを含むキューブがあります。私は、任意の既知の店舗のトップ5の売り手に基づいて、すべての店舗から商品アイテムの販売を引き出したいと考えています(実際の問​​題の簡略版です)。 SQLでMDXの場合TopCountに基づいてディメンション/軸をフィルタリングする方法

(私に恥)これは、あなたがこのためにトップカウント機能を使用することができます

select StoreId, ProductId, Sales from cube where ProductId in 
    (select top 5 ProductId from cube where Store = @Store order by Sales desc) 

答えて

1

だろう。 。あなたが[販売]製品とストアと名付け対策という名前の寸法を有している提供:

Select [Measures].[Sales] On Columns, 
     CrossJoin([Store].Members,Generate(Topcount(Crossjoin({[Store][email protected][<StoreId>]},[Product].Members),5,[Measures].[Sales]),[Product].CurrentMember)) On Rows 
    From [Yourcube] 

はあなたが興味のある特定の店舗で<StoreId>を交換して、特定の店舗が見つかり上位5を通じて意志ループを生成し、プロダクトメンバーのみを返します。この結果は、すべての店舗とクロスジョインされます。

+0

ON私はこれまでトップカウントで、残念ながら、私はちょうど1でトップ5に基づいて、店舗のすべてに販売を必要とすることを得た、申し訳ありません私の質問は少し不明であった場合。私は、単一の店舗の上位5製品に製品の次元を限定し、すべての店舗について報告する必要があります。 – MrTelly

+0

私は見る!私はストアに行を含めるようにクエリを編集しました。 – Rudolf

+0

修正されたMDXを試しましたが、これは1つの店舗のトップ5に基づく各店舗の売上ではなく、各店舗のトップ5を返します。私は5行(あなたがALLを含む場合は返される)を探しています – MrTelly

0

これは、ROWS軸であなたの店舗の上位5製品を抽出し、[店舗]次元のdefaultMemberに従ってこれらの製品の[Sales]を選択します。 [Store] defaultMemberが集約可能階層のルートである場合、これは各製品のすべての店舗に対する売上を与えるはずです。

[対策]を選択します。[販売] 0 ON、

トップカウント([お店]。[あなたの-店] * [製品] .Members)、5、[施策]。[販売])から、1

[あなたのキューブ]

関連する問題