none
SQL Server 2005 Analysis Service使用時の DistinctCountについての疑問です RRS feed

  • 質問

  • sokayamaと申します。

     

    最近、仕事で初めてSQLServerを使い始めましたが、不明点が多くなかなか思うようにいかない状況です。
    MicrosoftTechNet等を調べてはみたのですが、解決することができなかったので、質問をさせていただきました。

     


    現在は、ある帳票を作成する際に使用している「DistinctCount」で悩んでおります。

     

    メジャーに変数を追加し、用意されている「個別のカウント」の設定を用いて、
    該当カラムに存在するレコードの種類数を得たいと考えております。

     

    NULLのレコードをカウントしない結果を得たいのですが、
    現在の設定では、NULLのレコードをカウントしてしまっております。

     

    NULLのレコードをカウントしてしまっていると判断したのは、
    該当カラムの全てのレコードをNULLと設定した際に得られた結果が「1」となったためです。

     


    この課題を解決する手法、設定、もしくはその他の手法で何かよいアイデアがありましたら、
    皆様より御教授いただけたら幸いです。

     

     


    現状は以下のとおりです。


    1:環境
     SQL Server 2005 Analysis Service

     

    2:設定
    a:メジャーに変数「回数」を作成し、「個別のカウント」に設定。該当カラム内の種類数をカウント。
    b:プロパティの設定は以下のようになっております。(一部です)
      AgregateFunction:DistinctCount
      NullProcessing:Automatic
      InvalidXmlCharacters:Preserve
      Triming:Right

    2007年7月3日 5:26

すべての返信

  • 単純に、データソースビュー上で参照するファクトテーブルを名前付きクエリにして

    WHERE XXX IS NOT NULL、としてあげては?

     

    NULLのレコードをカウントしてしまっていると判断したのは、
    該当カラムの全てのレコードをNULLと設定した際に得られた結果が「1」となったためです。

    NULLというセルが存在するのですから、それが集計(カウントアップ)されたのではと思います。

    キューブのアクションにドリルスルーを追加すれば、どこのレコードが原因で1と表示されるのかが

    わかると思います。

    (多分、NULLレコードが列挙されるでしょうが・・・)

    2007年7月4日 2:15
  •  返信が遅くなりまして、申し訳ありません。

    st.lainさんご返答をありがとうございます。

     

     

    >単純に、データソースビュー上で参照するファクトテーブルを名前付きクエリにして

    WHERE XXX IS NOT NULL、としてあげては?

     

    これはMDX式を用いて、計算を行うとよいという意味でしょうか?

    もしそうでしたら、MDX式の設定する方法を簡単にでも教えていただけませんでしょうか。

    初歩的な質問で申し訳ありませんが、よろしくお願いいたします。

     

     

    2007年7月10日 8:03
  • これはMDX式を用いて、計算を行うとよいという意味でしょうか?

    いえ、データソースビューの段階で、ファクトテーブルの計上したいデータをSQLクエリ

    を用いて条件付けするということです。

     

    VS2005のソリューションエクスプローラが仮に以下のように表示されていると思います。

     

    XXXX_PROJECT

    + データソース

    |  |- MyDataSource

    + データソースビュー

    |  |- MyDataSourceView (←ここを選択)

    + キューブ

    |  |- MyCube

    | (略)

     

    MyDataSourceViewをダブルクリックすればファクトテーブル⇔ディメンションテーブルの

    関連が表示されると思います。

     

    sokayamaさんのファクトがどのようになっているか分かりませんが、ファクトテーブルを

    名前つきクエリに変更して、WHERE XXX IS NOT NULL、で計上されるであろうNULL

    レコードを取り除く、ということです。

     

    MDX式の設定する方法を簡単にでも教えていただけませんでしょうか。

    MDXで参照可能な最小単位はセル(ディメンションが交差するポイント)ですから、

    この問題をMDXで解決はできないと思われます。

     

    前回も書きましたが、計上された値に対して疑いがあるのであれば、ドリルスルーで

    確認を行ってみてください。

     

    1. プロジェクトエクスプローラからキューブ(仮に、MyCube)を選択

    2. [アクション]タブを選択

    3. "アクションオーガナイザ"上で、ポップアップメニューから[新しいアクション]を選択

    4. <<名前>>を適当(仮に、"My Drill Througt")に入力

    5. メジャーグループのメンバ、及び関連するディメンションを追加。

    6. 構成を保存して、キューブを処理

    7. [ブラウザ]タブを選択して、ピボットにディメンション、メジャーを配置

    8. 値が疑わしいセルを選択して、ポップアップメニューから[My Drill Througt]を選択

    9. データサンプルビューア上でどのレコードが計上されたのか確認

     

    2007年7月11日 5:50