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関数はありますか、または前述のクエリのパフォーマンスを向上させる方法について他にヒントはありますか?
クロス結合(*表記)を使用し、次元を列軸に配置することで、目的の結果を得ることができます。以下は、Adventure Works SSAS DBに基づく例です。
select {} on 0,
{
[Customer].[Gender].[Gender].members
*
[Date].[Calendar Year].[Calendar Year].members
} on 1
from [Adventure Works]