1

次の形式の質問に答えるために、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 をオンザフライで構築していることにも注意してください。

4

2 に答える 2

3

副選択では、これを列に配置するだけです:

{Except([Start Date].[Date].Month.Members, {[Start Date].[Date].[Month].&[2008]&[11]}), [Start Date].[Date].[Date].&[20081117]}

私はあなたが月レベルを持っていると仮定しました。式の最初の部分は、2008 年 11 月を除くすべての月を返し、2008 年 11 月 17 日が追加されます。

編集:

2 番目の例では、次のように記述できます。

Except(all the cities in north america, 
        Except(all the cities in USA, 
                Except(all the cities in New York state,
                        {Albany , Glens Falls})))

Descendants関数とLEAVESフラグを使用して、北米、米国、およびニューヨーク州の都市を取得できます。

于 2012-07-18T21:29:26.723 に答える
0

「3つ以上の句を使用する...任意の階層」という意味を理解することはできませんが、要求しているセットは次のとおりです。

select 

  Hierarchize (
    Union(
      Except(     
        Descendants( [Start Date].[Date].[Year].[2008]       , [Start Date].[Date].[Month], SELF ),
        Descendants( [Start Date].[Date].[Month].&[2008]&[11], [Start Date].[Date].[Month], SELF )    
      ),
      [Start Date].[Date].[Date].&[20081117]
    )
  )

  on 0 from [ADM]
于 2012-07-19T00:47:14.427 に答える