商品と時間ディメンションがあり、販売数量のファクトテーブルがある状況があります。時間の経過とともに、製品のビジネスキーを除いて、製品のさまざまな詳細が変更されます。立方体からの私の平らなレポートでは、製品ディメンションの他の部分がどのように表示されているかにかかわらず、「ビジネスキー」レベルにいくつかの集計を含めることにしました。 SQLでsqlのsum over partition文と同様にMDXで集計を行う方法
のようなものとして、これは些細なことになります。
select sum(volume) over (partition by productKey,year) as Total
は関係なく、私が選択した任意の他の、合計欄には、これらの二つのフィールドだけに集約されるだろう。
MDXでは、私は同じ結果を達成することができましたが、より単純な方法が必要であるようです。
WITH MEMBER Measures.ProductKeyTotal AS
'SUM(([Product].[ProductKey],[Time].[Year]
,[Product].[Product Name].[Product Name].ALLMEMBERS
,[Volume Type].[Volume Type Id].[Volume Type Id].ALLMEMBERS)
,[Measures].[Volume])'
SELECT {[Measures].[Volume],[Measures].[ProductKeyTotal]} ON COLUMNS,
NONEMPTYCROSSJOIN ([Product].[ProductKey].[ProductKey].ALLMEMBERS
,[Time].[Time].[Year].ALLMEMBERS
,[Product].[Product Name].[Product Name].ALLMEMBERS
,[Volume Type].[Volume Type Id].[Volume Type Id].ALLMEMBERS) ON ROWS
FROM [My Cube]
WHERE ([Product].[Include In Report].&[True])
1)私は、合計が正しくない計算されたメンバーにはしたくない行のallmembersが含まれていない場合は、他のすべての次元を無視することを強制するショートカットがそこにあるものあなたは指定しますか?
他の計算メンバーを追加する必要があります。そのうちのいくつかはパラメータを使用します。上の例のメソッドを使用すると、同じものを複製する必要があります複数の場所で、コードは重くなるでしょう。
SQLでは「パーティションバイ」は必要ありませんか?単純な「グループ」は機能します。 –
私は、粒度が混在した複数の集約がある場合にパーティションを使用します。それ以外の場合は、グループ化が簡単になります。 – Peter