2

これは私を悩ませてきました。なぜそんなに難しいのかわかりません。特定の時点まで空の値を持ち、その後値を持ち始めるメジャーがあります。毎月の平均を取得したいのですが、実際には空でない値を持つ月のみです。また、どの月に値があるかに関係なく、クエリの時間範囲を固定したい (たとえば、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 になると思います。

MonthCountALLレベルで使用しているため、思い通りにならないことに気づきました。MonthCountしかし、「すべて」を計算しているときに、関連する月のみを合計するために「月ごとのディメンション」に「沈む」方法がわかりません。

4

2 に答える 2

3

月の階層に 2 つのレベルがあると仮定しました。1 つは All メンバーで、もう 1 つは月です。

MEMBER Measures.AvgProductsSold AS 
            IIf([Time].[Month].CurrentMember.Level.Ordinal = 0
                    , Avg([Time].[Month].CurrentMember.Children, [Measures].[ProductsSold])
                    , [Measures].[ProductsSold])

( に置き換える必要がある場合があり[Time].[Month].CurrentMember.Childrenます[Time].[Month].Members)

Avg関数は、空でない値の平均を計算します。

于 2012-07-03T21:59:40.493 に答える
1

時間階層を適切に使用して、最終的に使用する可能性が高いクエリを次に示します。

WITH 
MEMBER [Measures].[MonthsWithSales]
AS
COUNT
(
    FILTER
    (
        DESCENDANTS([Time].[YQMD].CurrentMember,[Time].[YQMD].[Month]),
        NOT ISEMPTY([Measures].[ProductsSold])
    )
)

MEMBER
[Measures].[AvgProductsSold]
AS
[Measures].[ProductsSold]/[Measures].[MonthsWithSales]

SELECT
{
[Measures].[ProductsSold],
[Measures].[MonthsWithSales],
[Measures].[AvgProductsSold]
} ON 0,

[Time].[Month].Members ON 1

FROM MyCube

[YQMD] は、次のレベルの時間階層です: 1 年、2 四半期、3 月、4 日

于 2012-07-04T16:14:50.560 に答える