Oracle11g 加载维度表背后的逻辑
如何从关系源填充Dim_tbl 这些示例表如下所示: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
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 )