3

結果を MDX の任意のタプルのコンテキストで評価したいが、このタプルを結果の一部にしたくない場合は、次の 2 つのオプションのいずれかを使用します。

1.サブセレクト

SELECT [Measures].[SomeMeasure] ON 0,
[DimName].[HierName].children ON 1
FROM
(SELECT foo.bar.&[Val] ON 0 FROM
[MyCube])

2.スライサー

SELECT [Measures].[SomeMeasure] ON 0,
[DimName].[HierName].children ON 1
FROM    
[MyCube]
WHERE (foo.bar.&[Val])

頭に浮かんだ 3 番目のオプションはEXISTS句ですが、すぐにそれがまったく別の目的であることに気付きました。

したがって、他の側面は別として、これらのクエリの一般的なパフォーマンス、留意すべきベンチマークまたはベスト プラクティス、およびどの状況でどのクエリを使用するかに関心があります。

4

2 に答える 2

1

私の知る限り、クエリの結果をキャッシュして全体的なスループットを向上させたい場合はスライサーの方が優れていますが、単一のクエリのパフォーマンスだけを気にする場合は、サブセレクトを使用するとパフォーマンスが向上します。

以下の質問に答えます。以下の情報は Chris Webb からのものです。

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/c1fe120b-256c-425e-93a5-24278b2ab1f3/subselect-or-where-slice?forum=sqlanalysisservices まず、言う必要があります。その副選択と Where 句は 2 つの異なることを行います。それらはすべての状況で交換可能ではなく、異なる結果を返す可能性があり、異なるクエリ プランが生成される可能性があるため、一方のパフォーマンスが優れている場合もあれば、他方のパフォーマンスが優れている場合もあります。すべてのキューブで 1 つの手法が他の手法より一貫して「優れている」わけではなく、サービス パックごとにパフォーマンスの違いが異なる可能性があります。

元の質問に答えるには、最高のクエリ パフォーマンスが得られ、見たい結果が返されるとわかったものを使用してください。一般に、私は Where 句を好みます (非推奨ではありません)。その理由は、場合によってはサブセレクトの方が最初は高速に実行される可能性がありますが、計算結果をキャッシュする Analysis Services の機能が制限され、長期的にはパフォーマンスが低下するためです: http://cwebbbi.spaces.live.com/blog/ cns!7B84B0F2C239489A!3057.entry

于 2014-12-05T10:35:58.220 に答える