web-dev-qa-db-ja.com

MDXを使用してメジャー値の代わりにディメンションメンバーを選択する

MDXで、メジャー値の代わりにディメンションメンバーを選択することはできますか?

これが私が現在行っていることです(簡略化):

SELECT 
    {[Time]...} ON 0,
    {[Gender]...} ON 1
FROM [Cube];

結果:

  2008 2009
M  1    -
W  -    2

これは私の望ましい結果です(私のデータセットでは、返されるセルの量は上記の結果よりもはるかに少なくなります)。

Gender Time
M      2008
W      2009
W      2009

または代わりに:

Gender Time Measure
M      2008    1
W      2009    2

私のプロジェクトでは、5つの異なる次元軸から選択する必要があります。それらのいくつかは数百のメンバーを含み、約8,000,000セルのセルセットになり、実行が非常に遅くなります(私のセットアップでは約30秒)。私はすでにNONEMPTY関数でパフォーマンスを改善しようとしましたが、それでもまだ遅すぎます。私の望ましい結果は約400,000セルしか返さないでしょう(SQLソーステーブルのクエリに必要なのは2秒だけなので、これは理論的には望ましいデータを取得できる速度です)。

明らかに、この特別な状況では、リレーショナルソーステーブルのクエリの方がはるかに高速ですが、OLAPサーバーは単一の真実である必要があるため、ソースデータベースをクエリすることはできません。

この種類のクエリを可能にするMDX関数はありますか、または前述のクエリのパフォーマンスを向上させる方法について他にヒントはありますか?

1
David

クロス結合(*表記)を使用し、次元を列軸に配置することで、目的の結果を得ることができます。以下は、Adventure Works SSAS DBに基づく例です。

select {} on 0, 
{
[Customer].[Gender].[Gender].members
*
[Date].[Calendar Year].[Calendar Year].members 
}  on 1
from [Adventure Works]

enter image description here

1
mmarie