web-dev-qa-db-ja.com

行アイテムの粒度でファクトテーブルのヘッダーレベルの値をロールアップするにはどうすればよいですか?

私が読んだことから、オーダーヘッダー/ラインアイテムの構造に基づくファクトテーブルの推奨粒度は、ラインアイテムレベルです。このプロセスでは、注文ヘッダーにのみ適用される追加の値が各ラインアイテムに対して繰り返されます。

親子アプリケーション用の次元モデルの設計

次元モデリングの基本

以下(2番目のリンクから)は、そのような設計の例です。

enter image description here

この例では、注文全体に適用される送料が、各ラインアイテムで繰り返されます。

しかし、特定の顧客の下ですべての出荷金額をロールすると、実際の値が2倍になります。この値の2倍になることをどのように回避しますか?

  1. 送料は、この表の非加算的事実と見なされますか?
  2. 何か特別な扱いは必要ですか?
  3. 単純に2つの(ほぼ同一の)ファクトテーブルを持たない理由はありますか? 1つは注文用、もう1つは注文品目用ですか?
7
8kb

私は魔法の配送製品を紹介し、これに対して配送金額を入れます(ヘビー/オーバーナイト/など、複数の配送製品を持つ可能性を残します)。ただし、おそらくShippingAmountをProductAmount列とは別に保持するので、製品の売上のみを簡単に合計できます。

4
Jamie

可能であれば、送料を広告申込情報に割り当てます。これにより、個々の製品の実際のコストと利益をできるだけ正確に評価できます。

これが不可能な場合は、Shippingを「製品」の特別なタイプにするという@Jamieのアイデアを2番目に引用します。

これについては、185ページのデータウェアハウスツールキット(第3版)でキンボールが説明していますが、彼は少し異なる推奨事項を示しています。

送料およびその他のヘッダーレベルのファクトを正常に割り当てることができない場合は、注文全体の集計表に表示する必要があります。別の高レベルのファクトテーブルにはいくつかの固有のユーザビリティの問題があるため、可能な場合は、割り当てアプローチを明らかに使用します。製品はヘッダーグレインファクトテーブルで識別されないため、割り当てがなければ、製品ごとにヘッダーファクトを探索することはできません。

2

この値の2倍になることをどのように回避しますか?

最初にOrderNumberでグループ化し、次にCustomerKeyでグループ化することで、これを行うことができます。次に例を示します。

--Setup.
DROP TABLE OrderLineItems;
CREATE TABLE OrderLineItems AS (
   SELECT 27 CustomerKey, 7867 OrderNumber, 49.98 OrderAmount
      , 3 ShippingAmount FROM dual);
INSERT INTO OrderLineItems VALUES (27,7867,12.99,3);
INSERT INTO OrderLineItems VALUES (39,7868,1321.99,132);
INSERT INTO OrderLineItems VALUES (19,7869,39.99,6);
INSERT INTO OrderLineItems VALUES (19,7870,1321.99,132);
COMMIT;

--Query.
SELECT CustomerKey, sum(OrderAmount), sum(ShippingAmount) FROM (
   SELECT CustomerKey, OrderNumber, sum(OrderAmount) OrderAmount
      , MIN(ShippingAmount) ShippingAmount 
   FROM OrderLineItems 
   GROUP BY CustomerKey, OrderNumber
)
GROUP BY CustomerKey;

CUSTOMERKEY SUM(ORDERAMOUNT) SUM(SHIPPINGAMOUNT)
----------- ---------------- -------------------
         27            62.97                   3 
         39          1321.99                 132 
         19          1361.98                 138 
2
Leigh Riffel

送料を注文明細間で均等に分割できます。これにより、お客様がロールアップできるようになります。

2
Yasir