1

これは、私が SO に投稿した別の質問の続きです。だから、何が起こっているのかはCOUNT(NONEMPTY私にカウントされるようですが、そうで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])

出力

           x    y   z
January    1    0   1
February   1    0   1
March      1    0   1
April      1    0   1
May        1    0   1
June       1    0   1
July       1    0   1
August     6    0   6
September  6    0   6
October    7    0   7
November   0    0   0
December   0    0   0

質問は、なぜ機能COUNT(NONEMPTY(するのに DISTINCTCOUNT が機能しないのですか? RequestID がすべて異なる場合も同様です。

たとえば、8 月の RequestID を確認しました (カウント = 6、上記の結果を参照)。

以下の 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])

出力

                Average of Late Tasks
August  3157    0.00
August  3337    0.00
August  3769    0.00
August  4012    0.00
August  4191    0.00
August          1.22

つまり、それらはすべて別個の要求です。それでも、DISTINCTCOUNT0 を返します。ここでバックグラウンドで何が起こっているのでしょうか?!

4

1 に答える 1

0

NonEmptyドキュメントによると、1 つまたは 2 つの引数を持つ関数であり、どちらも設定する必要があります。一方、ドキュメント によるとDistinctCount、引数は1つだけで、セットでなければならない関数です。括弧内の構成は何でも

([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]))
 ) )

IsEmptyMDX の NULL 値をチェックします。を使用してそれを行うことはできません=。数値コンテキストでは、NULL は によって 0 のように扱われ=ます。

とにかく、これは他の2つのソリューションよりも遅いと思います。

于 2014-10-28T20:37:00.773 に答える