2009-11-20 42 views
5

は、私は、キューブで、foo、対策を持っている、と私は、ユーザーがレポートに次のような対策を見たいと思って報告要件を持っていると言う:測定のフィルタリング(または外れ値を削除)

total foo 
total foo excluding instances where foo > 10 
total foo excluding instances where foo > 30 

は何ですかこれを処理する最善の方法は? 以前はの場合はfoo > 10、それ以外の場合はfooを返す名前付き計算を追加しました。 (MDXにFilter([Measures].[foo], [Measures].[foo] > 10))のようなものを、これを達成するための方法がなければならないように私は感じるが、私は私の人生のために何を把握することはできません。

任意のアイデア?

答えて

3

トリックはあなたのことです

たとえば、通常のMicrosoftの「倉庫と販売」デモキューブを使用すると、次のMDXでは、売上が$ 2000を超えるすべての店舗の売上が表示されます。

 
SELECT Filter([Store].[Stores].[Store].members, [Unit Sales] > 2000) ON COLUMNS, 
[Unit Sales] ON ROWS 
FROM [Warehouse and Sales] 
+1

(対策としての寸法およびクリックとして、我々は1000年よりも多くのクリックでdtを探したいdtは仮定)以下の好きな、それはすべての必要な電子ではなく、私は行くつもりです。あなたの例はストアのセットをフィルタリングしますが、私が探しているのは、ファクトレコードをフィルタリングする方法です。 あなたの例を使って、私は店舗あたりの平均販売単価を表示したいと思いますが、すべての店舗を表示したいと思いますが、平均で単位売上高> 2000を集計したくありません。 – Colin

2

私は次の2つの選択肢を持っていると思う:

1-あなたの事実に列を追加します(またはファクトテーブルに基づいてデータソースビューで表示)のように:

case when unit_Price>2000 then 1 
    else 0 
end as Unit_Price_Uper_Or_Under_10 

、これに基づいて架空の次元を追加列の値。 とのDataSourceViewで新次元(たとえばRange_Dimensionの名前付きクエリを追加します。 すべて が範囲

、あなたが他の次元と属性のように、このフィルタを使用カントtaht後として0を選択範囲 組合として1を選択し

SELECT [Store].[Stores].[Store].members ON COLUMNS, 
[Unit Sales] ON ROWS 
FROM [Warehouse and Sales] 
WHERE [Test_Dimension].[Range].&[1] 

問題はすべての範囲でWhen条件を追加する必要があります。範囲が静的である場合にのみ、この解決策は良い解決策です。 とダイナミックレンジの場合は、範囲を策定する方が良いです(除外方法に基づいて)

2-我々は、主キーSale_idとファクトテーブルを持っている場合、我々は、1列のみsale_Idでファクトテーブルに基づい 次元を追加することができ、dimension Usage tab に我々はこれを関連付けることができ、たとえば、ファクトテーブル に基づいてファクトテーブル近傍粒度次元を追加関係型Factと とnew dimensionmeasure groupはその後、我々はのようなものを使用することができMDXに:私は "のいずれかの明確な解決策を見つけていないよう

filter([dim Sale].[Sale Id].[Sale Id].members,[Measures].[Unit Price]>2000) 
0

私は、使用時の斎宮(Mondrainとバックエンド)同様の問題に会いましたメジャーにフィルターを追加する "、私はここに追加し、それは他の男にとって有益かもしれません。

Saiku3.8では、「列」→「フィルタ」→「カスタム」のUIにフィルターを追加すると、フィルターMDX式が表示されることがあります。

[Measures].[clicks] > 1000 

を保存して閉じますが、そのフィルタは、find elemはに対して有効になります1000

より大きい回のクリックで:

のは、我々は1000年より、そこに次の行を追加します大きい広告でクリックをしたいとしましょう

MDXは、私はあなたの入力を感謝

WITH 
SET [~ROWS] AS 
    Filter({[Dt].[dt].[dt].Members}, ([Measures].[clicks] > 1000)) 
SELECT 
NON EMPTY {[Measures].[clicks]} ON COLUMNS, 
NON EMPTY [~ROWS] ON ROWS 
FROM [OfflineData] 
関連する問題