2016-03-24 28 views
2

データキューブを実装しようとしています。これにより、指定した一連のディメンションのメジャーの平均と中央値を表示できます。 AdventureWorksDWを使用して基本的な例:MDX MEDIAN()関数の結果が正しくありません

WITH 
    MEMBER [Measures].[Median Qty] AS 
    MEDIAN ([Product].[Product Categories].siblings, [Measures].[Reseller Sales-Order Quantity]) 
    MEMBER [Measures].[avgOrderSize] AS 
    CASE 
     WHEN [Measures].[Reseller Sales Count] = 0 THEN NULL 
     ELSE ([Measures].[Reseller Sales-Order Quantity]/[Measures].[Reseller Sales Count]) 
    END 

SELECT {[Measures].[Reseller Sales-Order Quantity], [Measures].[Median Qty], [Measures].[avgOrderSize]} ON 0, 
NON EMPTY([Product].[Product Categories].[Category]) ON 1 
FROM [Analysis Services Tutorial] 
WHERE ([Product].[Product Name].&[476]); 

出力は次のようになります。それは、クエリで返される実際の対策を使用しているように見えるよう

Median output

マイ[Measures].[avgOrderSize]が正しいです。しかし、[Measures].[Median Qty]は、私の要件が何であるかについて全く正しいわけではありません。 AdventureWorksDW2012には、この製品を含む344の販売代理店注文があるため、値は約6になります。 MEDIAN()が一連の製品全体で動作しているようですか?

私は私が期待していますように行動するMEDIAN()関数を得ることができますどのような私が間違っているのとどのように 販売店の販売・注文数量として同じ値を返さ[Product].[Product Name].CurrentMember含む[Product].[Product Categories].siblingsのバリエーションを試してみましたか?

+0

リセラーの注文ごとに(実際のキューブの意味で)1つのディメンションメンバーを持つ縮退ディメンションがありますか? SSASのどのバージョンとそれはエンタープライズ版ですか? – GregGalloway

+0

@GregGalloway私たちは実際のデータで縮退した次元を持っています。私はまずAWデータのMEDIANを理解することを望んでいますので、私はテストして比較することがあります。私たちはSSAS 2012 Standard Editionを使用しています。 – wergeld

答えて

1

警告。これは遅いでしょう。しかしそれは正しいはずです。私は中央値がちょうど高価な計算であることを恐れている。最初のパラメータは、縮退ディメンションと、ファクト表の行ごとに1つのメンバーを持つ属性である必要があります。

WITH 
    MEMBER [Measures].[Median Qty] AS 
    MEDIAN (EXISTING [Reseller Sales].[Reseller Sales Order Number].[Reseller Sales Order Number].Members, [Measures].[Reseller Sales-Order Quantity]) 
    ... 
+0

これをAWのディメンションの私のバージョンで動作するように少し修正しました。そして、それは期待される結果を返すようです。これを答えにしてください。しかし、これは私たちの生きたOLAPでは動作しません。私たちの縮退したディメンションは、4GBのファイルサイズの制限(それはきちんとしたエラーでした。 OLAPを使用しているときにパーセンタイルを表示できないようです。 – wergeld

+0

@wergeld大きなサイズを許可する設定があります:https://technet.microsoft.com/en-us/library/gg471589(SQL.110).aspxしかし、私はそのサイズの次元以上のMEDIANが無意味に遅いと思います。 – GregGalloway

+0

@GregGallowayどうしてこれがうまくいかなかったのですか?'[Product Categories] .siblings'(私はこのテストキューブを持っていません - それは私がアクセスできるAdvWrksとは異なります) – whytheq

0

私はまだその機能を果たしていませんでしたが、あなたは試みることができる物事のカップルは、次のとおりです。

は計算にEXISTINGキーワードを追加します。これはおそらくですが

WITH 
    MEMBER [Measures].[Median Qty] AS 
    MEDIAN ( 
     EXISTING [Product].[Product Categories].siblings 
     , [Measures].[Reseller Sales-Order Quantity] 
    ) 
... 

Exists機能を追加上記に非常によく似:

WITH 
    MEMBER [Measures].[Median Qty] AS 
    MEDIAN ( 
     EXISTS([Product].[Product Categories].siblings, [Product].[Product Name].&[476]) 
     , [Measures].[Reseller Sales-Order Quantity] 
    ) 
... 

これを試してみてください。

WITH 
    MEMBER [Measures].[Median Qty] AS 
    MEDIAN ( 
     [Product].[Product Categories].currentmember.siblings 
     , [Measures].[Reseller Sales-Order Quantity] 
    ) 
... 
+0

「EXISTING」と「EXISTS」の両方を試してみましたが、これは「Reseller Sales-Order Quantity」(これは2881)と同じ値を返すだけです。これは、製品を含むセット全体でMEDIANを実行しているだけで、集計レベルでは悪いので、MEDIANは集計された数量の単一の値に対してのみ計算されるようです。 – wergeld

+0

@wergeld 3回目の試みを追加しました!これはここの例を見ているからです:https://msdn.microsoft.com/en-us/library/ms145570.aspx?f=255&MSPPError=-2147217396 – whytheq

+0

これは私の初期クエリと同じ値を返します - 1030.5。私は何かをシンプルに欠けていなければなりません - それはまだ分かりません。 – wergeld

関連する問題