Oracle11g 加载维度表背后的逻辑

Oracle11g 加载维度表背后的逻辑,oracle11g,data-warehouse,informatica-powercenter,dimensional-modeling,Oracle11g,Data Warehouse,Informatica Powercenter,Dimensional Modeling,如何从关系源填充Dim_tbl 这些示例表如下所示: tbl_sales: id_sales, fk_id_customer, fk_id_product, country, timestamp tbl_customer: id_customer, name, adress, zip, city tbl_product: id_product, price, product 我的目标是将这些属性放入开始模式。我遇到的问题是加载维度表背后的逻辑。我的意思是,我应该将哪些数据加载到D

如何从关系源填充Dim_tbl

这些示例表如下所示:

tbl_sales:    id_sales, fk_id_customer, fk_id_product, country, timestamp   
tbl_customer: id_customer, name, adress, zip, city
tbl_product:  id_product, price, product
我的目标是将这些属性放入开始模式。我遇到的问题是加载维度表背后的逻辑。我的意思是,我应该将哪些数据加载到Dim_产品中?tbl_产品中的所有产品?但我怎么知道某一特定产品的销售量呢

我想做的分析是:

 How many people bought product x.
 How many sales are made from city x.
 How many sales were made between Time x and y. 

示例数据:

 tbl_sales: id_sales | fk_id_customer | fk_id_product | country | timestamp 
                1    |       2        |      1        |   UK    | 19.11.2013 10:23:22
                2    |       1        |      2        |   FR    | 20.11.2013 06:04:22

 tbl_customer: id_customer | name | adress | zip | city
                      1    | Frank|Street X| 211 | London
                      2    | Steve|Street Y| 431 | Paris

 tbl_customer: id_product| Price | product
                      1  | 100,00| Hammer
                      2  |  50,00| Saw

让我们从一个非常简单的星型模式模型开始;例如,我假设您不需要担心如何处理维度属性的更改

事实销售 dimDate dimCustomer dimProduct
有多少人购买了产品x

x城的销售额是多少

在时间x和y之间进行了多少次销售


对正如我所说,这只是一个例子。好的,到目前为止我理解它。但我如何从上面的示例中加载表(请参见编辑文章的结尾)。我不明白我们如何将数据分割成dim/事实表。例如日期。。好吧,我现在在昏暗的桌子上约会了,但是模式如何知道销售何时完成?顺便说一句:在我的数据模型中,未来不会更改任何数据。事实表包含对
dimDate
(列
DateKey
)的引用,因此您需要将这两个表合并以确定销售日期。您的示例非常简单,因此存在事务表和维度表的1:1映射+
dimDate
,应该预先填充您感兴趣的期间的所有日期。从维度开始—从表中加载属性(包括自然键)并生成代理键(
CustomerKey
ProductKey
,等等)。然后加载事实表-使用查找从维度中获取适当的键。我强烈推荐这本书或至少这本书。
  DateKey
  CustomerKey
  ProductKey
  Counter (=1; this is a factless fact table)
  DateKey
  Date
  Year
  Quarter
  Month
  ...
  CustomerKey
  Name
  Address
  Zip
  City
  ProductKey
  Name
  Price (if it changes, you need move it to factSales)
SELECT DISTINCT CustomerKey
FROM factSales
WHERE ProductKey IN ( SELECT ProductKey
                      FROM dimProduct
                      WHERE Name = 'Product X' )
SELECT SUM(Counter)
FROM factSales
WHERE CustomerKey IN ( SELECT CustomerKey
                       FROM dimCustomer
                       WHERE City = 'City X' )
SELECT SUM(Counter)
FROM factSales
WHERE DateKey IN ( SELECT DateKey
                   FROM dimDate
                   WHERE Date BETWEEN DateX AND DateY )