2012-01-20 1 views
1

最近、週100回の収益でトップ100の顧客を返すクエリを作成するリクエストを受け取りました。私は明らかに、そして簡単に全体としてトップ100の顧客を返すことができますが、私がweek属性に追加すると、クエリがタイムアウトします。私はちょうどそこにいくつか出ているか、それと同等のクエリを生成することができたかどうか疑問に思っていましたか?SSAS - > MDX - >日付期間、すなわち週単位でトップカウントを返すクエリを作成するにはどうすればよいですか?

週なしで動作するクエリです。 :

 SELECT NON EMPTY { [Measures].[Revenue] } ON COLUMNS, 
NON EMPTY TopCount ({ ([Customer].[Customer Id].[Customer Id].ALLMEMBERS * [Customer].[Name].[Name].ALLMEMBERS ) }, 100, [Measures].[Revenue]) ON ROWS 
FROM [DW] 

すべてのものを完全にタイムアウトさせるという私のクエリ。 :

SELECT NON EMPTY { [Measures].[Revenue] } ON COLUMNS, 
NON EMPTY TopCount ({ ([Customer].[Customer Id].[Customer Id].ALLMEMBERS * [Customer].[Name].[Name].ALLMEMBERS * [Date Link].[Week].[Week].ALLMEMBERS) }, 100, [Measures].[Revenue]) ON ROWS 
FROM [DW] 

答えて

1

これはあなたのトップ100の顧客と彼らが一番上にあった週を与えませんでしたか?したがって、顧客Aは第1週に1位、第2週には5位になる可能性がありますが、週100件ではなく100行になります。

私はあなたが覚えていると私の頭の上にこれをオフにやろうとすることはできません、週のメンバーとGENERATEの代わりに*を使用する必要があるかもしれないと思う

SELECT NON EMPTY { [Measures].[Revenue] } ON COLUMNS, 
NON EMPTY 
{ 
[Date Link].[Week].[Week].ALLMEMBERS * 
{ 
TopCount ({ ([Customer].[Customer Id].[Customer Id].ALLMEMBERS * [Customer].[Name].[Name].ALLMEMBERS) }, 100, [Measures].[Revenue]) 
} 
} 
ON ROWS 
FROM [DW] 

のようなものを試してみてください;)

+0

これは私が持っているものの中で最も近いので、答えとしてマークしてください。これは私に結果を提供していますが、週に100人の顧客を提供していません。それは90週と70日を別のものに見せているので、私はこれのためにgenerate関数を使って研究します。ありがとう、これは私にもう少し方向性を与えるだろう。 –

+0

@UserSmithあなたはそれらの週をチェックしましたか?その週だけのmeasures.revenueを持つ100人以上の顧客がいることを100%確信していますか? – Meff

+0

はい、これを確認してsql経由で確認しました。それも私の最初の推測でした。私は誰かがデータを更新していると信じているので、後でチェックするつもりです。もう一度あなたの方向性にこれに感謝します。 –