問題の背景を少し説明すると、さまざまなタイプに分類される特定の「タスク」を実行する特定の「ユーザー」がいます。そのようなタイプの 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]
)
しかし、それはうまくいきませんでした。以下の結果になりました。
私が構築していたセットに問題があると考えました。
次に、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 のみを返すことになっていませんか? 私の理解は間違っていますか?EXISTS
EXISTING
編集
@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