如何连接具有 1-N 关系的事实和维度表

Posted

技术标签:

【中文标题】如何连接具有 1-N 关系的事实和维度表【英文标题】:How to connect a fact and dimension table that are in 1-N relationship 【发布时间】:2015-11-06 15:52:21 【问题描述】:

我有一个带有一些度量和维度键的采购事实表。 然后,还有另一个表:折扣表。 Purchase FactTable 与 Discount Table 是 1-N 关系(对于每次购买,我可能会购买多个打折商品)。 折扣表有一些我想汇总的属性(描述、注释)和一些数值(例如:$ 折扣)。

如果我从这个折扣表中创建一个维度,我会出错 总和计数中的购买计数数(膨胀,每行一行 打折商品)。 如果我从这个折扣中创建一个单独的事实 表,我如何查询这两个事实表(目前他们 不共享任何维度,因此我不能使用一致/共享维度进行钻取)。 如果我创建一个退化维度,我们就回到第一个场景。

桥接表是否可以解决我的问题?

附言 这个link 帮助选择了桥接表,但我不确定它是否适用于我的情况(因为我需要从折扣表中汇总一些数字属性)。

谢谢,

【问题讨论】:

【参考方案1】:

我的经验将支持具有两个事实表 purchasepruchase_detail 的设计。

PURCHASE每次购买都有一行带有属性

 purchase_id  -- unique ID 
 purchase_date  
 customer_id
 ...

PURCHASE_DETAIL 每次购买有 1:N 行并存储定价详细信息。

 purchase_id -- corresponding purchase
 account_type -- dimension describing sales price and all discount types
 amount
 ....

金额有适当的符号;销售价格为正,折扣为负。

例子

 purchase_id    account_type    amount
 1              sales price     100
 1              discount1       -5
 1              discount2       -1

使用这种设计,您可以安全地进行 COUNT 次购买(在 PURCHASE 表上),SUM 总价格(在 PURCHASE_DETAIL 上) 并制作所有种类或详细的折扣报告。

【讨论】:

以上是关于如何连接具有 1-N 关系的事实和维度表的主要内容,如果未能解决你的问题,请参考以下文章

没有FK时如何找到维度表和事实表之间的关系?

星型架构[事实 1:n 维度]...怎么样?

将一个维度加入具有不同粒度的多个事实表

维度表、桥表和事实表连接

事实和维度表:一对一的关系

如何定义维度在 ssas 中使用的连接