製品と時間のディメンションがあり、販売量のファクト テーブルがある状況があります。時間の経過とともに、製品のビジネス キーを除いて、製品に関するさまざまな詳細が変更されます。キューブからのフラットなレポートでは、製品ディメンションの他の部分が表示されているかどうかに関係なく、'ビジネス キー' レベルでいくつかの集計を含めたいと考えています。
SQLでは、これは次のように簡単です。
select sum(volume) over (partition by productKey,year) as Total
他に何を選択しても、Total 列はこれら 2 つのフィールドでのみ集計されます。
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 を含めない場合、合計が正しくありません。指定したもの以外のすべてのディメンションを強制的に無視するショートカットはありますか?
私が尋ねる理由の一部は、他の計算されたメンバーの束を追加する必要があることです。そのうちのいくつかはパラメーターを使用し、上記の例のメソッドを使用すると、複数の場所で同じものを複製する必要があります。そしてコードは重くなります。