web-dev-qa-db-ja.com

対応するディメンションのないデータウェアハウスメジャー

このテーブルを含む運用データベースがあります。

salesQuality salesPrice salesCategory

私のビジネス要件によると、salesQalitysalesPriceはメジャーです。

ただし、salesCategoryはディメンションです。

残念ながら、操作データベースには、salesCategory値のない行がいくつかあります。

カテゴリディメンションにカテゴリ値がないこれらの売上を表すには、ファクトテーブルで何をする必要がありますか?

1
Marco Dinatsoli

データウェアハウスは、ビジネスに使用可能なデータを提供するために存在します。 NULL値は、ユーザーに何も伝えません。あなたはもっとうまくやれる。また、ファクトテーブルをディメンションテーブルに結合するときにNULL値がドロップアウトし、過少カウントが発生します。

ディメンションテーブルに、トランザクションデータベースがNULLを格納する可能性のある各シナリオのレコードを含めます。私のすべてのディメンションテーブルには、「該当なし」と「不明」の2つ以上がありますが、これらは、より適切な回答が得られない場合のフォールバックオプションにすぎません。

例として、Salespersonについて考えてみます。トランザクションデータベースのこのフィールドにセールのNULLが含まれている場合は、...

  • 注文したばかりで、営業担当者はまだ入力されていません
  • 販売は企業のWebサイトから直接行われました。営業担当者はいません
  • 複数の営業担当者が関与しており、1人の担当者がクレジットを取得することはできません
  • 通常の販売ではありませんが、会計上の修正です
  • 営業担当者は請求書に記録されていません
  • 請求書に営業担当者の名前が判読できなかった
  • 営業担当者はわかっていますが、Salespeopleディメンションにまだ読み込まれていません

各シナリオ(ビジネスにとってもっともらしい)はSalespeopleディメンションの値を取得する必要があり、Salesファクトテーブルのすべてのレコードはこれらのいずれかを指している必要があります。必要に応じて、「営業担当者がいない」などの一般的なものに頼りますが、それは、改善すべき情報がない場合に限られます。

データウェアハウスでNULL値を使用する唯一の場所は、metricが欠落しているか、適用できない場所です。 SalesQuantityフィールドとSalesPriceフィールドはおそらくINTタイプとDECIMALタイプであるため、テキスト値を保存することはできません。 「-1 =入力されていない、-2 =保留中、-3 =判読不能」などのコードを使用できますが、集計を実行するときは、これらを注意深く回避する必要があります。

1

欠落しているディメンションデータを処理するための標準的なアプローチは、ファクトテーブルの関連データにnull値を入力することです。

このアプローチが何らかの理由(テーブルの制約、ビジネスルール)で問題がある場合、技術的に正しくない場合でも、「null」を表す次元値を追加することは許容されます。このソリューションを実装することを選択した場合、増分処理ではnull <> nullを考慮する必要があることに注意してください。

別の可能な解決策は、ビジネスに(アプリケーションの変更、データフィードの変更、外部のデータベンダーとの相談など)、より堅牢なsalesCategoryディメンションを定義するように促すことです。つまり、ディメンションのケースをさらに定義して、欠落している値が削減または排除され、データに存在する穴が少なくなります。

1
Thomas Cleberg

基本的に、salesCategory列にNULL値があります。実際にテーブルにNULL値があることは、直面している問題のために一般的に悪いことです。

最も正確な結果が得られるように、これらの値が存在するようにデータを修正するのが最善の方法です。

NULL値を削除/修正できない場合は、行をNULLでフィルタリングすることに制限されますが、これにより集計が歪曲されるか、「UnknownMember」を使用してNULLが処理されます。これにより、Salescategory値がNULLの行が「不明」としてマークされます。このようにして、集計が正しくなり、すべてのデータが表示されます。

SSASを使用している場合は、ディメンション->プロパティ-> KeyColumns-> NullProcessingで「UnknownMember」を設定できます。

1
James Anderson