次の形式の質問に答えるために、MDX クエリを作成しようとしています。
11 月 17 日に発生したものを除き、2008 年のすべての記録を表示してください。
クエリは、3 つ以上の句で動作するように一般化する必要があり、日付に固有であってはなりません。(理解しやすいので、例として日付を使用して質問しています。さまざまな階層で MDX を一般化することに関心があります。
これは私がこれまでに得た最も近いものです:
SELECT
NON EMPTY { [Measures].[Session Count] } ON COLUMNS,
NON EMPTY { ([SessionIDs].[Session ID].Children) } ON ROWS
FROM (
SELECT
Union(
Descendants([Start Date].[Date].Year.[2008], , LEAVES),
Descendants([Start Date].[Date].[Date].&[20081117], , LEAVES)
)
-
Descendants([Start Date].[Date].[Month].&[2008]&[11], , LEAVES)
ON COLUMNS
FROM [ADM]
) ;
問題は、除外によって二次包含 (2008 年 11 月 17 日) が削除されることです。最初のユニオンで重複を維持しようとしましたが、除外 (マイナス演算子) は一致するメンバーのすべてのコピーを削除します。
編集:
「一般化可能な」解決策を求めるときの意味を理解するのに役立つ別の例を次に示します。
ユーザーが選択した地理的地域のデータを表示するように選択できるマッピング アプリケーションを考えてみましょう。これらの地域を選択するには、マップをズームインおよびズームアウトし、クワッドキーを選択または選択解除します。クワッドキーは、通常 18 ~ 23 レベルの深さの階層にきちんとマップされます。
有効な使用例は次のとおりです。
- QK0を選択
- QK002の選択を解除
- QK0021230を選択
- QK002123033201 と QK002123033202 の選択を解除します
言い換えれば (そして、これらのクワッドキーにマップされる地名を完全に捏造して)、これは次のようになります:グレンズフォールズ。
したがって、上記の日付に対して機能したのと同じクエリ構造が、マッピングまたはその他の階層セットに対して機能する必要があります。また、ユーザーの操作に応じて、この MDX をオンザフライで構築していることにも注意してください。