Mdx 如何在具有某些条件的集合中获得非空成员的计数?
为了让你稍微了解一下这个问题的背景,有一些“用户”执行某些“任务”,这些任务分为不同的类型;其中一种是“DSR”。我面临的要求是查找用户ID 033343在2013年每个月处理了多少DSR类型的请求。Mdx 如何在具有某些条件的集合中获得非空成员的计数?,mdx,ssas-2012,Mdx,Ssas 2012,为了让你稍微了解一下这个问题的背景,有一些“用户”执行某些“任务”,这些任务分为不同的类型;其中一种是“DSR”。我面临的要求是查找用户ID 033343在2013年每个月处理了多少DSR类型的请求。 我需要的是获得用户(Userid=033343)在2013年处理的所有不同请求的set中的成员计数,请求类型=DSR。 以下是我最初尝试的内容: WITH SET requests AS EXISTING [Request].[RequestID].MEMBERS MEMBER Measures
我需要的是获得用户(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移动到集合定义。我认为与在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作为所有月份的计数强>
然后,我想检查我正在构建的集合本身(在第二个示例中)
这证明了两件事
1) 集合正在返回NULL值和非NULL值
2) 确实存在从集合返回的请求ID。因此,对于指定的元组,请求数肯定大于0
我可以使用NON-EMPTY
子句删除非空值,但我不想使用它,因为我知道它会增加开销
如上所述,我已经证实,2013年所有月份的用户确实有请求,为什么我的计数为0?我哪里做错了?为什么存在
和现有
功能不能按预期工作?集合不应该只返回那些条件下存在的请求ID吗?我的理解错了吗
编辑
x
2013 2
对于@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
(未测试)是否仍返回零
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.[x] AS
Count(
NONEMPTY(
[Request].[RequestId].MEMBERS
, {([Measures].[Average of Late Tasks])}
)
)
SELECT
Measures.[x] ON 0,
[Calendar].[CalendarYear].&[2013] ON 1
FROM [Model]
是的,它仍然是零。@Sourav_Agasti好的-我在我们的多维数据集中模拟了一些类似的东西,并在我的答案中添加了另一个脚本(尽管我不相信它会在你的答案中起作用!)在第三个脚本中尝试了很多条件,我们可以得到一个结果,然后可能构建它up@Sourav_Agasti我不参与多维数据集的设计,但想知道是否需要为层次结构配置设置,以便
count
正常工作?我很抱歉。最后一个查询的结果为非零。我将用查询编辑问题,您的第三个脚本不会证明任何事情,因为您创建的请求集不在选择子句中,或者这是一个拼写错误声明0
?是的,一个拼写错误..更正了。我的“答案”(!)中的简化第三个脚本是否仍然返回零?是的,它仍然返回零。
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]