为了解决问题的背景,某些“用户”会执行某些“任务”,这些“任务”被分类为各种类型;一种这样的类型是“DSR”。我面临的要求是找到 2013年每个月用户ID 033343处理的DSR类型的请求数量。
我需要的是获取用户(Userid = 033343)在年份= 2013中处理的所有不同请求的set
中的成员计数以及请求类型= 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 Ids。因此,对于指定的元组,请求的数量肯定大于0。
我可以使用NON EMPTY
子句删除NON NULL值但是,我不想使用它,因为我读到它增加了开销。
正如我上面已经验证的那样,对于2013年所有月的各种用户确实有请求,为什么我得到了计数是0?我哪里错了?为什么EXISTS
和EXISTING
功能不按预期工作?该集合是否应仅返回条件 存在 的请求ID?我的理解错了吗?
修改
对于@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
答案 0 :(得分:0)
(未测试)这仍然会返回零吗?
WITH SET [requests] AS
{([User].[UserID].&[033343],
[Request Type].[Request Type Name].&[DSR])}
* {[Measures].[Average of Late Tasks]} //<<<<try running with and without this line
* [Request].[RequestID].MEMBERS
MEMBER Measures.[Count033343] AS
DISTINCTCOUNT(requests)
SELECT
[Calendar].[CalendarMonthName].CHILDREN ON 0,
Measures.[Count033343] ON 1
FROM [Model]
WHERE(
[Calendar].[CalendarYear].&[2013]
)
以下情况如何?
WITH
MEMBER Measures.[Count033343] AS
DISTINCTCOUNT({[Request].[RequestID].[RequestID]})
SELECT
[Calendar].[CalendarMonthName].CHILDREN ON 0,
Measures.[Count033343] ON 1
FROM [Model]
WHERE(
[Calendar].[CalendarYear].&[2013],
[User].[UserID].&[033343],
[Request Type].[Request Type Name].&[DSR]
)
也许首先尝试这个更简单的查询(如果它有效!)我们可以从中构建以尝试找到问题......
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]