0

OLAP ではかなり一般的なシナリオであると私は信じていますが、それに対処するための本当に優れた方法は私に飛び出していません。

私は、複数のアイテムの販売取引について、それぞれに異なる製品を使用していると言いました..

ここに画像の説明を入力

私がやりたいのは、製品グループの組み合わせをカテゴリ、つまり「犬のみ」、「猫のみ」、「猫と犬」に割り当てることです

だから、あなたは次のようなものになってしまうでしょう..

ここに画像の説明を入力

可能であれば、Transact-SQL または SSIS でこれを達成することを望んでいます。計算されたメンバー/メジャーが遅いことがわかりました。それが最善の方法である場合、そのソリューションを受け入れます

どんな助けでも大歓迎です

4

3 に答える 3

1

ディメンションモデリング(キンボール方法論)のベストプラクティスに従う場合は、すべての製品グループを含む製品のディメンションテーブルを1つだけにする必要があります。つまり、すべての製品属性を1つのディメンションで非正規化します。このProductディメンションには、代理キーProductKeyが含まれます(SQL ServerのIdentity列を使用します)。PKであるこのキーは、すべての変換を含むファクトテーブルのFKになります。したがって、単純なモデルに基づいて、すべてのメジャー(金額、数量)と製品ディメンション(ProductKey)への1つのFKを含む販売情報用の1つのファクトテーブルがあります。商品ディメンションには、カテゴリを含むすべての商品属性が含まれます。

SSASでは、DSVに2つのテーブルを配置し、1つのディメンション(製品)を作成するだけで、すべてが自動的に処理されます。

于 2012-05-03T20:01:26.700 に答える
0

理想的には、製品グループのテーブルを用意し、この情報を製品ディメンションに追加する必要があります。

すでにこの情報を入力するのに問題がある場合は、SSISでルックアップ変換を使用して製品グループを取得する必要があります

于 2012-05-03T09:35:03.940 に答える
0

T-SQL でそれを実行したい場合、(2 番目の例のように) テーブルが 1 つしかない場合は、次のような方法でうまくいきます。

update [transactions_table] set [product_group] = 'dog only'
where [product] in ('labrador', 'st bernard')

update [transactions_table] set [product_group] = 'cat and dog'
where [product] in ('chihuahua', 'tabby')

update [transactions_table] set [product_group] = 'cat only'
where [product] in ('persian')

ただし、情報を異なるテーブルに分割することをお勧めします。

  1. 名前ではなく、製品 ID のみを持つトランザクション
  2. 製品、id、名前、およびカテゴリ ID を持つ
  3. ID と名前を持つカテゴリ

これにより、スペースが節約され、大きなテーブルでより速くなります。

于 2012-05-03T07:35:44.907 に答える