3

キューブに (他の通常のディメンションの隣に) 多対多のディメンションがあります。行数メジャーでファクト行を除外する場合、通常、MDX で次のようにします。

SELECT [Measures].[Row Count] on 0
FROM cube
WHERE ([dimension].[attribute].Children - [dimension].[attribute].&[value])

これは、この単純な例では必要以上に複雑に見えるかもしれませんが、この場合、UNION も含めて WHERE が大きくなることがあります。

したがって、これは通常の次元で機能しますが、多対多の次元になりました。上記のトリックを実行すると、目的の結果が得られません。つまり、多対多のディメンションでその特定の属性を持つすべての行を除外したいと考えています。

つまり、すべての行をカウントしますが、指定された属性は無視します。ファクト テーブルの行は、多対多のディメンションで複数の属性を持つことができるため、行は引き続きカウントされます。

それは私が必要とするものではありません。そのディメンション属性値を持つ行を明示的に除外する必要があります。また、複数の値を除外する場合があります。だから私が必要とするのは、T-SQLの WHERE .. NOT IN (...) に似たものです

[attribute].all と [attribute].&[value] から結果の値を減算するだけでよいことに気付きましたが、複数の WHERE ステートメントを UNION する場合は機能しなくなります。

誰もこれを解決する方法について良い考えを持っていますか?

前もって感謝します、

デルタ

4

3 に答える 3

1

私はこれをテストしていませんが、行と同じレベルの粒度の属性があれば、これを行うことができると思います (したがって、おそらくファクト関係として実装されます)。

したがって、自転車の製品カテゴリを持たない注文の数をカウントしたい場合 (OrderID と Category の間に M2M 関係があると仮定)、次のようなものが機能するはずです。(EXISTS 関数の詳細については Books Online を参照してください)

[Orders].[Order ID].[Order ID].Members 
- EXISTS([Orders].[Order ID].[Order ID].Members
       , [Product].[Category].&[Bikes]
       , "Order Facts")

この種のクエリは、SSAS エンジンに低レベルから多くの事実を追加するように強制するため、かなり遅くなる可能性があります。

于 2011-08-02T05:57:26.277 に答える
0

フィルタ機能を使用できます。

SELECT [Measures].[Row Count] on 0
FROM [cube]
WHERE Filter([dimension].[attribute].Children, [dimension].CurrentMember.MemberValue <> value)
于 2012-06-05T20:39:52.990 に答える
0

EXCEPT コマンドを試しましたか? その構文は次のようなものです。

EXCEPT({the set i want}, {a set of members i dont want})

于 2009-12-16T15:34:58.317 に答える