Mdx 如何在具有某些条件的集合中获得非空成员的计数?

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

为了让你稍微了解一下这个问题的背景,有一些“用户”执行某些“任务”,这些任务分为不同的类型;其中一种是“DSR”。我面临的要求是查找用户ID 033343在2013年每个月处理了多少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移动到集合定义。我认为与在
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]