Ssas 为什么DISTINCTCOUNT不提供不同成员的计数,但count(distinct(NONEMPTY())正在工作?

Ssas 为什么DISTINCTCOUNT不提供不同成员的计数,但count(distinct(NONEMPTY())正在工作?,ssas,mdx,ssas-2012,Ssas,Mdx,Ssas 2012,这是我在SO上发布的另一篇文章的延续。所以发生的事情是CountNoneEmpty似乎能让我得到count,但DISTINCTCOUNT却不能。我运行函数的值集实际上是不同的。以下是我正在使用的查询: WITH MEMBER Measures.[x] AS Count( NONEMPTY( [Request].[RequestID].children , {([Measures].[Average of Late Tasks])} )

这是我在SO上发布的另一篇文章的延续。所以发生的事情是CountNoneEmpty似乎能让我得到count,但DISTINCTCOUNT却不能。我运行函数的值集实际上是不同的。以下是我正在使用的查询:

WITH MEMBER Measures.[x] AS
   Count(
     NONEMPTY(
       [Request].[RequestID].children
       , {([Measures].[Average of Late Tasks])}
     )      
   )

 MEMBER Measures.[y] AS
  DISTINCTCOUNT((
       [Request].[RequestID].children
       , {([Measures].[Average of Late Tasks])}
     ) )   

WITH MEMBER Measures.[z] AS
   Count(DISTINCT
     NONEMPTY(
       [Request].[RequestID].children
       , {([Measures].[Average of Late Tasks])}
     ))      
   ) 

SELECT 
   {Measures.[x], Measures.[y]} ON 0,
   [Calendar].[CalendarMonthName].children ON 1 
FROM [Model]
WHERE 
([Calendar].[CalendarYear].&[2014],
[User].[UserID].&[033343])
输出

问题是,为什么COUNTNONEMPTY有效,而DISTINCTCOUNT无效?当请求ID都是不同的时也是如此

例如,我检查了AugustCount=6月份的RequestId,请参见上面的结果

我运行了以下MDX:

SELECT 
   [Measures].[Average of Late Tasks] ON 0,
   non empty ([Calendar].[CalendarMonthName].&[August], [Request].[RequestID].children) ON 1 
FROM [Model]
WHERE 
([Calendar].[CalendarYear].&[2014],
[User].[UserID].&[033343])
输出

这意味着它们都是不同的请求!然而,DISTINCTCOUNT返回0。背景里发生了什么

NonEmpty是一个具有一个或两个参数的函数,这两个参数都应该设置。另一方面,DistinctCount是一个只有一个参数的函数,该参数应该是一个集合。不管括号中的构造是什么

([Request].[RequestID].children
   , {([Measures].[Average of Late Tasks])}
)
是的,它不是一个格式良好的集合定义。您可能希望使用什么来代替

DISTINCTCOUNT((
   [Request].[RequestID].children
   , {([Measures].[Average of Late Tasks])}
 ) )
可能是

DISTINCTCOUNT(Filter(
   [Request].[RequestID].children
   , Not(IsEmpty([Measures].[Average of Late Tasks]))
 ) )
检查MDX中的空值。您不能使用=,因为在数值上下文中,NULL被=,视为0


无论如何,我会假设这比其他两个解决方案慢。

+1这是一个有趣的问题-希望他们能给出答案。它仍然给出零。
DISTINCTCOUNT((
   [Request].[RequestID].children
   , {([Measures].[Average of Late Tasks])}
 ) )
DISTINCTCOUNT(Filter(
   [Request].[RequestID].children
   , Not(IsEmpty([Measures].[Average of Late Tasks]))
 ) )