none
ファクトディメンションの属性キー重複

    質問

  • BI初心者で、かつ初めての投稿になります。よろしくお願いします。

    SSASにてファクトディメンションを処理すると「重複した属性キーが処理中に見つかりました」と表示されてしまう属性があります。(属性のキーも名称も同一のものを設定しています)
    下記フォーラムの情報からキー項目の末尾に半角スペースが入っているとエラーになるケースがあるということはわかったのですが、Trimming設定を「None」にしても解決しません。
    http://social.msdn.microsoft.com/Forums/ja/sqlserverbija/thread/47d2771b-109d-4872-bd53-46e78cca2790

    該当するカラムにRTRIMを行ったものを属性にしてみたり、末尾の半角スペースだけでなく全角スペースを削ってみたりといろいろ試しましたが、やはり重複エラーとなってしまいます。
    他にファクトディメンションにて属性キーが重複するケースがあるのでしょうか?
    重複エラーを無視する設定があることもわかったのですが、できれば原因が知りたいところです。

    (補足)
    ファクトテーブルには1千万件近いレコードが格納されています。
    ファクトディメンションを作成する目的としてはドリルスルーにてデータソースの全項目を表示したいためです。
    こちらに関しては下記フォーラムの情報を参考にしています。
    http://social.msdn.microsoft.com/Forums/ja/sqlserverbija/thread/3f78fe53-ec54-4dd8-b062-169fc320ada5



    • 編集済み S.Ya 2011年12月4日 12:59
    2011年12月4日 12:56

回答

  • まず、同一キーのエラーが発生するのはディメンジョンの処理中
    と理解しましたが、よろしいでしょうか?(キー重複はここでしか出ないか・・・)

    キー重複は、
      「同一キーで別々の上位階層に紐づいているデータがある」
      「同一キーで別々の名称/Valueとなるデータがある」
    という場合に発生します。(他にも可能性はありますが)

    キー重複の調べ方としては、
    処理中に表示される画面のツリーの中に、発行されているSQLが
    出力されていると思いますので、そのSQLの実行結果を入手することが
    調査の第一歩です。

    さらに、警告ログとして、どのようなデータが「重複」と判定されたかが
    出力されるはずですので、これに該当するデータを上記出力結果から
    リストアップします。

    根本的なデータ不整合でなければ、他の可能性として
    記載いただいている「trim」の問題の他に
    ・末尾の空白は、DBでは別々に扱われるが、SSASではTRIMされて扱われる
    ・NULLと空白は、DBでは別々に扱われるが、SSASでは同一として扱われる(通常は)
    ・その他、照合順序の違いで、下記のポイントに相違が出る
       [全角・半角][大文字・小文字]
    等があります。


    ---------------------------------
    Infospire Kayano
    • 回答の候補に設定 山本春海Moderator 2011年12月12日 8:38
    • 回答としてマーク S.Ya 2011年12月19日 13:39
    2011年12月7日 7:55

すべての返信

  • まず、同一キーのエラーが発生するのはディメンジョンの処理中
    と理解しましたが、よろしいでしょうか?(キー重複はここでしか出ないか・・・)

    キー重複は、
      「同一キーで別々の上位階層に紐づいているデータがある」
      「同一キーで別々の名称/Valueとなるデータがある」
    という場合に発生します。(他にも可能性はありますが)

    キー重複の調べ方としては、
    処理中に表示される画面のツリーの中に、発行されているSQLが
    出力されていると思いますので、そのSQLの実行結果を入手することが
    調査の第一歩です。

    さらに、警告ログとして、どのようなデータが「重複」と判定されたかが
    出力されるはずですので、これに該当するデータを上記出力結果から
    リストアップします。

    根本的なデータ不整合でなければ、他の可能性として
    記載いただいている「trim」の問題の他に
    ・末尾の空白は、DBでは別々に扱われるが、SSASではTRIMされて扱われる
    ・NULLと空白は、DBでは別々に扱われるが、SSASでは同一として扱われる(通常は)
    ・その他、照合順序の違いで、下記のポイントに相違が出る
       [全角・半角][大文字・小文字]
    等があります。


    ---------------------------------
    Infospire Kayano
    • 回答の候補に設定 山本春海Moderator 2011年12月12日 8:38
    • 回答としてマーク S.Ya 2011年12月19日 13:39
    2011年12月7日 7:55
  • 私も知識の浅い者ですので参考になるかわかりませんが、

    ディメンションの主テーブルでなく、関連テーブルから取得している項目の場合、キー項目に同一の値があると重複エラーになります。

    この場合、重複エラーを無視して処理を行うと集計が正しく行われないので、原因となっているデータを探して修正する必要があります。

    重複エラーが起こった項目のディメンション、テーブル、列、値がログに出力されているはずですので、目星をつけたらデータソースのテーブルにSQLを実行するなどして重複している列項目を特定してください。

    重複エラーの原因が上述の通りであった場合、KeyColumensプロパティを表示名と同一でなくリレーションキーに設定することで回避できます。

    2011年12月12日 14:21
  • >IS Kayano様
    返信が遅くなってしまい申し訳ありません。

    やはりディメンションの処理中に重複キーエラーが出る件は
    >・末尾の空白は、DBでは別々に扱われるが、SSASではTRIMされて扱われる
    >・NULLと空白は、DBでは別々に扱われるが、SSASでは同一として扱われる

    このどちらかかもしれません。大変参考になりました。
    (時間が取れず原因調査はできていません・・・)

    別件で重複キーエラーが出る問題にぶち当たりまして、
    そちらは下記にスレを変えて質問したいと思います。
    http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverbija/thread/fb69e1a9-a9a1-4bbf-9b64-7842ffcde65a

    よろしければこちらにも回答頂けると助かります。
    ありがとうございました。

    • 編集済み S.Ya 2011年12月19日 13:27
    2011年12月19日 13:25
  • >Ka4Wa様
    ディメンションの主テーブルで重複キーエラーが出ていたため、困惑していた次第です。
    この場合、KeyColumensプロパティを表示名と同一にすることで、SQLで言うところの
    「GROUP BY」と同一の動きをすると思っていたのですが、違った様です。

    ご回答ありがとうございました。

    新たな重複キーエラーの件についても何らか情報を頂けると助かります。
    http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverbija/thread/fb69e1a9-a9a1-4bbf-9b64-7842ffcde65a

    2011年12月19日 13:33