1

過去にイベント数のレポートに使用したキューブがあります。たとえば、7 月について、製品ごとに発生したイベントの数を分類したいとします。

私は次のようなものを持っています:

SELECT Measures.[Count] ON COLUMNS,
    Product.[Product Id].Members ON ROWS
FROM [MyCube]
WHERE [Time].[Month].[July 2012]

次のような出力で:

        Count
Car     5
Train   6

ここで、出力を次のように変更したいと思います。

        Count   Avg Days since sale
Car     5       12
Train   6       14

それ、どうやったら出来るの?

MDX でこれに対する解決策を見つけるために数時間を費やしましたが、これを行う方法が見つかりません。(私はMDXに非常に慣れていません)

COLUMNSまたはROWSのいずれかに日を含めた場合に機能するいくつかのソリューションを見つけました。例えば:

WITH MEMBER Measures.[NumDays] as
    count([Time].[Date].CurrentMember :
        [Time].[Date].&[2012-07-27T00:00:00])
SELECT
    ([Time].[Date].Members,{Measures.[Count],Measures.[NumDays]}) ON COLUMNS,
    [Product].[Product Id].Members ON ROWS
FROM [MyCube]
WHERE [Time].[Month].[July 2012]

これは私を本当に近づけます。結果は次のようになります。

        July 1                July 2                ...
        Count    Num Days     Count    Num Days     ...
Car     1        24           3        23
Train   0        24           1        23

この結果セットを使用して、.NET コードで必要なものを取得できます。販売からの平均日数を加重平均で計算できます。
たとえば、車の場合は(1*24 + 3*23)/(1 + 3). これを機能させるには、.NET コードでいくつかの破損した不幸なことを行う必要があり、必要なデータの約 80 倍のデータをサーバーから送り返す必要もあります。

[Time].[Date].Members私が MDX で遭遇した問題は、結果セットから取り出すとすぐにで[Time].[Date].CurrentMemberあり[Time].[Date].All、そこから意味のある計算を行うことができないということです。

2 番目の MDX をサブクエリとして使用し、返される値を必要な方法でロールアップする方法はありますか?

サブクエリのアプローチは私のソリューションには必要ありませんが、それが可能かどうか興味があります。どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

0

Sum関数を使用できます。

WITH MEMBER [Measures].[NumDays] AS
    Count([Time].[Date].CurrentMember :
        [Time].[Date].&[2012-07-27T00:00:00])
MEMBER [Measures].[avg] AS Sum([Time].[Date].Members, Measures.[Count] * [Measures].[NumDays])/ Sum([Time].[Date].Members, Measures.[Count])
SELECT
    {[Measures].[avg]} ON COLUMNS,
    [Product].[Product Id].Members ON ROWS
FROM [MyCube]
WHERE [Time].[Month].[July 2012]

2 番目のクエリから削除する[Time].[Date].Membersと、関連付けられた階層の現在のメンバー[Time].[Date]が既定のメンバー (すべてのメンバー) になります。

于 2012-07-27T21:25:34.217 に答える