2017-06-29 1 views
3

用語のいくつかが間違っている場合は、私は本当にMDX/OLAPの新機能です。MDX階層内に値が存在する場合の結果を除外します

私は倫理壁を決定するための次元を持っています。ディメンションは、次のようになります。

Ethical Wall (dimension) 
    --> Matter ID (hierarchy) 
    --> Walled (hierarchy) 
    --> White Listed Initials (hierarchy) 
    --> Black Listed Initials (hierarchy) 

[Walled]階層は問題が適用され、壁を持っている場合に応じて、trueまたはfalseのいずれかが含まれています。

ホワイトリストとブラックリストの階層には、それぞれ案件へのアクセス権を持っているか持っていない人の頭文字が含まれています。注意事項は、ホワイトリストまたはブラックリストのいずれかであり、決してそれらの2つの組み合わせではありません。

私は壁なしのシナリオとホワイトリストのシナリオを比較的簡単に説明することができましたが、ブラックリストのシナリオには多くの問題があります。 、

({ 
    (
     [Ethical Wall].[Walled].&[True] 
     ,[Ethical Wall].[White Listed Initials].&[XXX] 
     ,[Ethical Wall].[Black Listed Initials].&[] 
    ) 
    ,(
     [Ethical Wall].[Walled].&[True] 
     ,[Ethical Wall].[White Listed Initials].&[] 
     ,-{[Ethical Wall].[Black Listed Initials].&[XXX]} 
    ) 
    ,(
     [Ethical Wall].[Walled].&[False] 
     ,[Ethical Wall].[White Listed Initials].&[] 
     ,[Ethical Wall].[Black Listed Initials].&[] 
    ) 
}) 

は私がダウンしてフィルタリングしていたから、最初のデータセットを、ダウンストリップとテーブルでそれを表現する、このようになります:これは私がこれまでに出ているwhere句である

enter image description here

イニシャルXXXのユーザーがアクセスできるIdsのみを選択します。上からフィルタを適用すると、私はすべて3を返しますIds。私が探している結果セットはId12です。上記からのファイラーは、次のように一致します。

enter image description here

私は私のフィルタは、すべての3 Idsを取得しているが、私はきちんとIdsを除外するために、フィルタの中央部分を修正する方法を理解していない理由をを理解しています。これがフィルタの問題の部分です。

,(
     [Ethical Wall].[Walled].&[True] 
     ,[Ethical Wall].[White Listed Initials].&[] 
     ,-{[Ethical Wall].[Black Listed Initials].&[XXX]} 
    ) 

このようなデータセットに一致するようにフィルタを変更するにはどうすればよいですか?

enter image description here

+0

なぜ、中間タプルをすべて組み込むのですか?ミドルタプルが何かを選択している場合は、そのタプルをセットから削除するだけです。 – whytheq

+0

からフィルタリングする初期データセットにはすべてのIDが含まれているため、その情報を含めるように質問を編集します。 –

答えて

0

解決策が見つかりました!

SET notwalled AS exists( 
     selectedmatters, 
     { 
     [Ethical Wall].[Walled].&[False] 
     } 
    ) 
    SET whitelisted AS exists( 
     selectedmatters, 
     { 
     [Ethical Wall].[White Listed Initials].&[XXX] 
     } 
    ) 
    SET blacklisted AS EXCEPT( 
     selectedmatters, 
     exists( 
     selectedmatters, 
     { 
      [Ethical Wall].[Black Listed Initials].&[XXX], 
      [Ethical Wall].[Black Listed Initials].&[] 
     } 
     ) 
    ) 

そして組合:

UNION(notwalled, whitelisted, blacklisted) 

はこれ以上私のために泣いセットを利用

0

なぜあなたはこれに簡素化することができませんか?

WHERE 
({ 
    (
     [Ethical Wall].[Walled].&[True] 
     ,[Ethical Wall].[White Listed Initials].&[XXX] 
    ) 
    ,(
     [Ethical Wall].[Walled].&[False] 
     ,[Ethical Wall].[White Listed Initials].&[] 
    ) 
}); 
+0

私の理解では、WHERE句を使用するとパフォーマンスが低下します。そうですか? – VKarthik

関連する問題