これは私を悩ませてきました。なぜそんなに難しいのかわかりません。特定の時点まで空の値を持ち、その後値を持ち始めるメジャーがあります。毎月の平均を取得したいのですが、実際には空でない値を持つ月のみです。また、どの月に値があるかに関係なく、クエリの時間範囲を固定したい (たとえば、1 年全体)
以下は、私が試した MDX のバリエーションの 1 つです。
WITH
MEMBER Measures.MonthsWithSales AS
(IIF( IsEmpty(([Time].[Month].CurrentMember,[Measures].[ProductsSold])), 0, [Measures].[MonthCount]))
MEMBER Measures.AvgProductsSold AS
[Measures].[ProductsSold] /Measures.MonthsWithSales
SELECT
{
[Measures].[ProductsSold], [Measures].[MonthCount],
[Measures].[MonthsWithSales], [Measures].[AvgProductsSold]
} ON 0,
[Time].[Month].Members ON 1
FROM MyCube
WHERE [Time].[Year].&[2010-01-01T00:00:00]
次のようなものを返します。
ProductsSold MonthCount MonthsWithSales AvgProductsSold
All 1644 12 **12** **137**
2010-01-01 00:00:00.000 (null) 1 0 (null)
2010-02-01 00:00:00.000 (null) 1 0 (null)
2010-03-01 00:00:00.000 (null) 1 0 (null)
2010-04-01 00:00:00.000 (null) 1 0 (null)
2010-05-01 00:00:00.000 (null) 1 0 (null)
2010-06-01 00:00:00.000 234 1 1 234
2010-07-01 00:00:00.000 237 1 1 237
2010-08-01 00:00:00.000 236 1 1 236
2010-09-01 00:00:00.000 232 1 1 232
2010-10-01 00:00:00.000 232 1 1 232
2010-11-01 00:00:00.000 233 1 1 233
2010-12-01 00:00:00.000 240 1 1 240
問題は ALL 行にあります。MonthsWithSales
年間全体では 12 ではなく 7 が返され、AvgProductsSold
(月あたりの売上高) は 137 ではなく 234.86 になると思います。
MonthCount
ALLレベルで使用しているため、思い通りにならないことに気づきました。MonthCount
しかし、「すべて」を計算しているときに、関連する月のみを合計するために「月ごとのディメンション」に「沈む」方法がわかりません。