为了让您了解问题的背景,某些“用户”执行某些“任务”,这些“任务”分为各种类型;一种这样的类型是“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!
然后,我想检查我正在构建的集合本身(在第二个示例中)
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]
这证明了两件事。
1) 该集合返回 NULL 值和非空值。
2)确实有从集合返回的Request Id。因此,对于指定的元组,Requests 的计数肯定大于 0。
我可以使用该NON EMPTY
子句来删除 NON NULL 值,但是我不想使用它,因为我读到它会增加开销。
正如我在上面验证的那样,在 2013 年的所有月份中确实存在对各种用户的请求,为什么我的计数为 0?我哪里错了?为什么and功能没有按预期工作?集合不应该只返回条件存在的那些请求 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