3

私はMDX全体にかなり慣れていませんが、以下は私をバタバタさせています。FILTER私が使用しているステートメントは演技しています...奇妙なことに。コードサンプルとそれに続く説明:

SELECT
    {
        FILTER(
            MEMBERS([Time].[5-4-4 Week Year]),
            [Measures].[Ship Gross Units] > 0
        )
    }
    ON COLUMNS,
    {
        FILTER(
            MEMBERS([Group].[Alternate Hierarchies]),
            [Measures].[Ship Gross Units] > 0
        )
    }
    ON ROWS
FROM SBD.SBD
WHERE
    (
        [FiscalYear].[FY09],
        [Scenario].[Actuals Total],
        [Measures].[Ship Gross Units],
        [Channel].[FOS]
    )

会計年度の週ごとに、特定の販売チャネルの総ユニット数を取得しようとしています(一部の列がわずかにわかりにくくなっています)。これらのフィルターはすべて、SKUレベルで分割する必要があることが多いため、適切に配置されています。また、マシン上で切り捨てられたデータセットを処理する方が簡単です(DBに作業を任せてください)。

問題は、このクエリがFOSチャネルで0の売上を返すことです。それは奇妙に思えたので、行フィルターを削除しました。

SELECT
    {
        FILTER(
            MEMBERS([Time].[5-4-4 Week Year]),
            [Measures].[Ship Gross Units] > 0
        )
    }
    ON COLUMNS,
    MEMBERS([Group].[Alternate Hierarchies])
    ON ROWS
FROM SBD.SBD
WHERE
    (
        [FiscalYear].[FY09],
        [Scenario].[Actuals Total],
        [Measures].[Ship Gross Units],
        [Channel].[FOS]
    )

そして突然、FOSチャネルに売り上げが表示されます。これは私の心を吹き飛ばします。以前は、売上を示す行のみを受信するようにフィルタリングしていると想定していましたが、何も取得しませんでした。今、私はすべてを示しています、そして売上高のある行があります。Perlなどでこの問題を回避するのは簡単ですが、私はむしろ「正しく」解決したいと思います。

ちょっとした細部を誤解しているのは確かですが、机に頭をぶつけるのはうんざりです。

ありがとう!

4

1 に答える 1

2

私は通常、Microsoft Analysis Services を使用していますが、MDX は通常、Essbase で使用されているものと非常によく似ています。

軸は独立して評価されるため、Group のフィルター ステートメントは where 句のメンバーのみを調べます。では、Gross Units にいくつかのマイナスがあり、FY09 で 0 以下になる可能性はありますか? または、ユニット カウントが十分に大きく、データ型がオーバーフローして負の数に戻る可能性がありますか?

空でないセルを探しているだけの場合に考えられる回避策の 1 つは、軸で NON EMPTY キーワードを使用することです。例えば。

SELECT    
   NON EMPTY MEMBERS([Time].[5-4-4 Week Year]),
     ON COLUMNS,
   NON EMPTY  MEMBERS([Group].[Alternate Hierarchies])
     ON ROWS
FROM SBD.SBD
WHERE
    (
        [FiscalYear].[FY09],
        [Scenario].[Actuals Total],
        [Measures].[Ship Gross Units],
        [Channel].[FOS]
    )
于 2008-11-10T02:29:29.280 に答える