1

次の値を持つテーブルがあります。

ItemName 数量 F ビット 日付

項目 1 100 2011 年 1 月 1 日

アイテム2 150 2011/1/5

アイテム3 200 2011/1/14

アイテム4 250 2011/1/20

項目 5 1000 2011 年 2 月 1 日

MDX クエリでは、日付範囲に基づいてデータをフィルター処理する必要があります。たとえば、2011 年 1 月 1 日から 2011 年 1 月 31 日までの日付範囲のアイテムとその数量を取得する必要がある場合は、次の MDX クエリを使用します。

SELECT 
   NON Empty 
      {[Final Report View For Scorecards].[F Bit Date].Children} ON ROWS, 
   NON Empty 
      {[Measures].[Qty]} ON COLUMNS 
FROM 
  ( 
  SELECT 
     ( 
    {[Final Report View For Scorecards].[F Bit Date].&[2011-01-01T00:00:00] : 
     [Final Report View For Scorecards].[F Bit Date].&[2011-01-31T00:00:00]} 
     ) ON COLUMNS 
  FROM [FinalReportView] 
  )

ここで、FromDate および ToDate パラメーターが 01/01/2011 および 01/20/2011 として渡されると、アイテム 1 から 4 とそれぞれの数量が正しく取得されます。しかし、FromDate と ToDate が 01/01/2011 と 01/31/2011 (または) 01/01/2011 と 01/19/2011 として渡されると、間違った Item5 の値も返されます。つまり、テーブルで使用可能な正確な日付がパラメーターとして渡された場合にのみ、正しい結果が返されます。ただし、テーブルで使用できない日付が渡されると、データセット全体が返されます。

「FILTER」を使用した場合も同様です。

この問題へのポインタはありますか?

4

1 に答える 1

0

存在しないメンバー名を使用すると (ディメンションの MdxMissingMemberMode を に相当する既定の設定に構成した場合Ignore)、Analysis Services は無効なメンバー名を に変換しますNULL。また、範囲演算子は無制限として:解釈nullします。つまりnull、範囲の右側で使用すると、「レベルの最後のメンバーまで」を意味し、左側:では「レベルの最初のメンバーから」を意味します。

それを解決するために何ができますか:

  • 既存のメンバーの名前のみを生成するように注意してください
  • または、問題が発生しないように十分な大きさの日付範囲をディメンション テーブルに入力します。最近ではファクトを追加する必要はありません。ディメンション テーブルにエントリが存在するだけです。
  • または、MDX 内でいくつかの文字列ロジックを使用して、次の既存 (範囲の左側) または前の既存 (範囲の右側) を検索します。MDX で VBA 文字列関数を使用できます。
于 2013-09-18T12:23:53.827 に答える