0

問題の背景を少し説明すると、さまざまなタイプに分類される特定の「タスク」を実行する特定の「ユーザー」がいます。そのようなタイプの 1 つが「DSR」です。私が直面している要件は、ユーザー ID 033343 が 2013 年の各月に処理したタイプ DSR の要求の数
を見つけることです。 私が必要とするのはset、ユーザー (ユーザー ID = 033343) 年 = 2013 で、要求タイプ = DSR に取り組みました。以下は私が最初に試したことです:

WITH SET requests AS
EXISTING [Request].[RequestID].MEMBERS

MEMBER Measures.[Count033343] AS
DISTINCTCOUNT(requests)

SELECT Measures.[Count033343] ON 1,
[Calendar].[CalendarMonthName].CHILDREN ON 0 /*Values like January, February, etc. Not tied to Calendar Years*/
FROM [Model]
WHERE(
                 [User].[UserID].&[033343],
                 [Request Type].[Request Type Name].&[DSR],
                 [Calendar].[CalendarYear].&[2013]

      )

しかし、それはうまくいきませんでした。以下の結果になりました。

where句のタプル

私が構築していたセットに問題があると考えました。

次に、MDX を Set 定義に移動します。WHERE余分なタプルのセットを節に持つよりも、コードの動作が速くなるかもしれないと思いました。

WITH SET requests AS
EXISTS([Request].[RequestID].MEMBERS, (
                     [User].[UserID].&[033343],
                     [Request Type].[Request Type Name].&[DSR],
                     [Calendar].[CalendarYear].&[2013]
      ))

MEMBER Measures.[Count033343] AS
DISTINCTCOUNT(requests)

SELECT Measures.[Count033343] ON 1,
[Calendar].[CalendarMonthName].MEMBERS ON 0
FROM [Model]

しかし、私はまだ上記と同じ結果を得ていました-すべての月のカウントとして0!

それから、私が構築していたセット自体をチェックすることを考えました(2番目の例では)

WITH SET requests AS
EXISTS([Request].[RequestId].MEMBERS, (
                     [User].[UserID].&[033343],
                     [Request Type].[Request Type Name].&[DSR],
                     [Calendar].[CalendarYear].&[2013]
      ))

SELECT [Measures].[Average of Late Tasks] ON 1,
requests ON 0
FROM [Model]

ここに画像の説明を入力

それは2つのことを証明しました。

1) セットは、NULL 以外の値とともに NULL 値を返していました。

2) 実際にセットから返されたリクエスト ID があります。そのため、指定されたタプルの Requests の数は確実に 0 より大きくなります。

この句を使用しNON EMPTYて NON NULL 値を削除できますが、オーバーヘッドが追加されることを読んだので、使用したくありません。

上記で確認したように、2013 年のすべてのにさまざまなユーザーのリクエストが実際にあるのに、カウントが 0 になっているのはなぜですか? どこが間違っていますか?との機能が期待どおりに機能しないのはなぜですか? セットは、条件に存在するリクエスト ID のみを返すことになっていませんか? 私の理解は間違っていますか?EXISTSEXISTING

編集

@whytheqの場合-最後のクエリで、ゼロ以外の値を取得しました

WITH MEMBER Measures.[x] AS
   Count(
     NONEMPTY(
       [Request].[RequestId].MEMBERS
       , {([Measures].[Average of Late Tasks])}
     )      
   )
SELECT 
   Measures.[x] ON 0,
   [Calendar].[CalendarYear].&[2013] ON 1 
FROM [Model]

出力

       x
2013   2
4

1 に答える 1